私はオンラインテレビサービスに取り組んでいます。目標の 1 つは、追加のブラウザー プラグイン (Flash を除く) なしでビデオを再生することです。
MP4 を使用することにしました。これは、HTML5 ブラウザーの大部分と Flash (フォールバック用) でサポートされているためです。ビデオは、FFMpeg によってサーバー上の ASF からトランスコードされます。
しかし、MP4 には長さを指定する必要があるメタデータ用の moov アトムがあるため、ライブ ストリーミングできないことがわかりました。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 回トランスコードする必要があります。