webrtc 在 mac 编译 Mac 与 IOS
本文将会讲解在 mac 中从拉取代码到打包成 xcframework 的所有步骤,包中包括了ios 与 mac 的所有包。
设置代理
编译 WebRTC 全程需要代理软件,所以建议设置好代理软件。
1 | export http_porxy="http://127.0.0.1:21087" |
注意:即使在 MAC 中开启全局代理,仍然需要设置代理。本人编译时,没配置这个有时候出现无法下载外网资源,即使开了全局代理也没用。
安装 depot_tools
depot_tools 是一套 Google 用来编译 WebRTC 的构建工具,获取 depot_tools 前,请先开启 VPN。
下载 depot_tools 解压到某个目录,然后配置系统环境
1 | export PATH=$PWD/depot_tools:$PATH |
获取源代码
获取源代码不能使用官网的源代码,必须到 webrtc-sdk 中获取专门为 flutter-webrtc修改过的源码。
获取源码步骤如下所示:
1 | mkdir webrtc |
生成示例代码
1 | gn gen out/ios --args='target_os="ios" target_cpu="arm64" is_component_build=false' --ide=xcode |
替换本地编译 Frameworks
在 flutter-webrtc 的 IOS 目录下面创建 Frameworks 目录,然后修改 podfile 如下所示:
1 | # s.dependency 'WebRTC-SDK', '104.5112.02' |
异常问题
在拉取源代码的时候、获取依赖或者编译时可能出现各种奇奇怪怪的问题,下面会对一些奇怪问题进行解释与给出解决方法。
:fatal: early EOF fatal: index-pack failed
- 原因:此问题说拉取代码时,容量不够
- 解决方法:未知原因导致其存储在缓存空间,只要使用 sudo 权限去执行 gclient sync 即可解决问题
下载某个资源时出现 ssl 验证错误。好像是更新 gclient 的时候。
- 原因:由于我们挂了代理,不知什么原因导致了 ssl 验证失败
- 解决方法:需要 python 安装一个如下所示的内容,建议直接全局搜索
Certificates.command
这个文件所在位置1
2where python3
sudo python3 install Certificates.command
Failed to fetch file gs://chromiumxxxx
- 原因:不知道啥原因,反正没法下载,只能自己手动下载了
- 解决方法:将其中的
gs://
替换为https://storage.googleapis.com/
直接下载,然后将其改名为具体文件,放到指定位置下面就行。 - 补充:MAC 这边一共有
clang
、clang-format
、test-fonts.tar.gz
这几个文件没法下载,手动下载即可。其中test-fonts.tar.gz
下载下来会是个**.tar
文件,只需要改成test-fonts.tar
放入指定文件夹即可。
error at
xtest_module_target="//test:google_test_runner_objc"
- 原因:目前不知道原因
- 解决方法:直接去对应位置注释掉这行依赖,仍然可以使用
cpid更新失败代理新的配置方案
- 原因:配置了 https 代理的情况下,会对 ssl 进行验证,而由于我们开了代理,这个验证基本会失败
- 解决方法:将 https 代理设置成 http 代理就不会出现问题了。
export https_porxy="http://127.0.0.1:21087"
可能碰到编译错误——fatal error: ‘libavutil/avconfig.h’ file not found:
- 原因:目前不知道原因
- 解决方法:在 src/third_party/ffmpeg/libavutil/avconfig.h 中创建此文件,并填入如下内容:
1
2
3
4
5
6/* Generated by ffconf */
引用
IOS技术分享| WebRTC iOS源码下载&编译
记录一次WebRTC iOS的源码编译过程
在windows上编译chrome浏览器Building Chromium for Windows
MacOS Python3.7 出现SSL: CERTIFICATE_VERIFY_FAILED报错解决方案
Build WebRTC library for iOS
【webrtc、gclient】cpid更新失败代理新的配置方案
Flutter插件开发,ios添加本地第三方framework