27

Appleのドキュメントから、次のように書かれています。

このプロパティの値がYESの場合、出力ファイルは、少量のファイルがダウンロードされた後に再生を開始できるように書き込まれます。

しかし、実際には何が起こっているのでしょうか。

4

1 に答える 1

75

shouldOptimizeForNetworkUse が YES に設定されている場合、finishWriting を呼び出すと、MP4 moov アトム (ムービー アトム) がファイルの末尾からファイルの先頭に移動します。moov アトムには、タイムスケールやデュレーションなどのムービー ファイルに関する情報が含まれています。moovには、トラック、ファイル内のデータオフセットなどの情報を含む「サブアトム」も含まれています。

再生は、moov アトムの情報を使用してのみ可能であり、それがファイルの最後ではなくファイルの先頭にある場合、ムービー プレーヤーはファイルの先頭のみをロードしただけでもファイルの再生を開始できます。

実際には、最新のブラウザーは、ファイルの末尾にある場合でも、HTTP/1.1 Range ヘッダーを使用してファイルの末尾から moov アトムを取得し、moov アトムを読み込みます。

shouldOptimizeForNetworkUse を YES に設定すると、いくつかの副作用もあります。

  • アトムのオフセットとともにファイルを変更する必要があるため、ムービーの完成には少し時間がかかります。
  • 出力ファイルはロックされ、アクセスできません。これは、finishWriting がファイル全体を変更する必要があるためです (アトムの移動と更新)。NO に設定すると、movieFragmentInterval は出力ビデオ ファイルへの書き込みのフラッシュ間隔を設定し、フラグメントが最終的な形式でファイルにフラッシュされるため、書き込み中にファイルを読み取り可能にします。finishWriting は、すでに書き込まれたフラグメントに触れるのではなく、moov アトムをファイルの末尾に追加するだけで済みます。
于 2013-01-09T19:22:27.537 に答える