来到新的公司先进行的是一个预研项目,也就使用WebRTC作为媒体引擎实现视频会议功能了。首先第一步当然是编译啦,而且是在linux、windows、android上面都要完成才可以。
0.WebRTC是什么?
WebRTC实现了基于网页的语音对话或视频通话,目的是无插件实现web端的实时通信的能力。
WebRTC提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、展示等功能,并且还支持跨平台,包括linux、windows、mac、android等。
上面这段基本是最笼统的说法,但的确是谷歌在大力推广的一个开源项目并且在2018年确定了WebRTC1.0的标准,在代码中称为UnifiedPlan。愿望应该就是让各个厂商、浏览器都能支持这样的协议,真正达到全平台互通的目的。
1.获取webrtc源码
这一步其实最简单,但却是最可能遇到麻烦的一步,因为请你自己准备好一个好用的梯子。准备好后请看后面:
1、下载和安装depot_tools,并且将depot_tools设置进环境变量中,设好后可以用gclient指令实验一下是否成功,同时也可以确保gclient到最新版本。
2、mkdir webrtc && cd webrtc进入目录,使用fetch--nohooks webrtc进行源码下载。
如果中间出错可以使用gclient sync命令继续。
注意:这里下载的版本和你的操作系统平台有关,如果是linux那么就是包含linux和android的版本。(大约25.5G左右,包含ndk,android sdk等等)
3、我自己碰到的一个坑是在下载clang的时候会卡住无法下载,首先要做的是在目录下建立一个boto.cfg的文件,文件内容如下:
[Boto]
proxy=127.0.0.1
proxy_port = 1080
具体端口请参考你自己的梯子,顺便说下我用的是SS,linux下的默认端口就是1080
然后使用:
export NO_AUTH_BOTO_CONFIG=~/webrtc_project/boto.cfg (linux)
set NO_AUTH_BOTO_CONFIG=F:\webrtc_project\boto.cfg (windows)
导入环境变量,继续用gclient runhooks进行下载。
但是,我依旧无法下载下来比如clang、gn等文件,特别是在mac下的时候就没成功过!windows试了好几次突然抽风好了,linux倒是一直没什么问题。如果你实在有需要可以私信我发源码包,目前我的版本是M70。
2、编译源码
从webrtc的官网上说只要进入到src层级目录使用
gn gen out/default
ninja -C out/default
就可以完成编译。
事实也的确如此,不过此时的webrtc是不支持H264编解码的,这应该是很多人的需求吧,所以下面告诉大家怎么设置webrtc的编译参数
gn args out/default/ --list
这样你就可以看到所有的可选项了。我这里推荐一个配置命令:
gn gen out/Release --args=`is_debug=false use_custom_libcxx=false proprietary_codecs=true use_custom_libcxx_for_host=false`
把is_debug=true就是debug版本了,同时也可以支持H264.
一共预计是有4000多项的编译内容,需要20-30分钟左右吧。完成后你可以进入out/default目录下,有许多的测试程序,最简单的是使用video_loopback。你可以使用./video_loopback --codec=h264进行测试。
结尾:
其实编译的过程一点都不复杂,只是网络环境占了太大的比重。ninja是谷歌的一款集成编译器,据说编译webrtc和chrome这样的大型项目的时间会比普通的clang和gcc快不少。gn也是一种不错的makefile,通过BUILD.gn来对源码进行控制,后面有机会和大家分享一下如何通过gn实现webrtc中自己的库。
网友评论