问题发现
一客户直播环境为ffmpeg进行rtsp拉流,然后转换为rtmp推流.最近ffmpeg版本进行更新后发现后端进行rtmp播放时会出现黑屏现象,但是有数据流.如果使用老版本的ffmpeg则没有这个问题.
问题分析
刚开始出现这个问题怀疑是关键帧发送问题,因为rtmp通常第一个video tag包含sps和pps等h264解码所需的重要信息,如果不发送解码器则不能解码,就会出现有数据无图像的问题.后来抓包和分析调试信息分析,vidoetag信息正常发送,排除这个问题可能.
后来打印时间戳发现,flash播放视频流时时间戳都为0,如果改为100则可以正常播放,到这里发现是时间戳问题.
问题解决
按rtmp协议的规定,Type为3的时候表示这个chunk的Message Header和上一个是完全相同的.而且ffmpeg发送的应该为相对时间戳,而服务端处理为绝对时间戳,所以导致了这个问题.