报这个错误的原因是视频源时间戳出问题了,Ffmpeg要求视频源时间戳递增,如不后面的视频包时间戳比之前的时间戳小,
ffmpeg会选择丢弃此类视频包,并报如上错误。如何解决这个问题
方法1是重新给视频包打时间戳可以重0开始依次递增。
例子:
//循环读取每一帧直到读完 从媒体流中读取帧填充到填充到Packet的数据缓存空间
while(av_read_frame(inVFmtCtx,pkt)>=0){//循环读取每一帧直到读完
pkt->dts = 0;//不加这个时间戳会出问题,时间戳比之前小的话 FFmpeg会选择丢弃视频包,现在给视频包打时间戳可以重0开始依次递增。
if(pkt->stream_index==inVStreamIndex){//确保处理的是视频流 stream_index标识该AVPacket所属的视频/音频流。
方法2是去掉ffmpeg的这个限制。
编码前先判断pts,如果比前一个小就跳过,或者修改pts