说明
错误产生背景: 循环推流一个时长为10秒的mp4文件到流服务器上。
错误提示:
错误分析原因
在推流编码地方产生的pts和dts等时间戳信息均来自输入AVPacket的参数。当首次读取完视频后,会seek到视频文件的头部继续读取并继续解码编码等执行。错误出现在seek后的第一个读取的AVPacket,在编码后发送时出现了这个错误。
分析判断此时输入的AVPacket的pts信息为0,于是计算出输出包的pts等信息也小于输出推流的最后的时间戳信息。FFmpeg要求视频源时间戳递增,如新的视频包时间戳比之前的时间戳小,ffmpeg会丢弃此类视频包并报错!
解决
方式一:
将读取的每个视频AVPacket的dts设置为0:
if(av_read_frame(avFormatContext