最近准备学习WebRTC,在获取最新源码及编译过程中遇到不少坑,参考过不少博文,里面提到的坑基本也都遇到了,还有些博文里没提到但我遇到的,在这篇博文里面一并记录下,以供有需要的同学参考。同时对涉及到的坑有不同见解或更好的解决方法的同学,欢迎评论交流。
1.操作系统
Win7 64位及以上,必须是64位的。我用的是Win10,64位。
2.VS版本
Visual Studio 2017 及以上。我用的Visual Studio 2017 15.9企业版。
下载链接:https://download.csdn.net/download/caoshangpa/10410923
注意:VS2017最好是安装在默认目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise,原因后面说明。
下面是我安装时选择的组件:
WIN10 SDK还需要安装Debugging Tools,安装步骤为 控制面板 → 程序 → 程序和功能 → 选中“Windows Software Development Kit” → 变更 → Change → 勾选 “Debugging Tools For Windows” → Change。如下:
3.Python
编译过程中需要,我用的2.7.9版本,需添加到Path环境变量。注意:如果系统还装了Python3,要把Python2的环境变量放在python3的环境变量之前,这样编译过程中系统才会选择Python2解释器。
下载链接:https://www.python.org/ftp/python/2.7.9/python-2.7.9.amd64.msi
4.Microsoft DirectX SDK (June 2010)
下载地址:http://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
这一步,大概率都会出错,出错原因参考下面链接。强烈建议安装前先看下下面的链接,先把该卸载的高版本卸载掉再安装,省去不必要的麻烦。
参考:安装DirectX SDK时出现Error Code:s1023 的解决方案
5.depot_tools
depot_tools是包含下载、编译的相关工具,需要先下载并配置它,才能继续后面的操作。
下载地址:https://storage.googleapis.com/chrome-infra/depot_tools.zip
下载后解压,并将解压好的depot_tools目录添加到path系统环境变量中,如下图所示:
1.设置系统环境变量
各环境变量设置含义如下:
DEPOT_TOOLS_UPDATE=0 #不更新depot_tools
DEPOT_TOOLS_WIN_TOOLCHAIN=0 #编译时使用本机VS工具链
GYP_MSVS_VERSION = 2017 #指定VS版本
GYP_MSVS_OVERRIDE_PATH = C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise #vs安装路径,替换成自己的
GYP_GENERATORS=msvs-ninja,ninja #使用ninja编译
http_proxy=http://127.0.0.1:1080 #本机代理端口
https_proxy=http://127.0.0.1:1080 #本机代理端口
本机代理1080端口加入系统环境变量后,后续使用电脑时如果不开启代理,会出现某些浏览器如Edge不能上网的问题,但开了代理之后就能上网了,解决方法:当你不开启代理的时候把下面“使用设置脚本”这个关掉,开着代理的时候无所谓,都能上网。
2.使用depot_tools获取WebRTC源码
在cmd窗口中输入命令之前,先做如下操作:
系统locale最好设置成English,就是控制面板里面的Region 控制面板-> 时钟和区域->区域->管理->更改系统区域设置
选择英语美国,勾选Beta版,然后重启。目的是消除源码获取过程中可能出现的“UnicodeDecodeError: 'gbk' codec can't decode byte 0x9d in position 6304: illegal multibyte sequence”编解码错误,此类错误详细说明可看https://www.crifan.com/summary_python_unicodedecode_error_possible_reasons_and_solutions/,解决方法可参考:https://github.com/google/tangent/issues/11
我通过上述操作后错误成功解除。
要注意,这样设置后会造成word、excel里面所有中文字体名称显示为英文,如宋体显示为SimSun,仿宋显示为FangSong等,这是因为改成“英语(美国)”所致。此外,在MarkdownPad里打开还会出现如下图右侧中文字显示异常的问题,这是勾选了Beta版,改了编码方式所致,所以建议编译成功后改回“中文(简体,中国)”、不勾选Beta版,然后重启电脑,中文字体名称恢复为中文,其他编码异常也会消除。
然后在cmd窗口中输入以下命令:
mkdir webrtc-checkout #这是创建一个目录,当然也可以用鼠标创建。
cd webrtc-checkout #进入到我们刚刚创建的目录中
fetch --nohooks webrtc #获取代码,这一步会花点时间,代理给力的话也很快
gclient sync # 当过程中断时(包括上一步的失败),我们可以使用该命令恢复并继续
获取源码过程中,可能会出现“File name too long”的错误,在git bash里面,输入如下命令可解决:
git config --global core.longpaths true
如果顺利的话,源码拉下来应该是9GB左右,编译完后共20GB左右,注意预留磁盘空间。整个过程花了差不多10GB流量。
执行gclient sync的过程中会有些警告,但是没有什么影响,不必在意,比如:
查看任务管理器,如果一直在下载,进程信息的网络字段不会为0。
如果gclient sync执行成功,下载的WebRTC的源码大概9GB左右,但是此时的源码并不完整,还缺少一些工具和资源文件。比如会缺少下列工具和资源文件:
(1)工具
gn.exe:位于webrtc-checkout\src\buildtools\win
clang-format.exe:位于webrtc-checkout\src\buildtools\win
isolate.exe:位于webrtc-checkout\src\tools\luci-go\win64
......
(2)资源
位于webrtc-checkout\src\resources
......
这里工具比资源重要,有同学可能想到了去其他地方拷贝,但这是下策,因为上面列举工具和资源是我所知缺少的,至于是否还缺少其他的,我并不知道。
解决方法:执行gclient runhooks(执行一次HOOK操作),或者执行gclient sync --force(此命令会自动执行一次HOOK操作)。此时会下载缺失的工具和资源文件。
这里执行gclient runhooks是要从谷歌网站上获取一些文件,代理够给力的话获取资源是不会有问题的,但我遇到了某些文件获取失败的情况:
Failed to fetch file gs://chromium-gn/a68b194afb05d6a6357cf2e2464136ed7723c305 for src/buildtools/mac/gn.
...
Error: Command 'download_from_google_storage --no_resume --platform=darwin --no_auth --bucket chromium-gn -s src/buildtools/mac/gn.sha1' returned non-zero exit status ...
建议仔细阅读链接https://idom.me/articles/843.html的说明,当报错时可以手动在浏览器下载,然后把下载下来的文件复制到目标文件夹中,并且改成要求的名字。
如果遇到如下提示:NOTICE:You have PROXY values set in your environment,......BOTO_CONFIG......NO_AUTH_BOTO_CONFIG environment var.
解决方法:新建一个文件,http_proxy.boto,放在任意位置,我放到了D:\depot_tools中,文件内容如下:
[Boto]
proxy=127.0.0.1
proxy_port = 1080
然后将该文件添加到系统环境变量,如下图:
指令如下:
cd webrtc-checkout\src
gn gen out/Default --ide=vs2017 #生成VS2017解决方案
ninja -C out/Default #开始编译
这一步也有个大坑,VS2017最好是安装在默认目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise,或者只改个盘符,否则即使设置了GYP_MSYS_VERSION环境变量,还是会提示错误:Exception:Visual Studio Version 2017(from GYP_MSYS_VERSION)not found,这就是开头提到的为什么建议把VS2017安装在默认目录C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise。
产生这个错误的原因是webrtc-checkout\src\build\vs_toolchain.py中语句已经把部分VS的安装路径写死了,如下所示:
for path in (
os.environ.get('vs2017_install'),
os.path.expandvars('%ProgramFiles(x86)%'
'/Microsoft Visual Studio/2017/Enterprise'),
os.path.expandvars('%ProgramFiles(x86)%'
'/Microsoft Visual Studio/2017/Professional'),
os.path.expandvars('%ProgramFiles(x86)%'
'/Microsoft Visual Studio/2017/Community')):
if path and os.path.exists(path):
return path
除此之外,还有一个可能会遇到的坑,那就是pywin32。
编译过程中会报一个类似如下的错误:(这张图是网上找的,我自己出错的图没有留)我编译过程中报的错是:ImportError: No module named win32file,原因都一样,就是windows系统上未安装Pywin32模块,解决办法参考链接:https://blog.csdn.net/qq_34369025/article/details/53687900
安装完之后,即可顺利编译了。
成功编译后,在webrtc-checkout\src\out\Default中会有一些可执行的小例子,比如peerconnection_server.exe和peerconnection_client.exe,可以用它俩进行简单的测试。
局域网运行PeerConnection 例子需要用到两台电脑,并要求两台电脑都配置有摄像头和麦克风。测试步骤如下:
1. 电脑A运行peerconnection_server.exe。
2. 电脑A运行peerconnection_client.exe, Server一栏输入 localhost,点击Connect。
3. 电脑B运行peerconnection_client.exe,Server一栏输入电脑A的局域网ip地址,点击Connect。
4. 电脑A或电脑B双击列表框出现的第一个选项, 建立音视频通信。
5. 任意一方可以在中途按ESC键退出音视频通信。
Windows下 WebRTC Demo运行: PeerConnection参考链接:https://blog.csdn.net/chenxiemin/article/details/79039350
整个过程主要参考博文:https://blog.csdn.net/caoshangpa/article/details/53353681
至此,完结。在此感谢文中各链接的博主给的参考!祝大家捣鼓WebRTC顺利!