Android调试webrtc

一、前言

我们知道,安卓中应用webrtc技术是通过jni调用底层的c代码实现的。但是在用webrtc的java代码做开发时,难免会出现各种各样问题,比如异常。很难找到真正的原因。例如下边的异常:

Android调试webrtc_第1张图片

这篇文章就是教大家怎么解决这个异常,找出这个异常的根本原因是什么?

二、准备工作

因为要找底层的原因,那我们就要准备底层源码了。

2.1 Android调用jni的源码

我们用androidstudio开发webrtc时,只需要在gradle中引入如下代码即可。

compile 'io.pristine:libjingle:9127@aar' 

但是引入后我们是看不到jni代码的。 
我们可以去github上下载源码戳这里。 
好!第一步准备完成。

2.2 webrtc的源码

如何下载webrtc源码可以参考我的另外一篇博文戳这里。这篇博文是官网推荐的方法。 
但是对于比较懒的同学,懒得配置系统环境。我们可以去github上找一份别人分享的。但是不保证分享的代码能与官网同步。我帮大家找了一份戳这里。

三、分析

其实许多同学都停止在了准备那块,因为不知道如何获取,比较懵逼。分析其实也不难。 

就按我们前言中截图的异常,不难看出异常出现在peerconnection_jni.cc,第940行。

 

那么我们按照错误提示,打开peerconnection_jni.cc文件,跳转到第940行,代码如下:

Android调试webrtc_第2张图片

我们可以看到是track->RemoveRenderer这句话报的错, 
这句话是调用底层的RemoveRenderer方法,底层的这个方法其实不用看了。 
在这块我们就可以知道,是因为删除Renderer对象出的异常。 
这让笔者茅塞对开,笔者恰巧增加了两个Renderer对象来做调试,原来是这块出现的问题。 
随后笔者对代码做了修改,错误解决了。

四、总结

这篇文章应该能帮助一部分同学解决开发webrtc遇到的一些问题。

你可能感兴趣的:(移动开发)