美文网首页
记一次pjsip通话没声音的调试过程

记一次pjsip通话没声音的调试过程

作者: Westring | 来源:发表于2020-04-17 14:52 被阅读0次

    1、定位:首先就是定位是否有流,将dev port的frame写文件,conference port的frame写文件,stream port的frame写文件。发现从stream port开始,frame就是空的了。(写文件的位置一般都在相应port的put_frame实现中,因为是编码方向的流)
    2、调试:检查port连接是否异常,发现port一开始连接正常,但是中途发生了media channel update,stream被destroy然后重新create,start,这个时候stream port本应和conference port重新连接起来的但是发现并没有,这一步产生两个疑点:首先为什么会发生media channel update且codec param协商失败?这是因为stream create会置 code param的vad参数为0,stream port的put_frame中才会真正使能这个参数(但是需要过一段时间,这个时间由PJMEDIA_STREAM_VAD_SUSPEND_MSEC来控制,具体可参考pjsip中的注释),由于update到来的时,这个参数还没有使能,因此media update channel时codec param参数协商失败。其次为什么stream destroy然后再creat,start,stream port就没有和conference port连接了?这是因为前面的人修改了on_call_audio_state的实现,在连接conference port和stream port前加了判断,call state是confirm状态就不连接,所以才会出现通话中channel update时重启stream会导致stream中没有流。
    3、解决:三个方案选其一
    channel update时不比较codec的vad参数
    将PJMEDIA_STREAM_VAD_SUSPEND_MSEC改小,保证update前codec的vad参数已经修改过来
    将on_call_audio_state中连接port前的判断去掉

    相关文章

      网友评论

          本文标题:记一次pjsip通话没声音的调试过程

          本文链接:https://www.haomeiwen.com/subject/jdgzgqtx.html