webrtc在安卓平台的编译
webrtc源码下载和编译
(整个库非常大,包含三方库一起大概30多G):
编译指导文档
https://mp.weixin.qq.com/s/6DWubdMJBUCKqbpTFH2wOA
1. 获取代码
安装depot_tools:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=$PATH:${HOME}/depot_tools
fetch --nohooks webrtc_android
gclient sync
2. 安装依赖:
cd src
./build/install-build-deps.sh
./build/install-build-deps-android.sh
3. 编译
gn gen out/Debug64 --args='target_os="android" target_cpu="arm64" is_debug=true'
ninja -C out/Debug64
切换代码分支:
切换到分支对应分支后,运行同步:
gclient sync
替换jar包:
libs/autobanh.jar, 从Webrtc源码/src/examples/androidapp/thrid_party/lib 中找到
libs/libwebrtc.jar, 编译出来后生成的webrtc_android jar包, 编译后生成的目录在Webrtc源码/src/out/Debug/lib.java/sdk/android/libwebrtc.jar 源代码在 Webrtc源码/src/sdk/android/src/java 下
打包aar文件:
1. 首先,请移步至WebRTC Android源码目录下这个位置: \src\tools_webrtc\android\ ,你会看到有2个python脚本,一个是build_aar.py,另外一个是release_aar.py。有了这两个脚本,打包制作aar和pom文件就变得十分简单了。
2. 默认的pom文件中的groupId是org.webrtc,你可以根据需要修改成你的。例如:com.yourcompany.yourproduct
3. 运行build_aar.py脚本,会在当前目录生成libwebrtc.aar文件;
4. 修改app的build.gradle文件,在dependencies中添加一项“implementation files”,加入aar文件的路径。
打开native层日志:
1. 编译debug版本的so
2. 在代码的构造函数中添加:
#include "webrtc/base/logging.h"
rtc::LogMessage::SetLogToStderr(true);
编译rtcAppMobile demo程序,调试webrtc;
1. 出现报错: Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
解决办法:1. 更新andriod sdk tool版本(根据报错的版本进行安装) 、
2. 下载更新andriod sdk版本。
2. 出现报错: aapt error attribute alpha not found
解决办法: 1. 修改build.gradle中的插件版本为: classpath 'com.android.tools.build:gradle:3.6.4'
2. 修改 files -> Project Struction -> gradle 版本为 6.5
webrtc Windows平台编译
编译参考文档:
https://blog.jianchihu.net/windows-webrtc-build.html
问题1:
gclient sync时可能会遇到ssl的报错:
解决办法:
1. 执行 git config http.sslVerify "false" 后,再执行gclient sync
2. 如果报错是src\resource\audio_xxx,可以忽略。
问题2:
如果安装了Windows SDK还是找不到路径
解决办法:
打开vs2019安装中心,查看win 10 sdk是否已经安装,底下的目录不一定是sdk安装位置。可以建一个工程,包含 #include "virtdisk.h" ,跳转看看安装目录位于哪儿。拷贝到C:\Program Files (x86)\Windows Kits\10下,其它vs2008等可以默认找到。
日志输出到文件:
https://codeleading.com/article/26425565674/
rtc::LogMessage::LogToDebug(rtc::LS_INFO);
rtc::LogMessage::SetLogToStderr(true);
rtc::FileRotatingLogSink ff("C:\\", "webrtc_log", 1024 * 1024 * 10, 3);
ff.Init();
unsigned int count = 0;
rtc::LogMessage::AddLogToStream(&ff, rtc::LS_INFO);
bool loop = true;
while (loop) {
RTC_LOG(INFO) << "hello world count:" << count++;
}