在嵌入式设备中实现webrtc的第三种方式①
最近两年,我对于网络知识,包括底层协议学习比较多,webrtc这种几乎是使用到了所有层面网络协议的技术也逐渐进入我的视野。
之前我提出了两种在嵌入式设备上实现webrtc的方式,一是用官方代码,然后改编译链,但是这条路是留给c++高玩的,因为它的代码是用最新的c++17写的,你必须重写adm(Audio Device Manager),我其实根本不会c++,平时只是改改同事的代码,所以路是断的;第二种是使用janus(实际上用到的就一两百行代码,我是直接参考webrtcgateway)和rtcdc组合拳,这个我根本没法跟大家解释原理,因为这条路我虽然走通了,但比前一条路应该是难太多,它要求你懂webrtc协议栈所有网络协议,然后还得会使用和整合数个三方库,期间你会移植十几个库……而且最终你还面临没有jitterbuffer的窘境,而且还得自己做aec(Acoustic Echo Cancellation)
实际上第二条路是很舒服的,如果走通,你会发现你进入了一个新境界。
好,废话说太多了,进入正题,今天我介绍一个目前看起来更优于前两个方法的webrtc嵌入式实现。他就是amazon-kinesis提供的设备端sdk。
https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c
大家可以看作是第二种方式的优化版本,毕竟是大厂,肯定比我们自己拧螺丝更健壮。
这篇文章主要是介绍如果编译它,我仍然以海思系列芯片为例。
(首先我们可能需要一个墙外的服务器,我是在阿里云买了一周的美国ecs,因为中途git clone太慢了)
1.先拉取代码
  
git clone --recursive https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c.git
2.然后更改srtp的CMakeLists,不生成测试文件(因为它link.txt里面会写-lpthread,我的嵌入式编译器不认)
  
-D TEST_APPS=OFF
3.执行cmake
  
export CC=arm-himix200-linux-gcc CXX=arm-himix200-linux-g++
mkdir build && cd build
cmake .. -DBUILD_SAMPLE=FALSE -DBUILD_STATIC_LIBS=TRUE -DBUILD_OPENSSL=TRUE -DBUILD_OPENSSL_PLATFORM=linux-generic32 -DBUILD_LIBSRTP_HOST_PLATFORM=x86_64-unknown-linux-gnu -DBUILD_LIBSRTP_DESTINATION_PLATFORM=arm-unknown-linux-uclibcgnueabi
其中BUILD_SAMPLE=FALSE对于我是必要的,因为跟2一样,link.txt里面还是-lpthread
  
4.make
  
5.拿到所有编译出来的.a和需要的.h。
除了这里的两个.a和3个.h之外,还需要把引用的库和头文件拿出来
  
当然,实际上我们用不了这么多
(这里面编译的openssl不知道为什么我用不了,如果你也爆下面的错,你也跟我一样重新编译一下openssl)
  
我编译openssl的指令如下(期间还需要删一下-m32)
#setarch i686
./Configure no-asm no-shared --prefix=/mnt/f/hisi/workspace/openssl-OpenSSL_1_1_0h/_install --cross-compile-prefix=arm-himix200-linux- linux-generic32
make
最后我们来生成一个sdp试试

编译后放到设备上运行,输出如下:

有高手希望指点的话可以通过微信与我联系,我的id是wxid_8r2mjkbcu2an22
最后修改时间 2020-10-27 15:44:52
在嵌入式设备中实现webrtc的第三种方式①的更多相关文章
- 在嵌入式设备中实现webrtc的第三种方式③
		
本系列的最后一篇,讲解收发音视频数据. 贴出最终效果: 其实很简单,直接调用writeFrame即可,如下图: 当然,这是部分代码,完整代码在下面,展开可见: 1 #include "com ...
 - 在Tomcat中部署web项目的三种方式
		
搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...
 - Tomcat中部署web应用的三种方式
		
Tomcat中部署web应用的三种方式(静态部署) 第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...
 - spring中创建bean对象的三种方式以及作用范围
		
时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...
 - Java中 实现多线程成的三种方式(继承,实现,匿名内部类)
		
---------------------------------------------------------------------------------------------------- ...
 - Linux中设置服务自启动的三种方式
		
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立/e ...
 - [转]Linux中设置服务自启动的三种方式
		
from:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...
 - Linux中设置服务自启动的三种方式,ln -s 建立启动软连接
		
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务(http://www.0830120.com) 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立 ...
 - python 中增加css样式的三种方式
		
增加css样式的三种方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
 
随机推荐
- vue项目工程中npm run dev 到底做了什么
			
1. npm install 安装了webpack框架中package.json中所需要的依赖 2.安装完成之后,需要启动整个项目运行,npm run 其实执行了package.json中的scrip ...
 - xxe漏洞,及xml
			
xxe漏洞 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文档类型定义(可选).文 ...
 - spring注解(Component、依赖注入、生命周期、作用域)
			
1.注解 注解就是一个类,使用@加上注解名称,开发中可以使用注解取代配置文件 2.@Component 取代<bean class="">,@Component 取代 ...
 - 用JTable 实现日历
			
效果图: 主要思想:日历最核心的功能就是能显示某年某月对应的日期和星期几.因此只要实现传入具体的年份和月份,得到一组存放了日期的数组a[ ]即可.其中数组的大小设置成42,要考虑的问题是当月的第一天对 ...
 - 开源两个spring api项目
			
开源两个spring api项目 转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13762616.html 工作也有五年有余了,中间一直迫于时间或能力没从零开 ...
 - 【Python】数据结构
			
列表的更多特性 list.append(x) 在列表的末尾添加一个元素.相当于 a[len(a):] = [x] . list.extend(iterable) 使用可迭代对象中的所有元素来扩展列表. ...
 - 【漏洞复现】S2-052 (CVE-2017-9805)
			
一.漏洞描述 Struts2 的REST插件,如果带有XStream组件,那么在进行反序列化XML请求时,存在未对数据内容进行有效验证的安全隐患,可能发生远程命令执行. 二.受影响版本 Struts2 ...
 - 开始在Windows上开发Android
			
介绍 鉴于您正在阅读这篇文章,您很可能已经知道android是什么了.可能.在科幻小说和电影中,机器人本质上是具有拟人化特征的机器人.还记得<星球大战>里的C-3PO吗?那<星际迷航 ...
 - .net core中的那些常用的日志框架(NLog篇)
			
前言 咱们上回讲到,.net core中内置的Logging日志框架的使用,以及浅显的讲解,接下来,给大家介绍一个第三方日志框架(NLog). NLog简介 NLog是适用于各种.NET平台(包括.N ...
 - dockerfile解析过程
			
什么是dockerfile? DockerFile是用来构建docker镜像的文件,是由一系列命令和参数组成. 构建步骤? 1.编写dockerfile文件 2.docker build 3.dock ...