在我在基於視頻的rtsp推送的基礎上加上音頻並用nvr播放開發的時候,出現了這樣一個現象:
單獨只播視頻是沒有問題的,但是我加上音頻后,視頻在播放1s后就開始卡幀了,並且音頻的聲音aac格式的直接沒有,g711a格式的音頻能聽得到說話聲音,但聲音有奇怪的嗒嗒聲
然后用vlc播放時aac的聲音是正常的,視頻也不卡了,一到nvr上就卡
問題定位:
經過一番調試最終發現一個問題,就是我在vlc播放不卡那是因為vlc支持2種傳輸方式,一般默認情況是http,這種傳輸是udp傳輸,后來我換成第二種之后也開始卡了

而對於tcp與udp傳輸方式在rtsp中,對於數據打包傳輸這一塊就只有一個區別,那就是tcp協議比udp協議需要多打包一個rtsp的頭部,於是定位問題是出在了rtsp頭部打包的地方
問題解決:
最終發現是我的rtsp頭部打包的時候多加了幾個字節
一般一個rtsp數據包由tcp傳輸的時候,是rtsp頭部 + rtp頭部 + 數據,而rtsp頭部需要將數據的長度放進去,我在傳輸音頻的時候一不小心將rtp的頭部長度也算進去了,導致解析時多解析了音頻的長度,將視頻的數據損壞了
導致播視頻的第一幀沒問題,一播音頻就卡
