场景要求
项目要求点播速度是300到500毫秒之间,现在最长的点播延时是1300毫秒(有的时候甚至无法播放视频),生产环境是RTSP传输h264裸流数据,研究在接收到I帧的时候,开始出来图像,简化FFmpeg的调用逻辑(SPS/PPS已经预先知道,并且分辨率也是固定为1920*1080)
解决方案
1)指定SPS/PPS参数,方便在调用avcodec_open2函数打开×××的时候,找到正确的视频参数
https://blog.51cto.com/fengyuzaitu/2058138
2)通过指定视频码流格式H264减少探测时间
关键函数是:avformat_open_input和avformat_find_stream_info
https://blog.51cto.com/fengyuzaitu/1573766
https://blog.51cto.com/fengyuzaitu/1982996
3)核心是要求发送端发送的第一帧:强制I帧,根据如下的其他的方案指定码流的格式
4)用户新加入流媒体转发队列,流媒体推送用户的第一帧,不一定是I帧(这一帧之前的SPS/PPS不能少),用户需要等待一段时间才能看到画面,直到I帧的出现随着GOP的增大,时间可能更长。为了解决问题,需要缓存整一个GOP的图像序列,单纯保存I帧,没有效果,因为每一个P帧都会依赖之前的P帧,类似于后面的图片是前面图片效果的叠加。新增加的用户,先发送缓存的GOP序列,然后才发送剩下接收的数据
相关问题点有待研究
1)avformat_open_input取消问题的优化
在代码中指定如下ÿ