webrtc 编译

注:webrtc 源码编译需要自备梯子.

获取源码

安装 depot_tools

depot_tools是个工具包,里面包含gclient、gcl、gn和ninja等工具。其中gclient是代码获取工具,它其实是利用了svn和Git.

//todo install
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
修改 ~/.zshrc
export PATH=$PATH:~/work/depot_tools/depot_tools

获取源码

创建源码目录 webrtc, fetch 执行之后将在 webrtc 目录中创建 src 目录, 而 src/webrtc 才是真正源码所在. 源码目录估计在 8G 左右大小.


mkdir webrtc && cd webrtc
linux : fetch --nohooks webrtc
android: fetch --nohooks webrtc_android
ios: fetch --nohooks webrtc_ios
gclient sync

切换分支代码

由于 master 分支更新度频繁, 不利于自身 patch 维护, 需要切换到指定版本分支.

cd src
gclient sync --with_branch_heads
git fetch
git checkout -b local_branch branch_heads/$branch
gclient sync

编译

区分为 linux 平台, android 平台, ios 平台.

linux

在 ubuntu 16.04 实现编译, 需要注意 webrtc 内部脚本仅支持 lts 发布版, 所以 Ubuntu15.04 这个估计有点麻烦了, 本文不讨论此情况.

gn gen out/Default
ninja -C out/Default

android

android 版本只支持在 linux 编译, 无法在 mac 环境中编译.

编译环境 jdk8 安装:

具体安装就不说了, 关键是环境变量设置, 楼主踩过这个坑, 环境变量未设置正确, 致各种 jni 相关的错误.


export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export GYP_DEFINES="OS=android"
export PATH=$PATH:${JAVA_HOME}/bin

android 编译

针对 armv7, armv8, x86, x64 都需要重新编译下


gn gen out/Default --args='target_os="android" target_cpu="arm64"'
ninja -C out/Default

ios

// todo install

切换到分支:

git checkout -b local_branch branch_heads/$branch

gclient sync

./tools_webrtc/ios/build_ios_libs.sh

出现报错:

../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:1734:15: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
                                                              &cookie->time_entered,
                                                               ^~~~~~~~~~~~~~~~~~~~
../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:2486:10: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]

需要打个补丁,Pacth [https://codereview.chromium.org/2833833002]

cd build

patch -p2 -i /path/to/downloaded/issue2833833002_1.diff

此外需要根据不同 xcode 版本 如 8.3.3 则增加 xcode_version == "0833" 到 build/config/compiler/BUILD.gn 文件中( 搜索 xcode_version, 增加 || 条件 )

执行 ./tools_webrtc/ios/build_ios_libs.sh

提取 src/out_ios_libs/WebRTC.framework

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 编译安装 安装depot_toolsgit clone https://chromium.goog...
    guowei阅读 3,564评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,401评论 25 709
  • 如果工程项目换了几波人接手开发,那么就有可能出现一种现象:某个控制器是用classA模型的数据显示的,如果其他人想...
    Fsn_soul阅读 3,873评论 0 0
  • 相关文章 海量数据处理之经典实例分析top k 问题中各种场景分析的很好: 单机+单核+足够大内存单机+多核+足够...
    WendySays阅读 2,720评论 0 0
  • 170413 随手学画,我不是海绵宝宝,你也不是螃蟹哥,我们都是为生活,普通人而已。 ...
    魍魍亼阅读 2,490评论 0 0

友情链接更多精彩内容