最近两年,我对于网络知识,包括底层协议学习比较多,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的第三种方式①的更多相关文章

  1. 在嵌入式设备中实现webrtc的第三种方式③

    本系列的最后一篇,讲解收发音视频数据. 贴出最终效果: 其实很简单,直接调用writeFrame即可,如下图: 当然,这是部分代码,完整代码在下面,展开可见: 1 #include "com ...

  2. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  3. Tomcat中部署web应用的三种方式

    Tomcat中部署web应用的三种方式(静态部署)       第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...

  4. spring中创建bean对象的三种方式以及作用范围

    时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有 ...

  5. Java中 实现多线程成的三种方式(继承,实现,匿名内部类)

    ---------------------------------------------------------------------------------------------------- ...

  6. Linux中设置服务自启动的三种方式

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/e ...

  7. [转]Linux中设置服务自启动的三种方式

    from:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...

  8. Linux中设置服务自启动的三种方式,ln -s 建立启动软连接

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务(http://www.0830120.com) 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立 ...

  9. python 中增加css样式的三种方式

    增加css样式的三种方式: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

随机推荐

  1. Mysql-Innodb : 从一个字节到整个数据库表了解物理存储结构和逻辑存储结构

    首先要从Innodb怎么看待磁盘物理空间说起   一块原生的(Raw)物理磁盘,可以把他看成一个字节一个字节单元组成的物理存储介质   如果要在这块原生物理空间中插入一条记录,不能单单只插入数据,还需 ...

  2. Maven【常见知识点速查】

    文章更新时间:2020/04/10 一.为什么使用Maven这样的构建工具[why] ① 一个项目就是一个工程 如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利 ...

  3. jwt攻击手段

    jwt 秘钥泄漏/敏感文件泄漏 在一些配置文件被我们可查的情况下,包括各种文件读取,源码泄漏,此时伪造身份就变得很容易了. 空加密算法 对于明文的加密算法通常为HS256,在jwt中分为三个部分,以点 ...

  4. Python-对字典进行排序

    案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...

  5. Python-设置文件缓冲类型

    案例: 将文件内容写入到硬件设备时候,使用系统调用,这类IO操作时间长,为了减小IO操作,通常会使用缓冲区(有足够多数据才能调用). 文件缓冲行为分为:全缓冲,行缓冲,无缓冲 如何解决? open(' ...

  6. 排序算法:归并排序(Merge Sort)

    归并排序 归并排序采用了分治策略(divide-and-conquer),就是将原问题分解为一些规模较小的相似子问题,然后递归解决这些子问题,最后合并其结果作为原问题的解. 归并排序将排序数组A[1. ...

  7. GOOGLE工作法(世界一速)|木深读书笔记

  8. Java知识系统回顾整理01基础05控制流程02 switch

    一.switch switch 语句相当于 if else的另一种表达方式 switch可以使用byte,short,int,char,String,enum 注: 每个表达式结束,都应该有一个bre ...

  9. spring-boot-route(十四)整合Kafka

    在上一章中SpringBoot整合RabbitMQ,已经详细介绍了消息队列的作用,这一种我们直接来学习SpringBoot如何整合kafka发送消息. kafka简介 kafka是用Scala和Jav ...

  10. 一个故事看懂AI神经网络工作原理

    我是一个AI神经元 我是一个AI神经元,刚刚来到这个世界上,一切对我来说都特别新奇. 之所以叫这个名字,是因为我的工作有点像人类身体中的神经元. 人体中的神经元可以传递生物信号,给它输入一个信号,它经 ...