JCHub

  • Home
  • Category
    • A/V
    • WebRTC
    • Beauty of Programming
    • Linux
    • Windows
    • Moments of Life
    • Campus Life
  • Reference
    • API Reference
    • Utilities
    • AV Test
    • Doc
  • Message Board
  • About
JCHub
Code as My Sword, Lost in Obsession
  1. Main page
  2. A/V
  3. Main content

Windows平台WebRTC编译-VS2017

2019年3月14日 40639hotness 30likes 91comments

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

本文内容截止2020.04.01,最新代码测试编译通过。最新VS2017以上版本编译见文末。

系统要求

  • Win7及以上64位系统。
  • 内存至少8G,当然越大越好。
  • 至少50G磁盘空间(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。

勾选Debugging Tools For Windows,然后点击change。

depot_tools安装

下载depot_tools然后解压到某个目录,比我的解压到E盘根目录。接着将该depot_tools目录的路径加到系统环境变量Path里,然后把该路径移到最前面(避免已安装的python与git造成影响)。

获取WebRTC源码

由于WebRTC的源码地址被墙了,所以需要通过代理或者vpn才能得到源码。后面都是命令行操作,打开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

再接着设置一些环境变量,设置下我们的VS安装路径。

1
2
3
4
5
set vs2017_install=D:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set GYP_GENERATORS=msvs-ninja,ninja
# 告诉depot_tools使用我们本机的VS进行编译
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

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

1
2
3
4
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

这一过程是个漫长的等待,要下的东西将近10G,包括源码以及一些测试的音视频文件资源等,如果因为网络等原因中断了,就再执行gclient sync。如果这一步一直卡着不动,可以执行ctrl+c,然后执行gclient sync。

使用gclient sync可能遇到的问题

问题0x01

1
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)

Unicode字符编码问题,python的一个bug,因为很多人系统语言都是中文的,所以得按如下设置,把系统区域改为英文,然后重启即可。

问题0x02

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Traceback (most recent call last):
  File "src/tools/clang/scripts/update.py", line 383, in <module>
    sys.exit(main())
  File "src/tools/clang/scripts/update.py", line 379, in main
    return UpdatePackage(args.package)
  File "src/tools/clang/scripts/update.py", line 313, in UpdatePackage
    CopyDiaDllTo(os.path.join(LLVM_BUILD_DIR, 'bin'))
  File "src/tools/clang/scripts/update.py", line 247, in CopyDiaDllTo
    GetWinSDKDir()
  File "src/tools/clang/scripts/update.py", line 222, in GetWinSDKDir
    msvs_version = vs_toolchain.GetVisualStudioVersion()
  File "D:\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: Command 'vpython.bat src/tools/clang/scripts/update.py' returned non-zero exit status 1 in D:\webrtc-checkout
Hook 'vpython.bat src/tools/clang/scripts/update.py' took 44.30 secs

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

1
2
3
4
5
6
7
8
9
10
11
12
diff --git a/vs_toolchain.py b/vs_toolchain.py
index c2ad5c02f..3db2d3c41 100755
--- a/vs_toolchain.py
+++ b/vs_toolchain.py
@@ -153,6 +153,7 @@ def GetVisualStudioVersion():
   for version in supported_versions:
     for path in (
         os.environ.get('vs%s_install' % version),
+        os.path.expandvars('D:/Program Files (x86)/Microsoft Visual Studio/%s' % version),
         os.path.expandvars('%ProgramFiles(x86)%' +
                            '/Microsoft Visual Studio/%s' % version)):
       if path and any(os.path.exists(os.path.join(path, edition)) for edition in

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

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

1
2
3
4
5
vs_path = "D:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community"
sdk_path = "C:\\Program Files (x86)\\Windows Kits\\10"
vs_version = "2017"
wdk_dir = ""
runtime_dirs = "C:\\WINDOWS\\System32;C:\\WINDOWS\\SysWOW64;Arm64Unused"

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

1
2
3
4
5
6
7
8
9
10
11
src/build (ERROR)
----------------------------------------
[0:00:00] Started.
[0:00:00] Finished running: git config remote.origin.url
[0:00:00] Finished running: git rev-list -n 1 HEAD
[0:00:00] Finished running: git rev-parse --abbrev-ref=strict HEAD
----------------------------------------
Error: 3>
3> ____ src\build at 2c249ccb22f58faae38342331925f657a49a9de8
3>      You have unstaged changes.
3>      Please commit, stash, or reset.

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
diff --git a/vs_toolchain.py b/vs_toolchain.py
index c2ad5c02f..9572acd2b 100755
--- a/vs_toolchain.py
+++ b/vs_toolchain.py
@@ -25,8 +25,8 @@ json_data_file = os.path.join(script_dir, 'win_toolchain.json')
 
# VS versions are listed in descending order of priority (highest first).
MSVS_VERSIONS = collections.OrderedDict([
-  ('2019', '16.0'),
   ('2017', '15.0'),
+  ('2019', '16.0'),
])
 
# List of preferred VC toolset version based on MSVS

编译

生成VS2017工程文件:

1
2
cd src
gn gen --ide=vs out/Default

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

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

1
gn gen --ide=vs out/Default --args=“use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false”

接着执行编译命令:

1
ninja -C out/Default

用VS2017打开:

可以看到众多工程,到此算是完成了。找到我们感兴趣的,就可以用VS单步调试,跟踪代码运行了。这么多宝贝够研究很久了。

代码更新

1
2
3
git checkout master
git pull origin master
gclient sync

引用WebRTC库

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

总结

总之WebRTC在Windows上的编译很考验耐心,也很苛刻,需要有个好的访问被墙地址工具。最新VS2019编译可以参考我的这篇文章:
Windows平台WebRTC编译(持续更新),本文也不再更新。

参考

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

This article is licensed with Creative Commons Attribution-NonCommercial-No Derivatives 4.0 International License
Tag: WebRTC
Last updated:2022年3月27日

Jeff

管理员——代码为剑,如痴如醉

Tip the author Like
< Last article
Next article >

Comments

  • jih488

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

    2019年3月27日
    Reply
  • Jeff

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

    2019年3月27日
    Reply
    • jih488

      @Jeff jih488@sina.com 谢谢!

      2019年3月27日
      Reply
      • Liu

        @jih488 博主您好,请问是否方便可以协助我在本地部署编译WebRTC Native的源码?费用多少合适您说话.非常感谢.

        2020年3月19日
        Reply
      • 骆驼刺

        @jih488 您好!请教一下,您这个编译后的Lib库,可以用在 VS工程中吗?我自己编译后的WebRTC库(非clang编译的),将peer_connection 做成一个VS工程,然后用WebRTC编译后的库,各种链接问题!不知道您是否注意过,最近的Webrtc(我的是 M77),编译后,很多obj并没有做成库文件(Lib),您是怎么做的呢?

        2020年5月27日
        Reply
        • Jeff

          @骆驼刺 非clang编译不清楚,具体一些调用没试过,我不是专业搞windows开发的

          2020年5月27日
          Reply
    • wang

      @Jeff 博主,给我也发一份吧,谢谢!!!seuwangcheng@163.com

      2019年3月28日
      Reply
    • littlefat_sun

      @Jeff 博主也请发我一份吧,非常感谢。1962904662@qq.com

      2020年4月8日
      Reply
      • Jeff

        @littlefat_sun 抱歉啊,最好还是自己编译,最新编译的我没上传(太大了),而且在其他人电脑不一定跑得起来。

        2020年4月8日
        Reply
    • dly_xue

      @Jeff 541717868@qq.com 谢谢 翻墙翻不过去 跪求

      2020年4月22日
      Reply
      • Jeff

        @dly_xue 抱歉,我传了你也不能跑起来,好多配置东西跟系统绑死了

        2020年4月22日
        Reply
    • WebRTC学习者

      @Jeff 你好,博主我想知道你用什么翻墙工具?
      我用Br**k上Google还可以,但是下载webrtc就是不行,下载cipd程序都有问题(确定Win10网络有设置代理)

      2020年5月13日
      Reply
  • jih488

    谢谢博主,已收到!

    2019年3月28日
    Reply
    • Jeff

      @jih488 ☺

      2019年3月28日
      Reply
  • iosnower

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

    2019年5月1日
    Reply
  • fk

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

    2019年5月10日
    Reply
  • 昨日围城

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

    2019年5月25日
    Reply
    • WebRTC学习者

      @昨日围城 感谢博主的博客,感谢博主热情回复。
      在折腾了超过100次、将近一周时间之后,我果断放弃了VPN,花钱租了个国外虚拟机,装了Win10 Pro,直接远程桌面操作 -_-!!
      但也不是一帆风顺,也遇到上面类似一些问题,最后参考你们无私共享出来的博文,最后编译出来了。
      感谢!
      (关于使用VPN下载代码,有个问题一直没解决,我相信配置的VPN是没问题,curl访问google.com和facebook都没问题,git可以直接clone到被墙的googlesource代码,但是fetch或gclient老是一开始就有问题,没响应或这超时,想到的各种可能性都试了,一直没解决。这是个遗憾)。

      2020年5月18日
      Reply
      • lla

        @WebRTC学习者 我也是 你现在解决了吗

        2020年10月28日
        Reply
  • 悠哉嗑瓜子

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

    2019年5月28日
    Reply
  • rao

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

    2019年6月21日
    Reply
  • 共惜芳华

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

    2019年7月3日
    Reply
  • 徐对对对

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

    2019年7月5日
    Reply
    • Jeff

      @徐对对对 已发

      2019年7月5日
      Reply
  • zjianjunxa

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

    2019年7月6日
    Reply
  • 曾祥波

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

    2019年7月15日
    Reply
  • MichelleHong

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

    2019年7月17日
    Reply
  • Lost

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

    2019年7月20日
    Reply
  • Sky

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

    2019年7月23日
    Reply
  • zhang

    ss代理是什么意思,shadowsocks?

    2019年8月14日
    Reply
    • Jeff

      @zhang 是的

      2019年8月14日
      Reply
  • 夜孤黎

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

    2019年9月2日
    Reply
    • 夜孤黎

      @夜孤黎 邮箱zzbljh123@live.com

      2019年9月2日
      Reply
  • 94nbzd

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

    2019年9月27日
    Reply
  • zm168520

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

    2019年9月27日
    Reply
  • lowkey

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

    2019年12月10日
    Reply
  • shuilan

    同求一份 shuilan0066@126.com

    2019年12月20日
    Reply
  • xiaopaopaotang

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

    2019年12月23日
    Reply
  • ziqzhang

    gclient sync 报错

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

    2019年12月30日
    Reply
    • ziqzhang

      @ziqzhang 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>

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

      2019年12月30日
      Reply
      • ziqzhang

        @ziqzhang ./build/util/lastchange.py build/util/LASTCHANGE

        执行这个脚本

        2019年12月30日
        Reply
        • ziqzhang

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

          2019年12月30日
          Reply
      • Jeff

        @ziqzhang 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

        2020年4月4日
        Reply
    • ziqzhang

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

      2019年12月30日
      Reply
  • ziqzhang

    gclient sync 报错

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

    2019年12月30日
    Reply
    • Jeff

      @ziqzhang 这里提示有些东西被你改了,叫你reset下

      2019年12月30日
      Reply
  • ziqzhang

    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, 你是这个文件吗?

    2019年12月30日
    Reply
    • Jeff

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

      2019年12月30日
      Reply
      • ziqzhang

        @Jeff 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 文件,但我们按照步骤做的,没做任务删除操作,你又这个文件吗?

        2019年12月30日
        Reply
        • Jeff

          @ziqzhang 这个文件我有的

          2019年12月30日
          Reply
          • ziqzhang

            @Jeff 能发我一下吗zzqgtt@163.com 我发现了扫描软件把他当作病毒直接删除了,都不征求意见的。

            2019年12月31日
            Reply
  • samy

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

    2020年1月25日
    Reply
  • fourj

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

    2020年3月5日
    Reply
  • xiaoseyihe

    博主你好,安装你的流程我安装了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>

    2020年3月13日
    Reply
    • Jeff

      @xiaoseyihe 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

      2020年3月13日
      Reply
      • Jeff

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

        2020年4月2日
        Reply
  • Jeff

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

    2020年3月13日
    Reply
  • John

    博主好,我下了8G多,现在卡在这个地方一晚上没动过,一直在重复的输出这个,也没报错。代理连接是正常的,可能是什么原因呢
    Still working on:
    src/base
    src/testing
    src/third_party/libjpeg_turbo
    src/third_party/libyuv

    2020年4月8日
    Reply
    • Jeff

      @John 你crtl+c断开重新执行:gclient sync看下,看起来还是网络问题。

      2020年4月8日
      Reply
      • John

        @Jeff 确实是这样的,已经编译好了。我才刚入门,有些问题希望博主指点一下。编译的目的是为了什么,得到.lib?还是方便调试?src/out生成了那么多工程该如何调试,我用到的是audio_processing,我打开项目感觉只是提供了接口,并不能调试运行,更不知道如果去调用,这应该涉及到头文件包含、链接库等。应该从哪里入手呢

        2020年4月8日
        Reply
        • Jeff

          @John 1)编译目的是为了方便利用VS IDE工具单步调试,让程序跑起来,更好阅读内部代码流程,否则代码那么多,你也不一定看出内部代码如何运行;
          2)如何调试:打开工程中的example目录,运行一个peeconnection_server,两个peerconnection_client,让两个peerconnection_client进行语音视频通信,然后在peerconnection_client中找到你感兴趣的(例如audio_processing)加断点单步调试,了解具体流程;
          3)基本每个模块都有单元测试代码,你可以看下test代码,看看人家怎么用的。

          2020年4月9日
          Reply
  • dsfa

    博主你好 为什么我cmd窗口输入gclient没有任何反应?

    2020年4月22日
    Reply
    • Jeff

      @dsfa ctrl+c,重新执行看下,是不是网络没设置好

      2020年4月22日
      Reply
      • dsfa

        @Jeff 返回CIPD client self-update failed, trying to bootstrap it from scratch...

        2020年4月22日
        Reply
        • Jeff

          @dsfa 你的代理有问题

          2020年4月23日
          Reply
          • dsfa

            @Jeff 我用的VPN,可以访问外网,就是执行gclient的时候没有用

            2020年4月23日
            Reply
          • dsfa

            @Jeff 编出来了 确实是vpn设置的问题

            2020年4月24日
            Reply
  • WebRTC学习者

    请问博主,有什么软件翻墙的?

    2020年5月14日
    Reply
  • WebRTC学习者

    我在PowerShell,http/https代理设置好了,可以访问google;git代理也设置好了,可以下载chromium.googlesource.com的代码;
    但是!但是!我尝试下载webrtc代码,执行gclient就什么动静也没了,
    我自己装的Python27,在PowerShell试过是可以的。
    为什么执行gclient就没任何动静?

    2020年5月15日
    Reply
    • Jeff

      @WebRTC学习者 用cmd命令行试下,不用powershell,

      2020年5月15日
      Reply
  • webrtc_学习中

    下载iOS ,编译 支持h264

    gn gen out/ios_release --args='target_os="ios" target_cpu="arm64" is_debug=false proprietary_codecs=true rtc_use_h264=true rtc_include_tests=false' --ide=Xcode

    nijia -C out/ios_release

    编译不过去。

    fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: file list file: obj/third_party/ffmpeg/libffmpeg_internal.a.rsp is empty

    这问题谁知道呀?

    2020年6月7日
    Reply
    • as da s d

      @webrtc_学习中 解决了么?我也遇到了打算换掉他自带的ffmpeg试试

      2021年7月16日
      Reply
  • 骑着上帝奔跑

    初识webrtc,博主求求也给我发一份

    2020年6月20日
    Reply
  • 只想知道VS的debug版怎么编译

    以peerconnection_client.exe为例,无论怎么设置编译参数,debug版本 在Visual Studio 2017或2019 都不能正常运行。

    2020年7月1日
    Reply
    • 夜袭女儿国

      @只想知道VS的debug版怎么编译 是peerconnection_client.exe主动呼叫另一个client崩溃吗?
      如果是这个的话,考虑切换到m74分支上编译,我编了开发流以及m79,m78,m77,m76,m75这几个分支,都会崩溃。
      看代码似乎是启动摄像头时,崩的

      2020年7月15日
      Reply
    • Jeff

      @只想知道VS的debug版怎么编译 报什么错误?

      2020年7月28日
      Reply
      • webrtc初学

        @Jeff debug下,出现unable to start program. Operation not supported. unknown error:0x800700d8

        2020年7月30日
        Reply
        • Jeff

          @webrtc初学 这个问题不是很清楚。。。

          2020年8月6日
          Reply
  • help

    博主,我想问一下,是不是获取源码的那一行命令:fetch webrtc 如果由于网络原因中断的话,是要重新fetch,还是可以通过gclient sync继续下载

    2020年7月13日
    Reply
    • Jeff

      @help <code>gclient sync</code>即可

      2020年7月28日
      Reply
  • webrtc初学

    楼主,有没有在windows上基于webrtc做过开发啊?

    2020年7月21日
    Reply
    • Jeff

      @webrtc初学 我只做跨平台SDK开发,windows sdk倒是写过,应用层那些界面之类开发没有

      2020年7月28日
      Reply
  • ziqzhang

    要不把编译好的工程发我把zzqgtt@163.com 谢谢

    2020年12月21日
    Reply
  • whale

    @Jeff 博主也请您发我一份编译好的WebRTC Visual Studio工程吧,非常感谢!
    qjcnqtok@126.com

    2021年1月5日
    Reply
  • xiaoyu

    楼主您好,我在执行 ninja -C out/Default这个编译命令的时候 报这种错误会是什么原因导致的呢
    In file included from ../../call/fake_network_pipe_unittest.cc:19:
    In file included from ../..\test/gmock.h:17:
    In file included from ../..\testing/gmock/include/gmock/gmock.h:10:
    In file included from ../..\third_party/googletest/src/googlemock/include/gmock/gmock.h:61:
    In file included from ../../third_party/googletest/src/googlemock/include\gmock/gmock-function-mocker.h:4:
    In file included from ../../third_party/googletest/src/googlemock/include\gmock/gmock-generated-function-mockers.h:47:
    ../../third_party/googletest/src/googlemock/include\gmock/gmock-spec-builders.h(1600,12): error: call to implicitly-deleted copy constructor of 'MockSpec<testing::internal::FunctionMocker<webrtc::PacketReceiver::DeliveryStatus (webrtc::MediaType, rtc::CopyOnWriteBuffer, long long)>::F>' (aka 'MockSpec<webrtc::PacketReceiver::DeliveryStatus (webrtc::MediaType, rtc::CopyOnWriteBuffer, long long)>')
    return MockSpec<F>(this, ::std::make_tuple(std::move(m)...));
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ../../call/fake_network_pipe_unittest.cc(28,3): note: in instantiation of member function 'testing::internal::FunctionMocker<webrtc::PacketReceiver::DeliveryStatus (webrtc::MediaType, rtc::CopyOnWriteBuffer, long long)>::With' requested here
    MOCK_METHOD3(DeliverPacket,
    ^
    ../../third_party/googletest/src/googlemock/include\gmock/gmock-generated-function-mockers.h(602,30): note: expanded from macro 'MOCK_METHOD3'
    #define MOCK_METHOD3(m, ...) GMOCK_METHOD3_(, , , m, __VA_ARGS__)
    ^
    ../../third_party/googletest/src/googlemock/include\gmock/gmock-generated-function-mockers.h(237,48): note: expanded from macro 'GMOCK_METHOD3_'
    return GMOCK_MOCKER_(3, constness, Method).With(gmock_a1, gmock_a2, \
    ^
    ../../third_party/googletest/src/googlemock/include\gmock/gmock-spec-builders.h(1292,24): note: copy constructor of 'MockSpec<webrtc::PacketReceiver::DeliveryStatus (webrtc::MediaType, rtc::CopyOnWriteBuffer, long long)>' is implicitly deleted because field 'matchers_' has a deleted copy constructor
    ArgumentMatcherTuple matchers_;
    ^
    ..\..\..\..\..\..\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\tuple(351,5): note: copy constructor is implicitly deleted because 'tuple<testing::Matcher<webrtc::MediaType>, testing::Matcher<rtc::CopyOnWriteBuffer>, testing::Matcher<long long> >' has a user-declared move constructor
    tuple(tuple&&) = default;
    ^

    2021年3月10日
    Reply
  • xuchen

    您好,博主,请问您有遇到webrtc.lib 编译后使用的时候回爆找不到符号

    错误 LNK2001 无法解析的外部符号 "void (__cdecl* std::__1::__libcpp_debug_function)(struct std::__1::__libcpp_debug_info const &)" (?__libcpp_debug_function@__1@std@@3P6AXAEBU__libcpp_debug_info@12@@ZEA) webrtc_demo C:\work\Dev\demo\webrtc_demo\webrtc.lib(thread.obj) 1

    2021年3月25日
    Reply
    • Jeff

      @xuchen gn gen --ide=vs out/Default --args="is_clang=false use_lld=false" 禁用clang与lld看下

      2021年3月25日
      Reply
      • xuchen

        @Jeff 感谢楼主,现在可以,其中原因还不太了解 ,还要再看看

        2021年3月25日
        Reply
  • 光风霁月

    您好博主, 我按照您的方法已经成功编译出来了webrtc库, 但是默认的编译环境只有一个GN而且用的均是release环境。
    请问有方法可以使生成出来的sln ,可以将代码环境分为debug/release 吗, 然后手动通过VS编译这两个版本?

    2021年6月24日
    Reply
  • flash91120

    楼主,能不能出一期qt上使用webrtc库的教程

    2022年5月12日
    Reply
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    Cancel

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

    文章目录
    • 系统要求
    • Visual Studio安装
    • depot_tools安装
    • 获取WebRTC源码
      • 使用gclient sync可能遇到的问题
    • 编译
    • 代码更新
    • 引用WebRTC库
    • 总结
    • 参考
    Related Posts
    • 音视频开发入门:视频基础
    • 大话WebRTC
    • WebRTC音视频传输基础:NAT穿透
    • 浅谈基于SFU实现一对一效果
    • WebRTC资讯:H265支持进展
    Categories

    COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang