MP4によるライブストリーミング 質問する

MP4によるライブストリーミング 質問する

私はオンライン TV サービスに取り組んでいます。目標の 1 つは、追加のブラウザ プラグイン (Flash を除く) なしでビデオを再生できるようにすることです。

私は、ほとんどの HTML5 ブラウザーと Flash (フォールバック用) でサポートされているため、MP4 を使用することにしました。ビデオは、FFMpeg によってサーバー上の ASF からトランスコードされます。

しかし、長さを指定する必要があるメタデータ用の moov アトムがあるため、MP4 はライブ ストリーミングできないことがわかりました。FFMpeg は moov をファイルの末尾に配置するため、mp4 を stdout に直接ストリーミングできません。(MP4 のライブ トランスコーディングとストリーミングは Android では機能しますが、Flash プレーヤーでは NetStream.Play.FileStructureInvalid エラーで失敗します。

もちろん、 MPEG-TS は存在しますが、 HTML5 ではサポートされていません<video>

私が考えたのは、ストリームをリアルタイムで MP4 にトランスコードし、それに対する新しい HTTP 要求ごとに、最初にビデオの長さとして非常に長い数値を指定する moov を送信し、次に MP4 ファイルの残りの部分の送信を開始する方法です。

このようにストリーミングに MP4 を使用することは可能ですか?

いくつか調査して av501 さんの回答を読んだ結果、動作させるにはフレームのサイズを知る必要があることがわかりました。

mp4 ファイルを小さな部分に分割してストリーミングすることはできますか?

もちろん、別のコンテナ/フォーマットに切り替えることもできますが、Flash と HTML5 の両方と互換性のあるフォーマットは mp4/h264 のみなので、両方をサポートする必要がある場合は、トランスコードを 2 回行う必要があります。

ベストアンサー1

断片化された MP4 を使用することもできます。断片化された MP4 ファイルは次のように構築されます。

moov [moof mdat]+

moov ボックスには、トラックに関する基本情報 (トラックの数、種類、コーデックの初期化など) のみが含まれますが、トラック内のサンプルに関する情報は含まれません。サンプルの場所とサンプル サイズに関する情報は moof ボックスにあります。各 moof ボックスの後には、前の moof ボックスで説明されているサンプルを含む mdat が続きます。通常、(moof、mdat) ペアの長さは、約 2、4、または 8 秒に選択されます (これに関する仕様はありませんが、これらの値はほとんどのユースケースで妥当であると思われます)。

これは、終わりのない MP4 ストリームを構築する方法です。

おすすめ記事