Android平台WebRTC 编译方法
WebRTC介绍
WebRTC 是Google开源的实时音视频开发框架,直接编译运行,也可以基于它进行二次开发。大多音视频应用场景都采用WebRTC 技术,例如视频会议、在线教育、VoIP通话。WebRTC 是chorme 浏览器的一部分,和chorme 采用相同的编译工具链,编译完成后可以用demo 直接通话,支持windows、Android、iOS 、Web 。
WebRTC中使用了很多第三方库,各个平台的代码需要独立下载,编译环境有差异,对初学者不友好,以编译Android 平台构进行介绍。需要从国外下载代码,<red>能够科学上网是必备条件</red>。
前期准备
- Ubuntu linux环境,不支持CentOS ,需要选择LTS版本,最好不使用最新版本(18版本最佳),虚拟机也可以,磁盘可用空间50G以上,内存2G以上。
- 安装好git、apt 工具。
- WebRTC 源码下载,需要使用depot_tools 这个工具:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
- 下载完成,需要depot_tools 的路径,添加到环境变量 PATH,通常直接写入到 ~/.bashrc这个文件, 后面要用到工具里面的下载代码。
export PATH = “depot_tools 的路径”:$PATH
source ~/.bashrc # 更新环境变量
这样写的好处,当编译过程有命令冲突时,可以优先使用depot_tools 下的命令,减少不必要的麻烦。
源代码下载
在磁盘空间不少于50G的目录下,创建文件夹,开始下载代码,具体时间取决网络速度。
mkdir webrtc
cd webrtc
fetch –nohooks webrtc_android
gclient sync
代码下载完成后,建议将代码切到比较稳定的分支,最新的是m96版本,建议使用m94版本。版本号与分支号对应关系。每次切完分支后,一定要执行gclient sync 更新代码。
cd src
git checkout -b m94 remotes/branch-heads/4006 # 切换代码分支
cd .. #一定要返回到上层目录
gclient sync #更新代码
源代码编译
安装依赖包,可以直接执行下面的脚本,在编译的过程如果出现错误,大概率是下面的脚本没有执行。
./src/build/install-build-deps.sh
./src/build/install-build-deps-android.sh
代码编译依赖GN,要确保当前路径在src 下面,代码编译参考链接。
gn gen out/Android –args=’target_os=”android” target_cpu=”arm64″‘ #不同架构版本,见参考链接
ninja -C out/Android AppRTCMobile #单独编译生成Android demo
ninja -C out/Android #编译所有 Android工程
gn clean out/Android #清理编译结果
编译完成后,生成的demo 路径为 src/out/Android/apks/AppRTCMobile.apk ,可以使用adlb 工具在手机上运行。
demo 运行
原生demo,信令服务器的地址在海外,连接成功率较低。主被叫双方输入相同的房间号,就可以开始通话。
经验总结
- Linux 环境不建议使用 Ubuntu 20版本,建议使用16、18 版本,可以减少因环境带来的编译错误。20 版本会出现,”使用或覆盖了已过时的API,有关详细信息请使用-Xlint:deprecation重新编译” 。
- 磁盘空间要保持50G 以内,如果下载失败,要执行 gclient sync 重试。
- 如果缺乏Ubuntu 环境,可以在CentOS 系统上安装 Ubuntu docker 镜像,可以参考链接。
WebRTC在实时音视频领域占据重要地位,它是一个技术宝库。腾讯会议、Agora、微信VoIP等产品中都有它的影子,接下来将进一步分析WebRTC在弱网下的丢包抗性以及背后的技术。