Android除錯webrtc
阿新 • • 發佈:2019-01-10
一、前言
我們知道,安卓中應用webrtc技術是通過jni呼叫底層的c程式碼實現的。但是在用webrtc的java程式碼做開發時,難免會出現各種各樣問題,比如異常。很難找到真正的原因。例如下邊的異常:
這篇文章就是教大家怎麼解決這個異常,找出這個異常的根本原因是什麼?
二、準備工作
因為要找底層的原因,那我們就要準備底層原始碼了。
2.1 Android呼叫jni的原始碼
我們用androidstudio開發webrtc時,只需要在gradle中引入如下程式碼即可。
compile 'io.pristine:libjingle:[email protected]'
但是引入後我們是看不到jni程式碼的。
我們可以去github上下載原始碼 戳這裡。
好!第一步準備完成。
2.2 webrtc的原始碼
如何下載webrtc原始碼可以參考我的另外一篇博文戳這裡。這篇博文是官網推薦的方法。
但是對於比較懶的同學,懶得配置系統環境。我們可以去github上找一份別人分享的。但是不保證分享的程式碼能與官網同步。我幫大家找了一份戳這裡。
三、分析
其實許多同學都停止在了準備那塊,因為不知道如何獲取,比較懵逼。分析其實也不難。
就按我們前言中截圖的異常,不難看出異常出現在peerconnection_jni.cc,第940行。
那麼我們按照錯誤提示,開啟peerconnection_jni.cc檔案,跳轉到第940行,程式碼如下:
我們可以看到是track->RemoveRenderer這句話報的錯,
這句話是呼叫底層的RemoveRenderer方法,底層的這個方法其實不用看了。
在這塊我們就可以知道,是因為刪除Renderer物件出的異常。
這讓筆者茅塞對開,筆者恰巧增加了兩個Renderer物件來做除錯,原來是這塊出現的問題。
隨後筆者對程式碼做了修改,錯誤解決了。
四、總結
這篇文章應該能幫助一部分同學解決開發webrtc遇到的一些問題。