转载网站:https://blog.jianchihu.net/webrtc-build-vs2017.html
在音视频领域,想深入研究的话,必定会接触WebRTC。WebRTC是一个庞大的工程,就像是音视频领域的百科全书,音视频采集,编解码,传输,渲染等一条龙在WebRTC里都有,而且WebRTC还有很多先进的音视频处理算法。由于WebRTC代码过于庞大,所以最好单步调试跟踪代码运行,这样才可以更好地学习WebRTC,否则很难有头绪。工欲善其事必先利其器,作为调试神器,宇宙第一IDE Visual Studio必不可少。所以本篇文章主要讲下如何在Windows上编译WebRTC,同时得到VS工程,然后调试。
系统要求
- Win7及以上64位系统。
- 内存至少8G,当然越大越好。
- 100G磁盘空间(NTFS格式),不能是FAT32,因为会生成大于4G的文件。
Visual Studio安装
WebRTC用到了很多C++最新特性,所以编译最新WebRTC代码VS要求为2017版本。我用的是VS2017社区版。安装VS2017时选择自定义安装,必须勾选如下几项:
其他选项可以选择安准。如下是我的安装配置。
- 10.0.17134 或以上的Win10 SDK,后面还要安装调试工具
- MFC以及ATL这两项
安装完VS2017后,必须安装SDK调试工具。打开控制面板->程序与功能,找到刚才安装的Windows Software Development Kit,鼠标右键->change。
勾选Debugging Tools For Windows,然后点击change。
depot_tools安装
下载depot_tools然后解压到某个目录,比我的解压到E盘根目录。接着将该depot_tools目录的路径加到系统环境变量Path里,然后把该路径移到最前面(避免已安装的python与git造成影响)。
然后新建一个系统环境变量: DEPOT_TOOLS_WIN_TOOLCHAIN ,值设置为0,这是为了告诉depot_tools使用我们本机的VS进行编译。
获取WebRTC源码
由于WebRTC的源码地址被墙了,所以需要通过代理才能得到源码。后面都是命令行操作,打开cmd窗口,由于我用的是ss代理,在cmd窗口我按如下设置:
1 2 | set http_proxy=127.0.0.1:1080 set https_proxy=127.0.0.1:1080 |
设置当前cmd窗口代理上网,如果cmd窗口关闭了重开得重新设置。当然了,也可以设置系统全局代理上网。其他代理方法也类似。如果是VPN之类非代理,就不用这样设置了。
接着执行gclient
命令,安装编译需要用到的一些工具,比如git以及python。
1 | gclient |
再接着设置一些环境变量。
1 2 3 | set GYP_MSVS_VERSION=2017 set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Community set GYP_GENERATORS=msvs-ninja,ninja |
其中GYP_MSVS_OVERRIDE_PATH
是我们安装的VS2017路径。
然后cd到要放源码的地方(要遵守前面说的磁盘要求),执行:
1 2 3 4 | mkdir webrtc-checkout cd webrtc-checkout fetch --nohooks webrtc gclient sync |
这一过程是个漫长的等待,要下的东西将近10G,包括源码以及一些测试的音视频文件资源等。
使用gclient sync
这一步得注意下,可能会报类似如下错误:
1 | UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128) |
Unicode字符编码问题,python的一个bug,因为很多人系统语言都是中文的,所以得按如下设置,把系统区域改为英文,然后重启即可。
编译
生成VS2017工程文件:
1 2 | cd src gn gen --ide=vs out/Default |
可以在src\out\Default\ 下得到 all.sln解决方案文件。
执行编译命令:
1 | ninja -C out/Default |
用VS2017打开:
可以看到众多工程,到此算是完成了。找到我们感兴趣的,就可以用VS单步调试,跟踪代码运行了。这么多宝贝够研究很久了。
代码更新
1 2 3 | git checkout master git pull origin master gclient sync |
总结
总之WebRTC在Windows上的编译很考验耐心,也很苛刻,需要电脑性能够好,有个好代理。
参考
1. WebRTC Native code Development
2. Chromium’s build instructions for Windows