解决办法:av_interleaved_write_frame()返回-22 错误

简介: 解决办法:av_interleaved_write_frame()返回-22 错误

赶紧上网搜索,有人说(从输出也能看到):


 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);

  经过测试,这两个办法都可以。

目录
相关文章
nobuffer与av_read_frame的关系
nobuffer与av_read_frame的关系
102 0
av_read_frame每次返回的视频和音频帧数
av_read_frame每次返回的视频和音频帧数
97 0
av_read_frame每次返回的视频和音频帧数
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
169 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
|
编解码
av_read_frame返回值为-5 Input/output error
av_read_frame返回值为-5 Input/output error
189 0
解决办法:av_interleaved_write_frame()返回-22 错误
解决办法:av_interleaved_write_frame()返回-22 错误
151 0
fwrite()读取长度错误
fwrite()读取长度错误
121 0
AV_PIX_FMT_YUV420P12LE’在此作用域中尚未声明
AV_PIX_FMT_YUV420P12LE’在此作用域中尚未声明
103 0
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
247 0
jpeglib的jpeg_finish_compress函数疑似越界
jpeglib的jpeg_finish_compress函数疑似越界
57 0

热门文章

最新文章