H.264ビデオがMP4コンテナーよりFLVコンテナーの方がはるかに高速なのはなぜですか?


9

チューブサイトを開発していますが、現在H.264形式に問題があります。YouTubeが彼らの高解像度ビデオをMP4コンテナーに入れていることに気付いたので、論理的には同じことをしました。

次に、mod_h264_streamingストリーミングとタイムラインスクラブが機能するようにlighttpd をインストールしました。

問題は、大きなファイル(やや高い解像度で500 MBを超える)がバッファリングを開始するまでに永遠にかかることです(私は、Flowplayerや他のFlashプレーヤーが最初にメタデータをダウンロードする必要があると読みました)。MP4Boxを使用してxmovアトムをファイルの先頭に移動しました(Qt QuickStartも試してみました)が、役に立ちませんでした。

次に、オーディオトラックをインターリーブする必要があると読みました。これによる変化はありませんでした。ビデオはまだ低速でした。

そのため、まったく同じH.264ムービーをFLVコンテナに入れてみたところ、再生バッファリングはほぼ瞬時に開始しました—速度低下はありませんでした。

だから私はここで何が欠けていますか?mod_264_streaminglighttpdが組み込まれた通常のFLVコンテナーよりも、モジュールが非常に遅いように見えるMP4コンテナーを選択するのはなぜmod_flv_streamingですか?明らかに、多くのWebサイトがMP4コンテナーを選択していますが、その理由がわかりません。

余談ですが、HTML5 <video>タグを使用して同じH.264 MP4ムービーを試しましたが、スクラブは非常に高速でした。lighttpdのログファイルを調べvideo.mp4?start=234たところ、タイムラインがスクラブされるたびにFlashプレーヤーが追加されるのに気づきましたが、ネイティブHTML5 <video>タグを使用するブラウザーはそのようなことをしません。これはFlashのある種の制限ですか?FlashストリーミングがHTML5ストリーミングほど高速にできないのはなぜですか?

回答:


4

TL; DR:MP4は、ビデオサイトがFLVがサポートするよりも多くのメタデータをビデオに保存する場合、またはFLVがサポートしないオーディオコーデックを使用する場合に使用されます。FLVのシンプルさとストリーミング向けの設計は、MP4を使用する正当な理由がない場合に適しています。

フラッシュのタイムラインスクラブについては、フラッシュをコーディングしたことがないので、なぜそれを行うのかわかりませんが、それが使用するノブ、またはファイルをシークするためにアドビのストリーミングサーバーで特に機能するものである可能性があります。また、厄介なユーザーが自分のディスクにファイルを保持しないようにする方法としても機能します。


あなたがすでに知っているいくつかのもの:

FLVMP4(別名isomedia)コンテナの間には基本的な違いがあります。FLVはAdobeによって最初からストリーミングコンテナーとして考案されたもので、非常にシンプルです。ビデオパケット、オーディオパケット、ビデオパケットの順に送信するだけですが、サポートするコーデックはごくわずかで、ミリ秒単位のタイムスタンプ以外のメタデータはサポートしていません。MP4固有の機能が必要でない限り、FLVで問題なく実行できます。

一方、ISOメディアはAppleのMOVコンテナに基づいています。アトムで区切られておりmoov他のアトムを読み取る前にデコードする必要がある特定のアトムがあります。MP4で発生している問題は、moovアトムがファイルの終わりに書き込まれるためです。これは、エンコードプログラムで行う方がはるかに簡単です。qtfaststartなどのツールがありmoov、ファイルの先頭にアトムを配置するために必要な変更を行います。したがって、ファイルは、開始前に完全にダウンロードされる必要はなく、データがあるとすぐに再生を開始します。


0

movコンテナーを使用する場合、モジュールをインストールしたり、flvコンテナーに配置してモジュールを使用したりする必要なく、ボックスからストリーミングします。ただ私の考え。movを使用して適切なMIMEタイプを追加します-完了。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.