安卓webrtc在ubuntu 2004下编译使用

Posted 清霜之辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓webrtc在ubuntu 2004下编译使用相关的知识,希望对你有一定的参考价值。

文章目录

安卓webrtc在ubuntu 2004下编译使用

相关资料太多、分散了,本文来学习过程中笔记,添加一些摘要和索引
本文首发地址 https://blog.csdn.net/CSqingchen/article/details/120016697
最新更新地址 https://gitee.com/chenjim/chenjimblog


相关网址链接

WebRTC android development
https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/android/index.md

google webrtc source code
https://github.com/chenjim/webrtc-mirror 已同步到4610
https://github.com/haiyangwu/webrtc-mirror
https://webrtc.googlesource.com/src/


Http 全局代理配置

# 修改shell配置文件 `~/.bashrc` `~/.zshrc`等
export http_proxy="http://127.0.0.1:7890"
export https_proxy=$http_proxy

以上地址需要替换为自己的地址
如果不能访问Google,很多相关的文件无法正常下载,也就没有后文的正常编译使用


android webrtc 编译

官方文档 https://webrtc.github.io/webrtc-org/native-code/development/
安卓相关的编译只能在Linux,推荐ubuntu,也不支持Windows的Linux子系统(WSL),本文采用的是Ubuntu 2004

  1. git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

  2. ~/.bashrc 添加目录 depot_tools 到环境变量,后续会用其中的命令
    export PATH=$PATH:你的路径/depot_tools

  3. mkdir webrtc_android && cd webrtc_android
    后续命令在 webrtc_android 目录执行

  4. fetch --nohooks webrtc_android

  5. gclient sync

  6. 更新系统的已安装软件,安装 pythonopenjdk-8-jdk
    sudo apt update && sudo apt upgrade && sudo apt install python openjdk-8-jdk

  7. cd src/ && ./build/install-build-deps.sh --no-chromeos-fonts
    可能会出现 botosnapfonts等相关异常参见后文章节
    后续命令在 src 目录执行

  8. 切换到所需分支
    git branch -r 显示所有分支
    git checkout -bm79 branch-heads/m79 切换到分支 branch-heads/m79
    更多Git相关命令

  9. 执行tools_webrtc/android/build_aar.py编译
    最好带上参数,如:
    ./tools_webrtc/android/build_aar.py --extra-gn-args 'is_debug=true is_clang=true rtc_include_tests=false rtc_use_h264=true rtc_enable_protobuf=false use_rtti=true use_custom_libcxx=false' --build-dir ./out/release-build/ --arch "arm64-v8a"
    build_aar.py 可以看到,最终采用了 gnninja 构建编译

参考自 Compile_WebRTC_Library_For_Android


boto 代理配置

错误提示

NOTICE: You have PROXY values set in your environment, but gsutilin depot_tools does not (yet) obey them.
Also, --no_auth prevents the normal BOTO_CONFIG environmentvariable from being used.
To use a proxy in this situation, please supply those settingsin a .boto file pointed to by the NO_AUTH_BOTO_CONFIG environmentvariable.

解决方案:

  1. Create ~/.boto config file
[Boto]
proxy = 127.0.0.1
proxy_port = 7890
ca_certificates_file = /path/to/certificate.crt
  1. Export NO_AUTH_BOTO_CONFIG
    在~/.bashrc中添加export NO_AUTH_BOTO_CONFIG=~/.boto
    再执行source ~/.bashrc

  2. Finally run sync the sources
    gclient sync

参考自 https://gist.github.com/nickdiego/2b2faa35f5ab48e7438ee434d2756765


Unable to reach the snap store 问题解决

Interacting with snapd is not yet supported on Windows Subsystem for Linux.
Windows的Linux子系统(WSL)暂不支持 snap 。。。。

  1. snap 安装
    $ sudo apt install snapd

  2. snap 代理配置
    sudo systemctl edit snapd
    在显示页面输入如下,ip及端口号按自己的配置

    [Service]
    Environment="http_proxy=http://127.0.0.1:7890"
    Environment="https_proxy=http://127.0.0.1:7890"
    
  3. 载入新配置
    sudo systemctl daemon-reload

  4. 重启 snap 服务
    sudo systemctl restart snapd

  5. 测试 snap 连接状态
    snap debug connectivity

    参考自
    https://blog.csdn.net/qq_26975799/article/details/111411238


ERROR: The installation of the Chrome OS default fonts failed.

Failed to connect to commondatastorage.googleapis.com port 443: Connection refused

subprocess.CalledProcessError: Command ‘[‘curl’, ‘-L’, ‘https://commondatastorage.googleapis.com/chromeos-localmirror/distfiles/notofonts-20161129.tar.bz2’, ‘-o’, ‘/usr/local/share/fonts/chromeos/notofonts-20161129.tar.bz2’]’ returned non-zero exit status 7

解决方案:
sudo ./build/install-build-deps.sh --no-chromeos-fonts


WebRTC里用的c++库是libc++,而目前Android中使用的c++库是libstdc++

错误提示

../../rtc_base/checks.cc:108: error: undefined reference to 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::append(char const*)'

解决方案:
WebRTC使用libstdc++库,在执行gn命令时
加入 use_custom_libcxx=false这个参数
gn gen out/Debug --args='target_os="android" target_cpu="arm" use_custom_libcxx=false'

参考自
[编译WebRTC APM模块静态库 For Android] https://juejin.cn/post/6844904104427421704


Exception: Missing licenses for following third_party targets: openh264, ffmpeg

解决方案:

修改 tools_webrtc/libs/generate_licenses.py 如下,添加 LICENSE

--- a/tools_webrtc/libs/generate_licenses.py
+++ b/tools_webrtc/libs/generate_licenses.py
@@ -69,6 +69,8 @@ LIB_TO_LICENSES_DICT = 
'g722': ['modules/third_party/g722/LICENSE'],
'fft4g': ['common_audio/third_party/fft4g/LICENSE'],
'spl_sqrt_floor': ['common_audio/third_party/spl_sqrt_floor/LICENSE'],
+    'openh264':['third_party/openh264/src/LICENSE'],
+    'ffmpeg':['third_party/ffmpeg/LICENSE.md'],
# TODO(bugs.webrtc.org/1110): Remove this hack. This is not a lib.
# For some reason it is listed as so in _GetThirdPartyLibraries.

引用自
https://blog.jianchihu.net/webrtc-android-native-code-build-error.html


相关命令说明

  • 安装编译 WebRTC 所需的依赖
    ./build/install-build-deps.sh
    ./build/install-build-deps-android.sh

  • 可以查看有哪些编译参数
    ./tools_webrtc/android/build_aar.py -h
    去掉 -h 使用默认参数编译
    ./tools_webrtc/android/build_aar.py --build-dir ./out/release-build/ --arch "arm64-v8a"

  • 查看库中包含的符号
    nm -C -g --defined-only libjingle_peerconnection_so.so
    nm -C -g --defined-only libwebrtc.a


编译静态库 libwebrtc.a 和 libwebrtc.jar

./tools_webrtc/android/build_aar.py 中,我们可以看到如下

TARGETS = [
    'sdk/android:libwebrtc',
    'sdk/android:libjingle_peerconnection_so',
]

我们需要在 [] 中加入 ':webrtc', 默认不会编译 webrtc 模块
再次编译
./tools_webrtc/android/build_aar.py --extra-gn-args 'is_debug=false is_component_build=false is_clang=true rtc_include_tests=true rtc_use_h264=true rtc_enable_protobuf=false use_rtti=true use_custom_libcxx=false' --build-dir ./out/release-build/ --arch "armeabi-v7a"
即可在输出目录 ./out/release-build/ 找到 libwebrtc.a
out/release-build/armeabi-v7a/obj/libwebrtc.a

out/release-build/armeabi-v7a/lib.java/sdk/android/libwebrtc.jar
可以找打 libwebrtc.jar

以下命令可以看到支持的所有 TARGETS
ninja -C out/release-build/armeabi-v7a/ -t targets all


编译 libwebrtc.aar

./tools_webrtc/android/build_aar.py --build-dir ./out/release-build/ --output "out/libwebrtc.aar" --arch "arm64-v8a"

加上 --output "out/libwebrtc.aar" 指定aar输出位置,默认在 src 目录
解压 out/libwebrtc.aar 可以看到只有如下内容

 extracting: AndroidManifest.xml     
 extracting: classes.jar             
 extracting: jni/arm64-v8a/libjingle_peerconnection_so.so

webrtc release 分支相关信息

  • webrtc-android-buildlibwebrtc.a 当前(2021年8月18日)是基于分支branch-heads/m79

  • 之后为啥没找到 m 开头的 branch-heads
    在目录 webrtc_android/src 执行
    git log --oneline --all --graph --decorate|grep M8
    从结果中可以看到还是有 M8* 相关的信息
    m78 m79 同步与chromium大版本,webrtc后来用自己的小版本了,如4610等

    chromium 当前 计划 https://chromiumdash.appspot.com/schedule
    chromium release 时间表 https://chromiumdash.appspot.com/releases

  • 当前(2021年8月18日)最新release是 branch-heads/4610
    webrtc 更新日志 https://webrtc.github.io/webrtc-org/release-notes/

  • 查看所有release分支信息Linux命令
    git log --oneline --all --graph --decorate |grep branch-heads

  • 切换到对应的分支并同步代码
    git checkout -b m85 branch-heads/4183
    cd .. && gclient sync


其它相关文档

以上是关于安卓webrtc在ubuntu 2004下编译使用的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu下编译webrtc for Android

ubuntu下编译webrtc for Android

Ubuntu12下编译安装PHP5.3开发环境

在Windows下编译WebRTC

ZLMediaKit编译与webrtc推拉流测试

技术分享|在Ubuntu下编译安装GreatSQL