基於webrtc的資源釋放問題(一)android
——重複釋放webrtc的相關資源web
背景:微信
視頻通信大都只是做爲一個功能存在於各類應用中,好比微信,qq 。既然只是應用的一部分,這樣就涉及反覆的開啓和關閉視頻通訊的功能的問題了,那麼對於基於webrtc的通訊功能來講,就涉及到了反覆的獲取和釋放webrtc相關的資源的問題了,本博文的目的就是說說這個過程當中會遇到的問題。ide
最近一段時間在作基於webrtc的android應用在釋放資源時遇到一些問題,如今記錄下來用於備忘。視頻
官方給出的AppRTCDemo太過於簡單不少問題沒涉及到。事件
一、釋放peerconnection資源的問題。資源
場景:A和B進行通話(視頻通話)rem
如今B中終止通話io
錯誤:在B終止通話以後,A端的程序程序會意外退出。webrtc
分析:在A和B進行通話的時候會見了相應的PeerConnection類實例,這個實例保存的有stream的引用(localstream和remote stream等等)。
B在終止通話時就要釋放和A進行通話時創建的PeerConnection類的實例.這時候就會出現問題,A在釋放peerconnection實例的時候會把localstream給釋放掉,而localstream本身還在使用,這時候程序就會意外終止。
解決辦法:在是放peerconnection實例的時候不要釋放本地的localstream只釋放remote stream。單獨定義事件來觸發localstream的釋放。
二、釋放整個webrtc模塊的問題。
場景:A和B進行通話,B終止通話,B再進行視頻通話
錯誤:B再次進行視頻通話的時候意外終止
分析:B再次進行視頻通話的時候,因爲上次退出視頻通話的時候camera資源沒有釋放,可是再次進行視屏通話的時候沒法得到camera資源。
這裏看似是沒有得到camera資源的問題,實際上是咱們在使用完webrtc資源以後沒有及時釋放的問題。
解決辦法:真確的釋放相應的資源,個人步驟以下:
一、掛斷全部正在通訊的視頻通話(hangupall())(釋放peerconnection實例)
二、釋放localstream
三、釋放camera資源(VideoSource.dispose() 方法)
四、釋放PeerConnectionFactory資源
即便是這樣在我頻繁的打開和關閉視頻通話的時候程序仍然會有必定的機率會出錯。但願各位可以幫忙糾正個人錯誤。