解决办法: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的关系
80 0
av_read_frame每次返回的视频和音频帧数
av_read_frame每次返回的视频和音频帧数
73 0
av_read_frame每次返回的视频和音频帧数
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
134 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_dump_format参数分析与使用
av_dump_format参数分析与使用
125 0
av_dump_format参数分析与使用
|
编解码
av_read_frame返回值为-5 Input/output error
av_read_frame返回值为-5 Input/output error
160 0
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
222 0
|
计算机视觉 Python
安装了opencv,怎么一直报错:找不到CAP_PROP_FRAME_COUNT
安装了opencv,怎么一直报错:找不到CAP_PROP_FRAME_COUNT
113 0
|
算法 开发者
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
关于 加载图片"Corrupt JPEG data: premature end of data segment" 的解决方法
|
存储 编解码 Android开发
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
247 0