您当前的位置: 首页 > 

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

柳鲲鹏 发布时间:2019-03-06 22:29:57 ,浏览量:0

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

  AVPacket 中dts>=pts, 否则就返回-22 错误。

 

  怎么办?从网上也没有找到有效办法。于是自己摸索,找到两个办法办法如下:

  1. pts/dts=4500*frame_counter。这个貌似跟帧率有关?如果加个0就慢10倍。
  2. 记录最开始的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);

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

关注
打赏
1688896170
查看更多评论

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4641博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0423s