赶紧上网搜索,有人说(从输出也能看到):
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);
经过测试,这两个办法都可以。