首页 > WebRTC > Windows平台WebRTC编译-VS2017
2019
03-14

Windows平台WebRTC编译-VS2017

在音视频领域,想深入研究的话,必定会接触WebRTC。WebRTC是一个庞大的工程,就像是音视频领域的百科全书,音视频采集,编解码,传输,渲染等一条龙在WebRTC里都有,而且WebRTC还有很多先进的音视频处理算法。由于WebRTC代码过于庞大,所以最好单步调试跟踪代码运行,这样才可以更好地学习WebRTC,否则很难有头绪。工欲善其事必先利其器,作为调试神器,宇宙第一IDE Visual Studio必不可少。所以本篇文章主要讲下如何在Windows上编译WebRTC,同时得到VS工程,然后调试。

本文内容截止2020.04.01,最新代码测试编译通过

系统要求

  • Win7及以上64位系统。
  • 内存至少8G,当然越大越好。
  • 100G磁盘空间(NTFS格式),不能是FAT32,因为会生成大于4G的文件。

Visual Studio安装

WebRTC用到了很多C++最新特性,所以编译最新WebRTC代码VS要求为2017(>=15.7.2) 版本。我用的是VS2017社区版(VS新老版本下载)。VS最好安装在C盘,按默认路径安装,否则可能遇到问题(见问题0x02)。安装VS2017时选择自定义安装,必须勾选如下几项:

  • Desktop development with C++组件中10.0.18362或以上的Win10 SDK,后面还要安装调试工具
  • Desktop development with C++组件中MFC以及ATL这两项

2020.04.01更新:由于最新WebRTC源码要求10.0.18362及以上Win10 SDK。所以请下载10.0.18362 或以上的Win10 SDK。本文写于2019年,那时VS2019还没发布。由于10.0.18362 Win10 SDK存在于VS2019安装选项中,VS2017安装选项不带有该SDK,所以使用VS2017得从Win10 SDK下载另外下载最新Win10 SDK,或者再装个VS2019选择安装该SDK

安装完VS2017后,必须安装SDK调试工具。打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit,鼠标右键->change。
Windows平台WebRTC编译-VS2017 - 第1张  | 剑痴乎

勾选Debugging Tools For Windows,然后点击change。
Windows平台WebRTC编译-VS2017 - 第2张  | 剑痴乎

depot_tools安装

下载depot_tools然后解压到某个目录,比我的解压到E盘根目录。接着将该depot_tools目录的路径加到系统环境变量Path里,然后把该路径移到最前面(避免已安装的python与git造成影响)。
Windows平台WebRTC编译-VS2017 - 第3张  | 剑痴乎

然后新建一个系统环境变量: DEPOT_TOOLS_WIN_TOOLCHAIN ,值设置为0,这是为了告诉depot_tools使用我们本机的VS进行编译。
Windows平台WebRTC编译-VS2017 - 第4张  | 剑痴乎

获取WebRTC源码

由于WebRTC的源码地址被墙了,所以需要通过代理或者vpn才能得到源码。后面都是命令行操作,打开cmd窗口,由于我用的是ss代理,在cmd窗口我按如下设置:

设置当前cmd窗口代理上网,如果cmd窗口关闭了重开得重新设置。当然了,也可以设置系统全局代理上网。其他代理方法也类似。如果是VPN之类非代理,就不用这样设置了。

接着执行gclient命令,安装编译需要用到的一些工具,比如git以及python。

再接着设置一些环境变量。

其中GYP_MSVS_OVERRIDE_PATH是我们安装的VS2017路径。

然后cd到要放源码的地方(要遵守前面说的磁盘要求),执行:

这一过程是个漫长的等待,要下的东西将近10G,包括源码以及一些测试的音视频文件资源等,如果因为网络等原因中断了,就再gclient sync
Windows平台WebRTC编译-VS2017 - 第5张  | 剑痴乎

使用gclient sync可能遇到的问题

问题0x01

Unicode字符编码问题,python的一个bug,因为很多人系统语言都是中文的,所以得按如下设置,把系统区域改为英文,然后重启即可。
Windows平台WebRTC编译-VS2017 - 第6张  | 剑痴乎

问题0x02

2019.04.01更新。去年的版本我编译时没报这个问题,我看到评论里有人提出来了,我下了今天的最新代码,编译时也碰到了,看了下是最新WebRTC windows相关脚本变化导致

Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017)错误:

解决方法为修改src\build目录下的vs_toolchain.py脚本,加了一行,直接写死我们的VS路径代码:

脚本中的代码默认以C盘处理的,如果我们的VS安装在C盘默认目录就不会报这个错,但我想很多人VS不会装在C盘。

执行:python src/build/vs_toolchain.py get_toolchain_dir验证修改,控制台打印如下:

说明修改成功。接着我们使用gclient sync会报如下问题:

因为我们修改了脚本,所以执行gclient sync --force即可。

gclient sync --force成功结束后,vs_toolchain.py文件会被还原,所以得按前面重新修改vs_toolchain.py。vs_toolchain.py中会优先选择高版本VS编译,由于本文使用VS2017编译,假如我们电脑安装有VS2019,需要按如下修改,把VS2017放前面,避免造成影响。

编译

生成VS2017工程文件:

可以在src\out\Default\ 下得到 all.sln解决方案文件。

如果不想使用默认编译参数,可以使用gn args out/Default --list查看当前编译参数,通过类似如下方式设置:

执行编译命令:

Windows平台WebRTC编译-VS2017 - 第7张  | 剑痴乎

用VS2017打开:
Windows平台WebRTC编译-VS2017 - 第8张  | 剑痴乎
可以看到众多工程,到此算是完成了。找到我们感兴趣的,就可以用VS单步调试,跟踪代码运行了。这么多宝贝够研究很久了。

代码更新

引用WebRTC库

WebRTC编译后会在src\out\Default\obj目录下生成整个WebRTC工程的静态库:webrtc.lib,链接下这个就可以了。

总结

总之WebRTC在Windows上的编译很考验耐心,也很苛刻,需要电脑性能够好,有个好的访问被墙地址工具。

参考

1. WebRTC Native code Development
2. Chromium’s build instructions for Windows

最后编辑:
作者:Jeff
Avatar
管理员——代码为剑,如痴如醉

48 Responses to Windows平台WebRTC编译-VS2017

  1. Avatar jih488 says:
    Google Chrome 73.0.3683.86 Google Chrome 73.0.3683.86 Windows 7 x64 Edition Windows 7 x64 Edition

    博主您好!可否分享编译好的WebRTC Visual Studio工程文件?谢谢!

  2. Avatar Jeff says:
    Google Chrome 72.0.3626.121 Google Chrome 72.0.3626.121 Windows 10 x64 Edition Windows 10 x64 Edition

    好的,由于将近10G,我得切割下压缩包上传,请留下你的邮箱地址,我到时给你百度网盘地址。

  3. Avatar jih488 says:
    Google Chrome 73.0.3683.86 Google Chrome 73.0.3683.86 Windows 7 x64 Edition Windows 7 x64 Edition

    谢谢博主,已收到!

  4. Avatar iosnower says:
    Firefox 66.0 Firefox 66.0 Windows 10 x64 Edition Windows 10 x64 Edition

    博主,感谢你的分享,网盘地址也发我一份,谢谢。
    zero_hot@163.com

  5. Avatar fk says:
    Firefox 65.0 Firefox 65.0 Windows 7 x64 Edition Windows 7 x64 Edition

    博主,请也给我发一份吧,谢谢!2622733392@qq.com

  6. Avatar 昨日围城 says:
    Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 10 x64 Edition Windows 10 x64 Edition

    博主求发,跪谢。654125664@qq.com

  7. Avatar 悠哉嗑瓜子 says:
    Google Chrome 74.0.3729.108 Google Chrome 74.0.3729.108 Windows 10 x64 Edition Windows 10 x64 Edition

    博主您好,感谢分享!编译好的WebRTC工程网盘地址能否再共享一下,有劳,灰常感谢! sky_net2006@126.com

  8. Avatar rao says:
    Google Chrome 69.0.3497.81 Google Chrome 69.0.3497.81 Windows 7 x64 Edition Windows 7 x64 Edition

    给我发一个raoshr@sohu.com,谢谢!

  9. Avatar 共惜芳华 says:
    QQbrowser 10.4.3587.400 QQbrowser 10.4.3587.400 Windows 10 x64 Edition Windows 10 x64 Edition

    博主求发,跪谢。276315901@qq.com

  10. Avatar 徐对对对 says:
    Google Chrome 75.0.3770.100 Google Chrome 75.0.3770.100 Windows 7 x64 Edition Windows 7 x64 Edition

    麻烦博主给我也发一份,搞了一个礼拜,工程都没搭建成功,谢谢啦。327731196@qq.com

  11. Avatar zjianjunxa says:
    Google Chrome 75.0.3770.100 Google Chrome 75.0.3770.100 Windows 10 x64 Edition Windows 10 x64 Edition

    麻烦博主给我也发一份,非常感谢!zjianjunxa@163.com

  12. Avatar 曾祥波 says:
    Google Chrome 75.0.3770.100 Google Chrome 75.0.3770.100 Windows 7 x64 Edition Windows 7 x64 Edition

    博主 最近webRtc 编译 运行 遇到一下问题 能不能交流一下 我的邮箱是1242174805@qq.com

  13. Avatar MichelleHong says:
    Google Chrome 75.0.3770.142 Google Chrome 75.0.3770.142 Windows 10 x64 Edition Windows 10 x64 Edition

    博主,劳烦给我发一份。 我的邮箱 gongjiayu516@163.com

  14. Avatar Lost says:
    Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 7 x64 Edition Windows 7 x64 Edition

    劳烦楼主发一份编译好的,邮箱1401014759@qq.com,万分感谢

  15. Avatar Sky says:
    Google Chrome 75.0.3770.142 Google Chrome 75.0.3770.142 Mac OS X  10.13.6 Mac OS X 10.13.6

    劳烦楼主也赏我一份编译好的吧,邮箱cskybupt@gmail.com,万分感谢

  16. Avatar zhang says:
    Google Chrome 76.0.3809.100 Google Chrome 76.0.3809.100 Windows 10 x64 Edition Windows 10 x64 Edition

    ss代理是什么意思,shadowsocks?

  17. Avatar 夜孤黎 says:
    Google Chrome 76.0.3809.100 Google Chrome 76.0.3809.100 Windows 7 x64 Edition Windows 7 x64 Edition

    希望楼主也能给我发一份,十分感谢。

  18. Avatar 94nbzd says:
    Firefox 69.0 Firefox 69.0 Windows 10 x64 Edition Windows 10 x64 Edition

    博主,麻烦你了。
    875631121@qq.com

  19. Avatar zm168520 says:
    Mozilla Compatible Mozilla Compatible iPhone iOS 13.1 iPhone iOS 13.1

    劳烦楼主也赏我一份编译好的吧,邮箱zhangm168@qq.com,万分感谢

  20. Avatar lowkey says:
    Google Chrome 78.0.3904.108 Google Chrome 78.0.3904.108 Windows 10 x64 Edition Windows 10 x64 Edition

    辛苦楼主也发我一份吧, 十分感谢。247730002@qq.com

  21. Avatar shuilan says:
    Google Chrome 79.0.3945.88 Google Chrome 79.0.3945.88 Windows 10 x64 Edition Windows 10 x64 Edition

    同求一份 shuilan0066@126.com

  22. Avatar xiaopaopaotang says:
    Google Chrome 78.0.3904.108 Google Chrome 78.0.3904.108 Windows 10 x64 Edition Windows 10 x64 Edition

    辛苦楼主也发我一份吧, 十分感谢。1366427360@qq.com

  23. Avatar ziqzhang says:
    Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

    gclient sync 报错

    Error: 6>
    6> ____ src\third_party at 53c0cac9614f181fd5d3c4c99c413fa966659819
    6> You have unstaged changes.
    6> Please commit, stash, or reset.

    • Avatar ziqzhang says:
      Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

      c:\webrtc-checkout\src>gn gen –ide=vs out/Default
      Traceback (most recent call last):
      File “c:/webrtc-checkout/src/build/toolchain/win/setup_toolchain.py”, line 298, in
      main()
      File “c:/webrtc-checkout/src/build/toolchain/win/setup_toolchain.py”, line 223, in main
      env = _LoadToolchainEnv(cpu, win_sdk_path, target_store)
      File “c:/webrtc-checkout/src/build/toolchain/win/setup_toolchain.py”, line 150, in _LoadToolchainEnv
      script_path)
      Exception: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community \VC\vcvarsall.bat is missing – make sure VC++ tools are installed.
      ERROR at //build/toolchain/win/BUILD.gn:384:24: Script returned non-zero exit code.
      win_toolchain_data = exec_script(“setup_toolchain.py”,
      ^———-
      Current dir: c:/webrtc-checkout/src/out/Default/
      Command: C:/zzq/depot_tools/bootstrap-3_8_0_chromium_8_bin/python/bin/python.exe c:/webrtc-checkout/src/build/toolchain/win/setup_toolchain.py “C:\Program Files (x86)\Microsoft Visual Studio\2017\Community ” “C:\Program Files (x86)\Windows Kits\10” “C:\WINDOWS\System32;C:\WINDOWS\SysWOW64;Arm64Unused” win x86 environment.x86
      Returned 1.
      See //build/toolchain/win/BUILD.gn:438:3: whence it was called.
      win_toolchains(“x86”) {
      ^———————-
      See //BUILD.gn:29:3: which caused the file to be included.
      group(“default”) {
      ^—————–
      Traceback (most recent call last):
      File “c:/webrtc-checkout/src/build/compute_build_timestamp.py”, line 127, in
      sys.exit(main())
      File “c:/webrtc-checkout/src/build/compute_build_timestamp.py”, line 113, in main
      last_commit_timestamp = int(open(lastchange_file).read())
      IOError: [Errno 2] No such file or directory: ‘c:\\webrtc-checkout\\src\\build\\util\\LASTCHANGE.committime’
      c:\webrtc-checkout\src>

      编译的时候报错。博主有遇到过吗?

      • Avatar ziqzhang says:
        Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

        ./build/util/lastchange.py build/util/LASTCHANGE

        执行这个脚本

        • Avatar ziqzhang says:
          Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

          IOError: [Errno 2] No such file or directory: ‘c:\\webrtc-checkout\\src\\build\\util\\LASTCHANGE.committime’ 一开始报这个错误 后来执行./build/util/lastchange.py build/util/LASTCHANGE解决了。

      • Avatar Jeff says:
        Google Chrome 80.0.3987.162 Google Chrome 80.0.3987.162 Windows 10 x64 Edition Windows 10 x64 Edition

        Exception: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community \VC\vcvarsall.bat is missing – make sure VC++ tools are installed.
        解决方法:set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Community
        问题分析:你的路径中Community后多了一个空格:2017\Community \VC,所以肯定找不到vcvarsall.bat

    • Avatar ziqzhang says:
      Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

      楼主为什么报这个错误,遇到过吗?

  24. Avatar ziqzhang says:
    Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

    gclient sync 报错

    Error: 6>
    6> ____ src\third_party at 53c0cac9614f181fd5d3c4c99c413fa966659819
    6> You have unstaged changes.
    6> Please commit, stash, or reset.
    楼主为什么报这个错误,遇到过吗?

  25. Avatar ziqzhang says:
    Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

    c:\webrtc-checkout\src>ninja -C out/Default
    ninja: Entering directory `out/Default’
    ninja: error: ‘../../resources/audio_processing/test/py_quality_assessment/noise_tracks/city.wav’, needed by ‘py_quality_assessment/noise_tracks/city.wav’, missing and no known rule to make it

    c:\webrtc-checkout\src>

    博主执行这个命令时报这个错误,有遇到过吗?我发现我目录下时C:\webrtc-checkout\src\resources\audio_processing\test\py_quality_assessment\noise_tracks\city.wav.sha1, 你是这个文件吗?

    • Avatar Jeff says:
      Google Chrome 78.0.3904.70 Google Chrome 78.0.3904.70 Windows 10 x64 Edition Windows 10 x64 Edition

      是你执行gclient sync没成功,导致city.wav没下载成功

      • Avatar ziqzhang says:
        Firefox 71.0 Firefox 71.0 Windows 10 x64 Edition Windows 10 x64 Edition

        c:\webrtc-checkout>gclient sync
        Syncing projects: 43% (16/37) src/buildtools/third_party/libunwind/trunk

        src/third_party (ERROR)
        —————————————-
        [0:00:00] Started.
        [0:00:01] Finished running: git config remote.origin.url
        [0:00:01] Finished running: git rev-list -n 1 HEAD
        [0:00:01] Finished running: git rev-parse –abbrev-ref=strict HEAD
        [0:00:02] Finished running: git rev-parse 53c0cac9614f181fd5d3c4c99c413fa966659819
        —————————————-
        Error: 6>
        6> ____ src\third_party at 53c0cac9614f181fd5d3c4c99c413fa966659819
        6> You have unstaged changes.
        6> Please commit, stash, or reset.
        c:\webrtc-checkout>cd src\third_party

        c:\webrtc-checkout\src\third_party>git reset
        Unstaged changes after reset:
        D blink/web_tests/images/resources/missing-plte-before-trns.png

        好像实没有这个png 文件,但我们按照步骤做的,没做任务删除操作,你又这个文件吗?

  26. Avatar samy says:
    Microsoft Edge 17.17134 Microsoft Edge 17.17134 Windows 10 x64 Edition Windows 10 x64 Edition

    楼主您好,也请转发我一份,邮箱地址2859662089@qq.com,万分感谢!

  27. Avatar fourj says:
    Google Chrome 80.0.3987.132 Google Chrome 80.0.3987.132 Windows 10 x64 Edition Windows 10 x64 Edition

    博主你好,能麻烦您将网盘地址也发给我一份吗,邮箱skychase_leo@163.com,万分感谢

  28. Avatar xiaoseyihe says:
    Google Chrome 63.0.3239.132 Google Chrome 63.0.3239.132 Windows 10 x64 Edition Windows 10 x64 Edition

    博主你好,安装你的流程我安装了vs2017 V15.9及其他软件,但是执行gn gen –ide=vs out/Default,却报错误Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017).
    备注:我尝试安装了vs2019 V16.4 VS201715.0等版本都出现以下错误,请求指点,谢谢
    F:\webrtc-checkout\src>gn gen –ide=vs out/Default
    Traceback (most recent call last):
    File “F:/webrtc-checkout/src/build/vs_toolchain.py”, line 561, in
    sys.exit(main())
    File “F:/webrtc-checkout/src/build/vs_toolchain.py”, line 557, in main
    return commands[sys.argv[1]](*sys.argv[2:])
    File “F:/webrtc-checkout/src/build/vs_toolchain.py”, line 543, in GetToolchainDir
    ToGNString(win_sdk_dir), ToGNString(GetVisualStudioVersion()),
    File “F:/webrtc-checkout/src/build/vs_toolchain.py”, line 165, in GetVisualStudioVersion
    ‘ Supported versions are: %s.’ % supported_versions_str)
    Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017).
    ERROR at //build/config/win/visual_studio_version.gni:28:7: Script returned non-zero exit code.
    exec_script(“../../vs_toolchain.py”, [ “get_toolchain_dir” ], “scope”)
    ^———-
    Current dir: F:/webrtc-checkout/src/out/Default/
    Command: F:/depot_tools/bootstrap-3_8_0_chromium_8_bin/python/bin/python.exe F:/webrtc-checkout/src/build/vs_toolchain.py get_toolchain_dir
    Returned 1.
    See //build/toolchain/win/BUILD.gn:8:1: whence it was imported.
    import(“//build/config/win/visual_studio_version.gni”)
    ^—————————————————-
    See //BUILD.gn:29:3: which caused the file to be included.
    group(“default”) {
    ^——————
    F:\webrtc-checkout\src>

    • Avatar Jeff says:
      Google Chrome 80.0.3987.122 Google Chrome 80.0.3987.122 Windows 10 x64 Edition Windows 10 x64 Edition

      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

      • Avatar Jeff says:
        Google Chrome 80.0.3987.122 Google Chrome 80.0.3987.122 Windows 10 x64 Edition Windows 10 x64 Edition

        问题解决方法更新了,见文中问题0x02描述:修改vs_toolchain.py

  29. Avatar Jeff says:
    Google Chrome 80.0.3987.122 Google Chrome 80.0.3987.122 Windows 10 x64 Edition Windows 10 x64 Edition

    一年前的编译文章了,以前传网盘的也很久没更新了,也暂时别问我要了。

留下一个回复

你的email不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.