解决办法: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);


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

目录
相关文章
|
存储
av_register_all分析
av_register_all分析
88 0
av_register_all分析
nobuffer与av_read_frame的关系
nobuffer与av_read_frame的关系
83 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
138 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_read_frame每次返回的视频和音频帧数
av_read_frame每次返回的视频和音频帧数
78 0
av_read_frame每次返回的视频和音频帧数
|
编解码
av_read_frame返回值为-5 Input/output error
av_read_frame返回值为-5 Input/output error
161 0
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
解决办法:对lzma_stream_decoder/lzma_code/lzma_end未定义的引用
225 0
|
计算机视觉 Python
安装了opencv,怎么一直报错:找不到CAP_PROP_FRAME_COUNT
安装了opencv,怎么一直报错:找不到CAP_PROP_FRAME_COUNT
114 0
|
存储 编解码 Android开发
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
249 0
解决办法:av_interleaved_write_frame()返回-22 错误
解决办法:av_interleaved_write_frame()返回-22 错误
333 0