Android 断点调试 webrtcmedieasoup
Posted 清霜之辰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 断点调试 webrtcmedieasoup相关的知识,希望对你有一定的参考价值。
android 断点调试 webrtc、medieasoup
文章目录
本文首发地址 https://blog.csdn.net/CSqingchen/article/details/120156900
最新更新地址 https://gitee.com/chenjim/chenjimblog
本文基于 mediasoup-demo-android 和 mediasoup-client-android 或者 webrtc AppRTCDemo
调试代码工程准备
- 将
mediasoup-demo-android
mediasoup-client-android
git clone 到一个目录 - 修改
app/build.gradle
, 去掉implementation fileTree(dir: 'libs', include: ['*.jar'])
将implementation 'org.mediasoup.droid:mediasoup-client:3.0.8-beta-3'
改为if (client_project_build.toBoolean()) implementation project(':media_client') else implementation 'org.mediasoup.droid:mediasoup-client:3.0.8-beta-3'
gradle.properties
中添加client_project_build=true
控制使用源码编译,还是直接用编译好的 aarsettings.gradle
修改结果如下
include ':app'
if (client_project_build.toBoolean())
include ':media_client'
project(":media_client").projectDir = new File(rootDir, "../mediasoup-client-android/mediasoup-client")
- webrtc 调试
编译好需要的 aar 后 参考代码 AppRTCDemo 即可
配合服务端 https://appr.tc/ 调试
编译 Debug 包
修改 ./build/toolchain/android/BUILD.gn
...
template("android_clang_toolchain")
...
_prefix = rebase_path("$clang_base_path/bin", root_build_dir)
cc = "$_prefix/clang"
cxx = "$_prefix/clang++"
ar = "$_prefix/llvm-ar"
ld = cxx
readelf = _tool_prefix + "readelf"
nm = _tool_prefix + "nm"
# 注释掉下面三行配置,即可实现 unstrip
# strip = rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",
# root_build_dir)
# use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs
...
...
添加编译参数
关键参数为 is_debug=true symbol_level=2 android_full_debug=true
$ ./tools_webrtc/android/build_aar.py \\
--extra-gn-args "is_debug=true symbol_level=2 android_full_debug=true" \\
--arch arm64-v8a
我们可以用 Linux 命令 cp
将编译结果复制到我们需要用的地方
安卓应用中修改 app/build.gradle
如下
...
android
buildTypes
debug
debuggable true // 必须设置为 true
jniDebuggable true // 必须设置为 true
minifyEnabled false // 必须设置为 false
packagingOptions
...
// 如果不设置 doNotStrip,编译出来的安装包还是会丢失调试信息;
// 因为我们只编译了 arm64-v8a 架构的包,所以只需要配置这一行即可
doNotStrip "*/arm64-v8a/*.so"
...
设置DEBUG TYPE
设置源码映射
# https://stackoverflow.com/a/53065726/4696820
# 查看 Native 层 webrtc::PeerConnection::RestartIce 这个方法的调试信息;
# 这里选用 RestartIce 而不是 CreateOffer 作为示例的原因是其输出单一,易于阅读
(lldb) image lookup -vrn webrtc::PeerConnection::RestartIce
# 设置源码映射,注意替换为自己的路径
(lldb) settings set target.source-map ../../../ D:\\code\\mediasoup-client-android\\mediasoup-client\\deps\\webrtc\\src
如下图,要先点左边的’暂停’,右边才能通过命令 image lookup -vrn webrtc::PeerConnection::RestartIce
设置一个断点
备注
我开发环境是在windows + VirtualBox + Ubuntu 2004 虚拟机(编译相关库)
如上 webrtc\\src
的代码需要跟虚拟机 webrtc\\src
代码同步
我的方法是:Ubuntu 通过 smb 共享 webrtc 代码, windows
下用 BeyondCompare
比较同步
如果全部在 Ubuntu ,使用 ln
创建软链接,可能会更方便一些
有人可能会想到,直接把代码放 windows , 挂载到 Ubuntu ,在 Ubuntu 编译,很遗憾,我编译失败了。。。
参考自 https://webrtc.mthli.com/basic/webrtc-breakpoint/
该文中还有一些比较好 webrtc相关知识
文档
比如 SDP 会话描述介绍 、 RTP 协议介绍 、视频旋转角度等
其它相关文档
-
安卓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://blog.csdn.net/CSqingchen/article/details/120199702 -
安卓mediasoup输出H264流(支持H264编码)
https://blog.csdn.net/CSqingchen/article/details/120218832 -
安卓mediasoup webrtc h264 软编解码相关源码分析
https://blog.csdn.net/CSqingchen/article/details/120218923
以上是关于Android 断点调试 webrtcmedieasoup的主要内容,如果未能解决你的问题,请参考以下文章
Android学习笔记Android Studio简单断点调试
android studio学习----android studio断点调试