赶紧上网搜索,有人说(从输出也能看到):
AVPacket 中dts>=pts, 否则就返回-22 错误。
怎么办?从网上也没有找到有效办法。于是自己摸索,找到两个办法办法如下:
- pts/dts=4500*frame_counter。这个貌似跟帧率有关?如果加个0就慢10倍。
- 记录最开始的AVPacket的pts/dts,然后每次加上。如果确保dts>=pts。
代码如下:
#if 1
if (pts == 0)
{
pts = pkt.pts;
dts = pkt.dts;
}
else
{
pkt.pts += pts;
pkt.dts += dts;
}
if (pkt.dts < pkt.pts)
{
pkt.dts = pkt.pts;
}
#else
pkt.pts += 4500*frame_index;
pkt.dts += 4500*frame_index;
#endif
pkt.duration = av_rescale_q(pkt.duration, in_stream->time_base, out_stream->time_base);
经过测试,这两个办法都可以。