解決策:av_interleaved_write_frame()は-22エラーを返します



Solution Av_interleaved_write_frame Returns 22 Error



インターネットを急いで検索してください、と言う人もいます(出力からも見ることができます):

AVPacketのDts> = pts、それ以外の場合は-22エラーを返します。



実行する方法?オンラインでそれを見つける効果的な方法はありません。そこで私は自分自身を探求し、次の2つの方法を見つけました。

  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 time_base, out_stream->time_base)

テスト後、どちらの方法でも問題ありません。