背景
相同镜像, 在公有云跑直播视频不卡顿, 在其他私有化交付环境直播不卡顿, 但是在某项目交付中, 很多海康摄像机播放一天左右出现了卡顿的问题, ffplay播放不明显, 但是浏览器cyberplayer播放卡顿明显.
媒体流流向: IPC-> 服务器gbsrs-> 服务器srs->其他服务器-> .............->播放集群-> ffplay/cyberplayer/其他播放器
对pts的修改只有gbsrs和srs
排查过程
1、ffprobe显示下行视频pts存在相同的pts. 频率很高, pts如: 0 40 40 80 120 120 160 200 240 240 .... 没有规律可言.
2、从服务器抓包摄像机发出来的包, 发现源rtp/ps数据 音视频正常, 不存在相同的情况.
3、回顾服务器对pts的更改. gbsrs对音视频pts分别correct, 并且correct之后的fpts除90, 放在转封装rtmp的timestamp中.
srs收到gbsrs收到的rtmp之后对pts进行了合并correct.
4、抓包gbsrs-> srs的rtmp流, 分析得知, gbsrs产出的视频不存在pts重复的情况
5、抓包srs产出的rtmp流, 分析得知, srs产出的视频存在pts重复的情况.
结论
gbsrs存在video-jitter 和 audio-jitter分别对视音频pts校正, srs音视频使用同一个jitter对视音频pts进行校正.
gbsrs的video-jitter 和audio-jitter的差值如果越来越大, srs的jitter对gbsrs产出的音视频pts综合校正, 导致srs最终产出的pts视频可能造成相同的情况.
解决办法
把gbsrs的音视频pts校正都是用同一个jitter. 保证只要从摄像机发出来的视频间、音频间pts差距不是很大(小于1S),gbsr产出的pts就可以相对正常.