Android IOS WebRTC 音视频开发总结(十七)-- 调试技巧
2014-12-29 10:17
1226 查看
本文章主要介绍WEBRTC在各平台下调试或日志查看方式,以方便问题排查,包括BS,PC,Android,IOS(本系列文章转载请说明出处,博客园RTC.Blacker).
1,浏览器开发:
这种开发方式不需要下载和编译WEBRTC源码(很多人都是"死"在这里的,不过确实很麻烦,原因就不赘述了),直接调用浏览器提供的API,
入门相对简单(这并不意味着效果差,恰恰相反,因为浏览器厂商为你做了很多的优化,很多时候效果比自己去弄好多了).
这种方式的缺陷就是无法修改底层代码,如果您想调整一些实现方式或与现有系统结合就不好弄了.
所以如果这种方式出问题了一般都是您自己的问题,相应的查问题方式就是console.log和wireshake之类的工具.
2,Android开发:
这部分是我要重点介绍的,很多不熟悉ndk或linux的不知道怎么去查看底层的日志,其实通过logcat您可以比较方便地看到底层的输出.
如果您正在使用Talk进行开发,可参考如下调用方式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2e1d74d3c8fa6fc0c3708204a846ba80.jpg)
如果没有使用到libjingle,可参考MediaEngine.java的调用方式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/4a1334fcdd43d6c0e4ec16f723f8ea3c.jpg)
Logging.java在JNI中实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2e3725dfc1bcefab9b7017bf33a90a43.jpg)
构造g_trace_callback是因为需要在其构造函数中注册一个callback,LogcatTraceContext实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/d3ae566b463c8eda024a69b4d1b6ee33.jpg)
呵呵呵,搞过ndk开发的,很熟悉__android_log_print这个函数吧.
这时候您可能会有疑问,如果要在调用Logging.enableTracing()方法前查看初始化libjingle环境的日志,怎么搞呢?
请看WebRtcVoiceEngine构造函数的实现:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2be74d8e857dd2cfaa360a4a7f04d8ea.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/aec767f7e0da354d2c49248bce716d50.jpg)
它在构造函数里面直接注册callback,当webrtc需要输出log的时候就可以直接执行自己定义的callback,
这样就可以很好滴控制日志的输出,设计得很巧妙,比看啥设计模式的理论书籍都管用.
这时候您还有新的疑问,如果要在调用Logging.enableTracing()方法前查看webrtc底层的日志,怎么办呢?
下面这些代码是我自己加上去的(不是最好的方案),因为webrtc目前还不完善的原因,日志都搞得这么复杂(历史原因就是webrtc与talk是后面才整合到一起的),估计他们后面会改得更合理,所以我也这样先将就着,呵呵.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/408ca3133332fc73835ac97f03e94d04.jpg)
3,PC开发:
PC上基本上都是用VS在开发,很好调试,既可以将日志输出到控制台,还可以直接在代码中下断点,或者抓包,手段很多,操作起来也不复杂.
4,iOS开发:
xcode跟vs差不多,很方便,无需赘述.
吐槽一句,xcode,eclipse,virtual machine一起运行,mac表示很吃力,机器又得升级换代了,下个月的信用卡哦,亚历山大.
1,浏览器开发:
这种开发方式不需要下载和编译WEBRTC源码(很多人都是"死"在这里的,不过确实很麻烦,原因就不赘述了),直接调用浏览器提供的API,
入门相对简单(这并不意味着效果差,恰恰相反,因为浏览器厂商为你做了很多的优化,很多时候效果比自己去弄好多了).
这种方式的缺陷就是无法修改底层代码,如果您想调整一些实现方式或与现有系统结合就不好弄了.
所以如果这种方式出问题了一般都是您自己的问题,相应的查问题方式就是console.log和wireshake之类的工具.
2,Android开发:
这部分是我要重点介绍的,很多不熟悉ndk或linux的不知道怎么去查看底层的日志,其实通过logcat您可以比较方便地看到底层的输出.
如果您正在使用Talk进行开发,可参考如下调用方式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2e1d74d3c8fa6fc0c3708204a846ba80.jpg)
如果没有使用到libjingle,可参考MediaEngine.java的调用方式:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/4a1334fcdd43d6c0e4ec16f723f8ea3c.jpg)
Logging.java在JNI中实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2e3725dfc1bcefab9b7017bf33a90a43.jpg)
构造g_trace_callback是因为需要在其构造函数中注册一个callback,LogcatTraceContext实现如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/d3ae566b463c8eda024a69b4d1b6ee33.jpg)
呵呵呵,搞过ndk开发的,很熟悉__android_log_print这个函数吧.
这时候您可能会有疑问,如果要在调用Logging.enableTracing()方法前查看初始化libjingle环境的日志,怎么搞呢?
请看WebRtcVoiceEngine构造函数的实现:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/2be74d8e857dd2cfaa360a4a7f04d8ea.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/aec767f7e0da354d2c49248bce716d50.jpg)
它在构造函数里面直接注册callback,当webrtc需要输出log的时候就可以直接执行自己定义的callback,
这样就可以很好滴控制日志的输出,设计得很巧妙,比看啥设计模式的理论书籍都管用.
这时候您还有新的疑问,如果要在调用Logging.enableTracing()方法前查看webrtc底层的日志,怎么办呢?
下面这些代码是我自己加上去的(不是最好的方案),因为webrtc目前还不完善的原因,日志都搞得这么复杂(历史原因就是webrtc与talk是后面才整合到一起的),估计他们后面会改得更合理,所以我也这样先将就着,呵呵.
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/04/408ca3133332fc73835ac97f03e94d04.jpg)
3,PC开发:
PC上基本上都是用VS在开发,很好调试,既可以将日志输出到控制台,还可以直接在代码中下断点,或者抓包,手段很多,操作起来也不复杂.
4,iOS开发:
xcode跟vs差不多,很方便,无需赘述.
吐槽一句,xcode,eclipse,virtual machine一起运行,mac表示很吃力,机器又得升级换代了,下个月的信用卡哦,亚历山大.
相关文章推荐
- Android IOS WebRTC 音视频开发总结(十七)-- 调试技巧
- Android IOS WebRTC 音视频开发总结(六)
- Android IOS WebRTC 音视频开发总结(十一)-- stun&turn部署
- Android IOS WebRTC 音视频开发总结(十)
- Android IOS WebRTC 音视频开发总结(十四)-- sip和xmpp异同
- Android IOS WebRTC 音视频开发总结(七)
- Android IOS WebRTC 音视频开发总结(十六)-- 音频设备操作之opensl与jni
- Android IOS WebRTC 音视频开发总结(二七)-- whatsapp之转发优先
- Android IOS WebRTC 音视频开发总结(二三)-- hurtc使用说明
- Android IOS WebRTC 音视频开发总结(二五)-- webrtc相关资源
- Android IOS WebRTC 音视频开发总结(二十)-- 自由职业
- Android IOS WebRTC 音视频开发总结(八)-- ios上移植webRTCDemo
- Android IOS WebRTC 音视频开发总结(二一)-- 黑屏问题
- Android IOS WebRTC 音视频开发总结(二八)-- 多人视频方案介绍
- Android IOS WebRTC 音视频开发总结(十)-- webrtc入门002
- Android IOS WebRTC 音视频开发总结(十二)-- sufaceview
- Android IOS WebRTC 音视频开发总结(七)-- 基于浏览器的开发
- Android IOS WebRTC 音视频开发总结(十八)-- 手机适配
- Android IOS WebRTC 音视频开发总结(二六)-- webrtc调用堆栈