WebRTC下载与编译 Mac¶
更新日期: 2022-4-28
- 2022-4-28 报错记录
- 2022-4-24 编译mac版本
- 2022-4-18 增加编译过程
- 2022-4-14 更新版本
- 2022-4-13 创建文档
WebRTC能让web应用和站点之间选择性地分享音视频流。在不安装其它应用和插件的情况下,完成点对点通信。 WebRTC背后的技术被实现为一个开放的Web标准,并在所有主要浏览器中均以常规JavaScript API的形式提供。对于客户端(例如Android和iOS),可以使用提供相同功能的库。 WebRTC是个开源项目,得到Google,Apple,Microsoft和Mozilla等等公司的支持。2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
本文介绍下载编译WebRTC的过程。
开发环境:
- macOS Big Sur 11.4
- Xcode 13.2.1
下载WebRTC¶
首先需要一个良好的网络环境。我们需要连接到Google,一个良好稳定的网络环境能事半功倍。一方面是下载代码,另一方面可能要重装Xcode。
其次磁盘上留出约25G的空间。WebRTC下载完成后,约占用16G。编译后会占用更多的空间,占用超过20G。
使用终端,创建并进入目录 ~/ws/webrtc-proj
网络环境¶
准备网络环境。打开工具,然后配置端口。端口因工具而异。请务必使用一个稳定的工具。
先来准备工具depot_tools
depot_tools¶
从googlesource下载depot_tools
depot_tools大约占用500M空间
配置环境变量,执行
或者把路径添加到.bashrc
里。然后要读取一次配置或者新建终端。
输入ninja -h
,如果能执行表明环境变量设置OK
ninja -h
usage: ninja [options] [targets...]
if targets are unspecified, builds the 'default' target (see manual).
下载¶
depot_tools下载并且设置完毕。接下来我们下载WebRTC工程。需要用到fetch和gclient命令。
首先新建一个目录webrtc
,进入这个目录
然后获取代码,开始同步
如果网速能达到20M,2个小时内代码可以下载完成
我们默认下载的是最新的源码,如果想要切换到指定分支,可以使用以下命令:
或者强制切换到指定commit
# 或者强制切换到指定commit(b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b是m79最后一次提交的commit id)
gclient sync -r b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b --force
下载得到的工程在~/ws/webrtc-proj/webrtc/src
其他镜像
如果用声网镜像,还是gitee,gitlab的镜像,可能会遇到EOF之类的问题。 如果有良好的上网工具,推荐还是从Google下载。
使用其他镜像时,遇到过很多问题,比如remote error
remote error
src/third_party/catapult (ERROR)
----------------------------------------
[0:00:39] Started.
[0:00:39] Finished running: git config remote.origin.url
[0:00:39] Finished running: git rev-list -n 1 HEAD
[0:00:39] Finished running: git rev-parse --abbrev-ref=strict HEAD
fatal: remote error: upload-pack: not our ref 5ff11ff500b8af289afe5f1f298bc0e4f7c454f4
[0:00:46] fatal: remote error: upload-pack: not our ref 5ff11ff500b8af289afe5f1f298bc0e4f7c454f4
[0:00:49] fatal: remote error: upload-pack: not our ref 5ff11ff500b8af289afe5f1f298bc0e4f7c454f4
[0:00:54] fatal: remote error: upload-pack: not our ref 5ff11ff500b8af289afe5f1f298bc0e4f7c454f4
----------------------------------------
Error: Command 'git -c core.deltaBaseCacheLimit=4g fetch origin 5ff11ff500b8af289afe5f1f298bc0e4f7c454f4 --no-tags' returned non-zero exit status 128 in /Users/rustfisher/Desktop/ws/webrtc-proj/webrtc/src/third_party/catapult
或者usrsctp/usrsctplib
遇到错误
usrsctp/usrsctplib遇到错误
当时的解决办法就是不断的重新gclient sync
。但并不能完全解决这个问题。
用一个好的工具可以避免这些问题。
编译¶
main分支¶
编译之前,建议切换到main分支。
Xcode相当于最新版的,我们的WebRTC代码也选择比较新的版本。 如果选择以前的分支,会出现工具与代码对不上的情况,不停的报错。
编译旧分支报错
编译旧分支不停地报错 ninja -C out/Default
../../third_party/llvm-build/Release+Asserts/bin/../include/c++/v1/math.h:769:12: error: no member named 'labs' in the global namespace; did you mean 'abs'?
return ::labs(__x);
~~^
../../third_party/llvm-build/Release+Asserts/bin/../include/c++/v1/math.h:768:39: note: 'abs' declared here
inline _LIBCPP_INLINE_VISIBILITY long abs(long __x) _NOEXCEPT {
^
../../third_party/llvm-build/Release+Asserts/bin/../include/c++/v1/math.h:773:12: error: no member named 'llabs' in the global namespace
return ::llabs(__x);
~~^
../../third_party/llvm-build/Release+Asserts/bin/../include/c++/v1/math.h:781:12: error: no member named 'fabsf' in the global namespace
return ::fabsf(__lcpp_x);
编译iOS版本¶
使用WebRTC提供的脚本来编译
编译结果在out_ios_libs
里
编译mac版本¶
使用默认的编译方法编译mac版本
~/ws/webrtc-proj/webrtc/src $ gn gen out/Default
Done. Made 1570 targets from 291 files in 1336ms
~/ws/webrtc-proj/webrtc/src $ ninja -C out/Default
ninja: Entering directory `out/Default'
编译得到的Default
目录占用7G以上空间。
可以直接运行AppRTCMobile.app起来。
参考¶
- Install Error - macOS Big Sur #904 - Github
- https://stackoverflow.com/questions/58628377/catalina-c-using-cmath-headers-yield-error-no-member-named-signbit-in-th
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~