在我在基于视频的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的头部长度也算进去了,导致解析时多解析了音频的长度,将视频的数据损坏了
导致播视频的第一帧没问题,一播音频就卡