c++调用ffmpeg报错
Application provided invalid, non monotonically increasing dts to muxer in stream 240>40
具体报错图片如下:
找了很多博客都没有这个报错的具体解决方案,因此决定自己写一个。
首先我们分析一下报错的信息,报错显示传送给封装器的dts的时间戳是非单调递增。
dts的全屏为decoding timestmp, 解码时间戳,ffmpeg要求解码时间戳要单调递增。
接下来分析发现是第一帧的dts为240,但是后续帧的dts为40。因此240>40,导致这一报错的发生。
因此我们可以手动将第一帧的dts设置为0,这样就不会引起报错,程序可以正常运行了。
我们可以设置一个变量为firstFrame,检测是否是第一个帧即可。
将下面这一段代码加入到程序计算dts之后即可。
if (avPacket.dts < 0 || avPacket.pts < 0 || avPacket.dts > avPacket.pts || firstFrame)
{
firstFrame=0;
avPacket.dts = avPacket.pts = avPacket.duration = 0;
}
觉得有用的xdm可以点波赞哦!