WebRTC sdk 封装踩过的那些坑

背景信息:csdn第一篇博客

webrtc版本,更新代码时间:2018年12月24日,分支:master

目标:打造多方音视频通讯实验平台

思路:

可选方案1: 从顶层peerconnection接口启用,此方案需要涉及大量ICE及Sdp信息的交换,理解与流程梳理,成本高,放弃;

可选方案2: 从mediaengine层api使用,此方案舍弃ICE及p2p相关逻辑,可按照多方音视频会议模式自行实现信令系统;而且mediaengine层有一些通道管理逻辑,可方便封装sdk;

综合考虑,选择方案2. 也有从更底层的call层api进行sdk封装的考虑,可以后续考察,可能灵活性强于mediaenging,工作量会增加一些,随着对webrtc理解的逐渐深入,后续可以重点考察。

 

win 版本具体思路,封装动态库,调用webrtc media接口:

vs 工程生成步骤:

1,  通过vs2017打开cmd 终端

2,set DEPOT_TOOLS_WIN_TOOLCHAIN=0

3. 建立特定的目录,配置args.gn:

gn生成vs2017文件时,具体参数如下:

target_os="win" target_cpu="x86" is_component_build=false is_clang=false use_rtti=true

注意:win版本不能使用clang编译器,虽然使用clang也可以编译通过,但在自定义的vs工程中无法直接使用webrtc的静态库(会有一些异常crash问题)

4. 自建dll工程,可以直接引用libwebrtc.a, 调用webrtc功能。

 

android版本思路与win版本一样,sdk封装成so,再引用到android studio中

1. 通过修改gn脚本文件,生成sdk编译脚本,ninja文件,然后通过ninja编译

2. gn基本知识网络上很多,有几个要点这里提一下;

     关于生成so的导出函数,脚本中一定要加上下面一行,否则,无法导出纯C的接口函数:
    suppressed_configs += [ "//build/config/android:hide_all_but_jni_onload" ]

   踩坑经验,使用NDK编译so引入webrtc静态库的方案,坑太多,建议把经历放在gn、ninja编译环境上,笔者被虐半个月得出此经验。

未完待续    

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值