AVAssetWriterによって書き込まれたH.264 movファイルを同時に読み書きしようとしています。私は個々のNALユニットを抽出し、ffmpegのAVPacketsにパックし、ffmpegを使って別のビデオフォーマットに書き込んだ。それは動作し、結果のファイルは再生スピードが正しくないことを除いてうまく再生されます。生のH.264データから正しいPTS/DTS値を計算するにはどうすればよいですか?あるいは、それを得るための他の方法があるかもしれませんか?iOSで生成されたraw H264 mdatからPTSを取得するAVAssetWriter
リミットは30に最小/最大フレームレートをキャプチャし、出力ファイルは30fpsでなることを想定しています。ここ
は、私が試したものです。実際、そのfpsは常に私が設定した値よりも小さくなっています。また、パケットごとにfpsが一定ではないと思います。
書かれたサンプルのプレゼンテーションタイムスタンプを覚えておき、サンプルがNALUに1対1で対応し、保存されたタイムスタンプを出力パケットに適用すると仮定します。これは機能しません。
PTSを0またはAV_NOPTS_VALUEに設定します。動作しません。
生のH.264データには通常、タイミング情報が含まれていないことがわかりました。 SEI内部にはタイミング情報があることもありますが、私が使っているファイルにはそれがありません。一方で、私がやろうとしていることを正確に行うアプリケーションがいくつかありますので、どういうわけか可能です。
また、AVAssetWriterで作成されたmovファイルからH.264を同時に読み込もうとしており、パイプ/通常のファイル読み込みを使用して実行できませんでした。それが書かれている間にあなたはどのようにそれを読むことができましたか?ありがとう! –
通常のファイルの読み込みを使用しますが、EOFの読み込みをやり直すのではなく、遅かれ早かれあなたの読書活動は成功するでしょう。 – kolyuchiy
@kolyuchiy - ディスパッチソースは、システムをより良く使用します。 FILE記述子に読み取り元を設定します。読み込むデータがあるときにブロックが呼び出されます。 EOFが発生した場合は、ファイルのエラーをクリアしてください。 –