win11 编译webrtcM109 for Windows
2023-7-27
| 2023-8-10
0  |  0 分钟
type
status
date
slug
summary
tags
category
icon
password

WebRTC编译库一览

平台
目标平台
编译产物
Android
armeabi-v7a、 arm64-v8a
.so静态库
iOS
armv7、 arm64
.a静态库
Windows
x86 、x64
.lib静态库
Linux
多种平台
.a静态库

系统要求


  • 系统要求
    • 具有至少8GB RAM 的 64 位 Intel 机器。强烈建议超过 16GB。
    • NTFS 格式的硬盘驱动器上至少有 100GB 的可用磁盘空间。FAT32 不起作用,因为某些 Git 包文件大于 4GB。
    • 适当版本的 Visual Studio,如下所述。
    • Windows 10 或更新版本。

Windows 设置


这里谷歌要求最好是VS2022(>17.0.0) 必须勾选如下几项:
  • Desktop development with C++组件中10.0.20348.0或10.0.22000.0(win11)以上的Win10 SDK(如果没看到该版本,去左侧Individual components那里勾选)
  • 使用C++ 进行桌面开发组件
  • MFC/ATL 支持子组件
notion image
安装完VS2022后,必须安装SDK调试工具。打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit(比如10.0.20348.0),鼠标右键->修改
notion image
勾选Debugging Tools For Windows,然后点击修改。
notion image

下载源码

  • 获取depot_tools git clone <https://chromium.googlesource.com/chromium/tools/depot_tools.git> 将depot_tools的路径加入系统环境变量Path,然后移到最前面(避免已安装的python与git造成影响)。
  • 获取WebRTC源码 需要设置代理。
打开windows命令行
如果一切顺利的话,这里应该可以看到已经在开始下载各部分内容。 如果有其他问题,可以仔细看下报错内容然后根据相应内容解决。
可参考:
  • 1.cipd.bat中修改powershell 为pwsd powershell5 跟powershell7 的执行程序变了
  • 2.修改depottools中 /.cipd_bin/3.8/bin/Lib/subprocess.py 735 __init__中 shell=True
这一部分需要等待很久,代理及网速良好的情况下短则1-2小时,长则数小时仍没有明显变化,内容较多的部分是在../src/third_party(12.5G左右),所以最好保持电脑在下载期间不休眠或者关机 如果有部分内容获取较慢或者持续卡住的话,可以ctrl + c,然后 gclient sync继续同步。

开始编译

打开x64 nativve tools vs2022
生成VS工程文件,之前有些准备步骤需要在命令行输入,确定编译环境。

本机编译需要的命令

  • -ide=vs 使用gn ninja 生成vs工程 编译好之后如果在vs中无法直接运行而且报错 找不到Ninja.exe 将ninja.exe 放到用户变量中
编译时需要使用clang的编译器 如果 Visual Studio 应用没配置 Clang 编译器,链接这个 webrtc.lib,生成工程文件时需要配置如下参数:
还需要禁用webrtc内部使用的stdcxx库(这一部分编译有点困难,经常报错)
如果需要添加ffmpeg_H264则必须打开clang编译器
//ffmpeg_h264支持功能
  • is_debug=false
  • use_custom_libcxx=false 是否使用内置的libcxx作为默认的c++标准库
  • rtc_include_tests=false
  • is_component_build=false 是否使用动态运行库 false表示使用静态运行期库 Release版本对应MT,Debug版本对应MTD
  • symbol_level=0 裁剪包
  • proprietary_codecs=true H264
  • rtc_use_h264=true 是否使用H264。注意Windows平台编码使用OpenH264,解码使用ffmpeg
  • ffmpeg_branding=\\"Chrome\\" ffmpeg的分支名,采用Chrome的分支
  • is_clang=true
  • use_lld=false
  • treat_warnings_as_errors=false

错误点1

5414版本可能会报这个错误,按照错误提示修改一下就行。 修改源码的std::towupper 为::towupper

错误点2

build/toolchain/win/tool_wrapper.py 提示unicode utf8错误 在对应的文件内将utf8字样修改为gbk
就可以在 out/vs2022_m109_x64_release_ffmpeg_h264下面找到VS工程文件了。

引用WebRTC库

WebRTC编译后会在src\out\Default\obj目录下生成整个WebRTC工程的静态库:webrtc.lib,就这个是完整的包,如果只想编译部分也是可以的。

参考

技术分享
  • WebRTC
  • 技术研究
  • Git 如何在fork项目上Pull PushWebRTC Native添加H264+OpenSSL支持
    • Twikoo
    • Giscus
    目录