2017-11-19 15 views
0

MP4をストリーミングしようとしています。セグメントなしでHTTP経由のMP4ストリーム

MP3をストリーミングすると、RTMPやIceCast経由で何かにストリーミングしたり、HTTP経由で見ることができます(ただしHLSはありません)。あなたのライブMP3ファイルは、http://example.com/live.mp3のようなものです。ここでは、ライブで生成されたMP3を聴くことができます。

今私はMP4でsimularを欲しいです。 私はMP4(AVC/H.264)を(RTMP経由で)サーバーにストリームし、この場所のライブストリームを受信したい:http://example.com/live.mp4。 私はHLS(M3U8ファイルとTSファイル)を使いたくありません。

これは可能ですか?

私はそれが既にFastStart/WebOptimised MP4に変換した後、既に生成されたMP4で動作することを知っていますが、私はLIVE mp4が必要です。

+0

動画は音が含まれていますか?サイレント(例えば、CCTVセキュリティカメラから)の場合、そのための解決策があるかもしれません。 –

+0

ビデオに音声があります。 –

+0

@ VC.One私が尋ねることができる場合、あなたの解決策はサウンドなしであろう – Harry

答えて

3

まず、リンゴとバナナを比較します。mp3はコーデックで、mp4はコンテナです。

mp4ファイルを「ストリーム」するだけであれば、デコーダーには何を見ているかの手がかりを与えずにバイナリデータをストリームするだけです。それはHLSとCoが入っているところです。

あなたが言及しましたが、mp3をストリームするためには、Icecastやrtmp Serverのような追加が必要です。 AVC/AACをストリーミングする場合も同じです。 DASH、HLS、rtmp、rtsp、mpeg2トランスポートストリームを含むudpをコンテナとして使用し、ストリームが準備完了です。 (ほとんどのものは何とかmpeg2tsに基づいています)

問題はクライアント側の要件です。 HTML5と互換性がありクロスプラットフォームであることが気に入っている場合、現在は基本的にライブストリーミングにのみHLSまたはDASHを使用できます。

ReceiverアプリケーションがFlashまたはHTML5と異なる場合、追加のStreaming Serverの使用を暗示しない最も簡単な方法の1つは、mpeg2トランスポートストリームのUDPストリーミングを使用することです。あなたは異なる技術がどのように動作するかを考えるかもしれませんので、私は非常に単純化した図面を追加します

Streaming methods

がさらに上がってくる、常に新しい技術は、例えば、あります最近のアプリケーションでは、HTML5ブラウザへのライブストリーミング用にWebRTCを使用しています。

理論上、.mp4バイナリデータをストリームすることはできますが、クライアントはそのために非常によく準備されている必要があります。クライアントがファイルの開始時にmoov Atomを受け取らない場合、それはもはや実際にはmp4ストリームを受信するのではなく、バイナリAVC/AACストリームを受信します。これは多かれ少なかれ、MPEG DASHの仕組みです。デコードのために必要な情報を、特定の短期間のバイナリファイルチャンクと別のファイルとして保存します。

ここで私はちょうどそれの上にステップとして、[EDIT]、関連ffmpegのコマンド:

ffmpeg -i D:\input.mxf -s 640x360 -hls_list_size 30 -hls_flags delete_segments+append_list+omit_endlist -hls_list_size 1 -f hls c:\xampp\htdocs\out.m3u8 

その後、私はダウンロードして自分のウェブサーバのルートにこれを抽出:https://github.com/video-dev/hls.js

そこから私は、デモページを開設hls.js:http://localhost/hls/demo/index.htmlから - そしてそこに私のm3u8 "http://localhost/out.m3u8"のURLを入力して、私のライブビデオをうまく再生しました。私のブラウザ;-)

ソースに任意のプラグインをインストールせず:Change ffmpeg input on the fly

+0

それは正しく、私はライブストリーミングのためのFastStart MP4を使用することはできませんが、私はそれを分割する必要があります。 –

+0

はい、ファイルチャンクは常にそうです。 HLSの場合と同様に、単一のチャンクのサイズは、クライアントが「ライブ」ストリームにジャンプできる「オフセット」を定義します。また、クライアントは、mp4チャンクの "シームレスな"再生の準備をする必要があります... – Harry

+0

私は可能性があると思った、サーバーは、 'moov'でMP4ヘッダを生成し、その後、すべてのライブストリーミングサンプルとAvcSampleは 'mdat'にありますが、それが不可能な場合は、HLSまたはMPEG-DASHを使用する必要があります。 HTML5ビデオタグでサポートされているかどうかはわかりません。 –

関連する問題