安卓webrtc在ubuntu 2004下编译使用
- 相关网址链接
- Http 全局代理配置
- android webrtc 编译
- boto 代理配置
- Unable to reach the snap store 问题解决
- ERROR: The installation of the Chrome OS default fonts failed.
- WebRTC里用的c++库是libc++,而目前Android中使用的c++库是libstdc++
- Exception: Missing licenses for following third_party targets: openh264, ffmpeg
- 相关命令说明
- 编译静态库 libwebrtc.a 和 libwebrtc.jar
- 编译 libwebrtc.aar
- webrtc release 分支相关信息
相关资料太多、分散了,本文来自学习过程中笔记,添加一些摘要和索引
本文首发地址 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
环境,推荐ubuntux
系统,WSL
需要跳过snap
安装
本文采用的是Windows
+VirtualBox
+Ubuntu 2004
-
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
-
在
~/.bashrc
添加目录depot_tools
到环境变量,后续会用其中的命令
export PATH=$PATH:你的路径/depot_tools
-
mkdir webrtc_android && cd webrtc_android
后续命令在webrtc_android
目录执行 -
fetch --nohooks webrtc_android
-
gclient sync
-
更新系统的已安装软件,安装
python
、openjdk-8-jdk
sudo apt update && sudo apt upgrade && sudo apt install python openjdk-8-jdk
-
cd src/ && ./build/install-build-deps.sh --no-chromeos-fonts
可能会出现boto
、snap
、fonts
等相关异常参见后文章节
后续命令在src
目录执行 -
切换到所需分支
git branch -r
显示所有分支
git checkout -b m79 branch-heads/m79
切换到分支branch-heads/m79
更多Git相关命令
切换了分支,需要更新依赖,执行gclient sync --force
之前最好gclient status
确认已修改状态,保存提交之前的修改 -
执行
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
可以看到,最终采用了 gn 和 ninja 构建编译
参考自 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.
解决方案:
-
Create ~/.boto config file
[Boto] proxy = 127.0.0.1 proxy_port = 7890 ca_certificates_file = /path/to/certificate.crt
-
Export NO_AUTH_BOTO_CONFIG
在~/.bashrc中添加export NO_AUTH_BOTO_CONFIG=~/.boto
再执行source ~/.bashrc
-
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.
- 方案一,直接选择
SKIP
跳过
这里不需要用到snap
Windows的Linux子系统(WSL)- Ubuntu 20.04 默认不支持snap
,需要 配置一下- 方案二,在 Ubuntu下安装
snap
并配置代理
相关命令参考 https://blog.csdn.net/qq_26975799/article/details/111411238
最后测试snap
是否连接成功snap debug connectivity
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-build中
libwebrtc.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 release 时间表 https://chromiumdash.appspot.com/releases
可以从中看到大版本与小版本对应关系,比如94
对应4606
-
当前(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
gclient sync
其它相关文档
-
mediasoup 录制MP4,采用‘MP4 Fast-Start’,将‘metadata ’写在文件头
https://github.com/Kurento/mediasoup-demos/tree/master/mediasoup-recording -
H265 相关支持
https://github.com/HackWebRTC/webrtc/commit/7abfc990c00ab35090fff285fcf635d1d7892433 -
WebRTC on Android: how to enable hardware encoding on multiple devices
https://medium.com/bumble-tech/webrtc-on-android-how-to-enable-hardware-encoding-on-multiple-devices-5bd819c0ce5 -
WebRTC -- SDP格式解析
https://www.jianshu.com/p/94d6defc8e27 -
安卓webrtc在ubuntu 2004下编译使用
https://blog.csdn.net/CSqingchen/article/details/120016697 -
Android 断点调试 webrtc、 medieasoup
https://blog.csdn.net/CSqingchen/article/details/120156900 -
安卓增加 mediasoup webrtc 日志输出
https://blog.csdn.net/CSqingchen/article/details/120156669 -
安卓 Mediasoup V3 基于webrtc 分支m84 的编译
https://blog.csdn.net/CSqingchen/article/details/120163087 -
安卓 webrtc 开启h264 软编解码
https://h89.cn/archives/6.html -
安卓mediasoup输出H264流(支持H264编码)
https://h89.cn/archives/1.html -
安卓mediasoup webrtc h264 软编解码相关源码分析
https://blog.csdn.net/CSqingchen/article/details/120218923
本文链接:安卓webrtc在ubuntu 2004下编译使用 - https://chenjim.com/archives/235.html
版权声明:原创文章 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文链接和本声明。
评论已关闭