メディアソース拡張APIを使用してH.264コンテンツをHTML5にライブストリーミングしようとしています。
次の方法は非常にうまく機能します。
ffmpeg -i rtsp://10.50.1.29/media/video1 -vcodec copy -f mp4 -reset_timestamps 1 -movflags frag_keyframe+empty_moov -loglevel quiet out.mp4
そして:mp4box -dash 1000 -frag 1000 -frag-rap out.mp4
MP4Box出力(out_dashinit.mp4
)を取得し、それをWeb Socketsを介して、チャンクごとに、メディアソースAPIにフィードするJavaScriptクライアントに送信できます。
ただし、これはライブコンテンツには適していません。
私が今やろうとしているのは、リアルタイムで可能な限り最小のレイテンシーでそれを行うために、単一のパイプラインを作成することです。 FFmpegを使用すると、出力をout.mp4
ではなくstdout
にリダイレクトして、コンテンツを取得することができます。 MP4Boxをパイプラインに組み合わせることが可能かどうかわかりませんでした。
stdout
など)に出力できますか。また、出力データの準備ができたらいつでもそれを取得して転送できるように、段階的に出力できますか。それをWebクライアントに送信し、本質的に終わりのない破線のMP4を生成します。必要な出力を生成するためにMP4Boxは必要ありませんが、生成されたファイルでボックスを探してコンテンツを自分でチャンク化する必要があります。
基本的には、fMP4
でH264
を生成し、初期化用のmoov
ボックスと、生成するMP4の各フラグメントのmoof+mdat
ボックスをブラウザに送信します。プレーヤーをJavaScriptでコーディングする必要があります。おそらく、標準のDASHプレーヤーを使用することはできません。
正しいフラグメント化されたMP4を生成するには、これをffmpegに渡す必要があります:-movflags empty_moov+omit_tfhd_offset+frag_keyframe+default_base_moof
。
入手可能な最新バージョンを使用してください。
私があなたの解決策を理解している限り、あなたはストリーミングではなく、単一のMP4ファイルを徐々にダウンロードしています。私はそれを正しく理解していますか?
私は最近、RTPデータソースから実際のDASHライブストリーミングを行うために RTP2DASH プロジェクトを開始しました。それはまだ非常に「アルファ」ですが、単純なユースケースに簡単に採用できるはずです。