19

はちょうどそれを言う:shouldOptimizeForNetworkUseは実際に何をしますか? <a href="http://developer.apple.com/library/ios/DOCUMENTATION/AVFoundation/Reference/AVAssetWriter_Class/Reference/Reference.html#//apple_ref/occ/instp/AVAssetWriter/shouldOptimizeForNetworkUse">Apple documentation</a>から

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

実際には何が起こっていますか?

答えて

52

shouldOptimizedForNetworkUseがYESに設定されている場合、finishWritingを呼び出すと、ファイルの最後からMP4のmoovアトム(ムービーアトム)がファイルの先頭に移動します。 moov原子には、timescaleやdurationのようなムービーファイルに関する情報が含まれています。 moovには、トラックのような情報、ファイル内のデータオフセットなどが含まれている "亜種"の魔法使いも含まれます。

再生はmoovアトムの情報と、ファイルの先頭にあるファイルの終わりを読み込んだとしても、ムービープレーヤーはファイルの再生を開始できます。

現代のブラウザでは、HTTP/1.1 Rangeヘッダーを使用してファイルの最後からmoov原子を読み込み、moov原子をファイルの最後にロードしてもロードします。 YESにshouldOptimizedForNetworkUseを設定

はまた、いくつかの副作用があります。ファイルは原子のオフセットと一緒に修正しなければならないとして、映画を仕上げ

  • は少し時間がかかります。
  • finishWritingはファイル全体(アトムの移動と更新)を変更する必要があるため、出力ファイルはロックされており、アクセスできません。 NOに設定すると、movieFragmentIntervalは、出力ビデオファイルへの書き込みのためのフラッシュ間隔を設定し、最終的な形式でファイルにフラッシュされるので、書き込み中にファイルを読み込み可能にします。 finishWritingは、すでに書かれたフラグメントに触れるのではなく、ファイルの最後にmoovアトムを追加するだけです。
+0

+1大きな説明 – tidwall

関連する問題