解決策:av_interleaved_write_frame()は-22エラーを返します
Solution Av_interleaved_write_frame Returns 22 Error
インターネットを急いで検索してください、と言う人もいます(出力からも見ることができます):
AVPacketのDts> = pts、それ以外の場合は-22エラーを返します。
実行する方法?オンラインでそれを見つける効果的な方法はありません。そこで私は自分自身を探求し、次の2つの方法を見つけました。
- 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 time_base, out_stream->time_base)
テスト後、どちらの方法でも問題ありません。