注: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