ストリームから取得したビデオ フレームを既存の mp4 ファイルに追加する必要があります。チャンク テーブルを更新するには、 mdatとstco atomを使用する必要があることがわかりました。新しいフレーム/チャンクを追加することは可能ですか? iOSアプリでこれを行う必要があります。
1 に答える
このような追加は可能ですが、特に一度に 1 つのフレームを追加する場合は、実用的ではない可能性があります。
MP4 は非常に「焼き付けられた」形式であり、生成後に変更することは困難です。これは、「moov」ボックスの構造データに、「mdat」ボックスの重要なメディア データへのファイル オフセットが含まれているためです。moov ボックスが mdat ボックスの前に配置されている場合 (プログレッシブ ダウンロードを許可するために一般的)、moov ボックスに追加されたデータ (つまり、追加されたビデオの新しいキーフレームへの参照) は、mdat ボックスをさらに押し出します。ファイルを書き換える必要があるだけでなく、それに応じてすべてのファイル オフセットを更新する必要があります。(おそらく、moov ボックスのサイズを一定に保つための巧妙なトリックがいくつかあります...) mdat ボックスが最初に配置されている場合、moov ボックスをメモリにコピーする必要があるため、操作は依然として厄介です。 mdat の終わり、
すべての新しいビデオ フレームを収集し、記録の最後に書き換え操作中にそれらを追加できる場合、これは機能する可能性があります。Fragmented MP4 (「moof」ボックスを使用) を調べることもできますが、そのようなファイルの読み取りがどの程度広くサポートされているかはわかりません。