文章预览
1、定义解码延迟 视频解码延迟是个老生常谈的问题: 刚开始接触FFmpeg的同学,会问:为什么avcodec_receive_frame返回AVERROR(EAGAIN)? 有秒开和低延迟需要的同学会问,怎么让解码器更快输出首帧? 首先要定义下描述首帧延迟的方式: 输入第N个视频packet,开始输出第1帧图像,延迟为N - 1 如果输入第1个packet,输出第1个frame,延迟为0。输入第5个packet,才输出第1个frame,延迟为4。 这种定义方式的好处是:对解码性能(解码速度)和延迟做了解耦,是解码的固有延迟。首帧的输出时间问题,耦合了解码固有延迟、解码性能、送数据速度、系统调度等多个维度因素 。 必须注意,这种定义方式对FFmpeg软件解码有效,因为软件解码延迟是确定性的,但对硬件解码不一定有效: 如果软件解码 avcodec_receive_frame返回了AVERROR(EAGAIN),你再循环调用 avcodec_receive_frame 10000
………………………………