記一次pjsip通話沒(méi)聲音的調(diào)試過(guò)程

1、定位:首先就是定位是否有流,將dev port的frame寫(xiě)文件,conference port的frame寫(xiě)文件,stream port的frame寫(xiě)文件。發(fā)現(xiàn)從stream port開(kāi)始,frame就是空的了。(寫(xiě)文件的位置一般都在相應(yīng)port的put_frame實(shí)現(xiàn)中,因?yàn)槭蔷幋a方向的流)
2、調(diào)試:檢查port連接是否異常,發(fā)現(xiàn)port一開(kāi)始連接正常,但是中途發(fā)生了media channel update,stream被destroy然后重新create,start,這個(gè)時(shí)候stream port本應(yīng)和conference port重新連接起來(lái)的但是發(fā)現(xiàn)并沒(méi)有,這一步產(chǎn)生兩個(gè)疑點(diǎn):首先為什么會(huì)發(fā)生media channel update且codec param協(xié)商失???這是因?yàn)閟tream create會(huì)置 code param的vad參數(shù)為0,stream port的put_frame中才會(huì)真正使能這個(gè)參數(shù)(但是需要過(guò)一段時(shí)間,這個(gè)時(shí)間由PJMEDIA_STREAM_VAD_SUSPEND_MSEC來(lái)控制,具體可參考pjsip中的注釋),由于update到來(lái)的時(shí),這個(gè)參數(shù)還沒(méi)有使能,因此media update channel時(shí)codec param參數(shù)協(xié)商失敗。其次為什么stream destroy然后再creat,start,stream port就沒(méi)有和conference port連接了?這是因?yàn)榍懊娴娜诵薷牧薿n_call_audio_state的實(shí)現(xiàn),在連接conference port和stream port前加了判斷,call state是confirm狀態(tài)就不連接,所以才會(huì)出現(xiàn)通話中channel update時(shí)重啟stream會(huì)導(dǎo)致stream中沒(méi)有流。
3、解決:三個(gè)方案選其一
channel update時(shí)不比較codec的vad參數(shù)
將PJMEDIA_STREAM_VAD_SUSPEND_MSEC改小,保證update前codec的vad參數(shù)已經(jīng)修改過(guò)來(lái)
將on_call_audio_state中連接port前的判斷去掉

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容