2012-09-04 9 views
10

webmまたはogvにリアルタイムでエンコードされたデータをラップし、html5ブラウザに送信したいと考えています。ビデオタグを使用するだけで、HTML5へのリアルタイムストリーミング(webrtcなし)

webmまたはogvでこれを行うことができます。 Mp4は、そのMDATアトムのためにこれを行うことができません。 (1つはリアルタイムでh264とmp3をラップしてラップしてクライアントに送信することはできません) 私のマイクのマイクからウェブカメラとオーディオの入力を供給しているとします。 断片化されたmp4でこれを処理できますが、libsでこれを行うのは面倒です)。

私はこれを行う必要があります。オーディオとビデオを分離して送信したくありません。

私はそれを分離して送信した場合、ビデオでオーディオタグとビデオでオーディオを送信する>(オーディオとビデオがデマルチプレクスされて送信されます) JavaScriptを使用してクライアントブラウザで同期できますか?私はいくつかの例を見ましたが、まだ分かりません。

答えて

2

Evren、

わずかなバッファリングで非常に短い(30ms)ISO-BMFFビデオ/ mp4セグメントを再生することができます。

だからあなたの声明

(1がリアルタイムでH264とmp3をラップし、それをラップし、それをクライアントに送信することはできません)

が出ている HTML5 live streaming

を参照してください。今日の日付。はい、あなたはh264 + AACでそれを行うことができます。

いくつかの実装があります。 Unreal Media Serverをご覧ください。 UnrealのMedia Serverのよくある質問から :http://umediaserver.net/umediaserver/faq.html

がどのように非現実的なHTML5は、ライブMPEG-DASHは異なるストリーミングされますか? Unreal Media Serverは、MPEG-DASHとは異なり、WebブラウザのHTML5 MSE要素へのライブストリーミングにWebSocketプロトコルを使用します。これは、MPEG-DASHごとにHTTPリクエストを介してセグメントをフェッチするよりもはるかに効率的です。また、Unreal Media Serverは最小限の期間(30ミリ秒)のセグメントを送信します。これにより、低速の1秒未満のレイテンシストリーミングが可能になりますが、MPEG-DASHは他のHTTPチャンクベースのライブストリーミングプロトコルと同様に、低遅延のライブストリーミングを提供できません。 HTML5プレーヤーでの待ち時間には、Flashプレーヤーのそれに匹敵することを http://umediaserver.net/umediaserver/demos.html お知らせ:

彼らのデモのWebページには、RTSPのカメラからのライブHTML5フィードを持っています。

+0

に更新してください。これはUnrealの広告のように表示されます。 「そこにはいくつかの実装がありますが、唯一の提案はライセンスを必要とするUnrealからの単一のソリューションです。これは4年前のこれまでのベストよりもはるかに最新の答えなので、いくつかの実装のうちの1つが他の人が構築できるものであることを見てうれしいです。 – JohnMetta

0

あなたはこれを行うことができますか? HTML5はライブストリーミングメカニズムを承認していません。ウェブソケットを使用してリアルタイムでデータをブラウザに送信して、これを行うことができます。しかし、パースロジックを自分で書く必要があり、データがプレーヤーに届くとどのようにデータを供給するのか分かりません。

ビデオタグとオーディオタグの場合:ビデオタグは、オーディオとビデオの両方を持つコンテナファイルを再生できます。したがって、互換性のあるコンテナにコンテンツをラップします。ライブコンテンツが流入し続けると、このビデオファイルにライブストリーミングを書き込むようにブラウザを変更し、ブラウザが要求した各バイトごとにそのデータをストリーミングアウトすると、これを行うことができます。しかし、それは間違いなく些細なことです。

+1

私はwmvファイルを読む必要があります。レンダリング速度でリアルタイムにトランスコードします(私が見ているかのようにファイルに書き込んでいないかのように)VP8にエンコードしてwebmでラップします。ブラウザは、トランスコードされているfile.webmを指すようになります。 リクエストが行われたときに、私はサーバー側で長時間ポーリングするつもりです。 と私はそのHTTPソケット(あなたは何でも、それは "応答"と言うことができます)に書き込むつもりですので、サーバーがwebmファイルをブラウザにプッシュしている一方通行の通信があります。ブラウザはファイルをプログレッシブにダウンロードしていますが、少なくともファイルだとは思っていますが、実際にはwebmでラップされているライブストリームです。 –

+2

Doable。簡単にファイルに直接書き込んで、Webサーバーからファイルを提供するのが簡単です。ターゲットビットレートに設定されているWebサーバーのスロットリングを使用して、「リアルタイム」で配信され、より速くまたは遅く配信されないようにします。トランスコードを開始して部屋を確保してください。うまくいくはずです。スロットルが重要なので、プレイヤーはあなたが製作しているスピード(ターゲットビットレート)より速く引っ張ることができません – av501

10

私は、webm(mp4とoggは少し簡単ですが、同じサーバーから同様の方法で動作するはずですが、ブラウザ間の互換性のために3つのフォーマットをすべて使用する必要があります)のUbuntuで動作するffmpeg/ffserver )。

まず、ソースからfvmpxをビルドしてlibvpxドライバをインストールします(これを持つバージョンを使用していても、今月の最新バージョンでwebmをストリームする必要があります。ヘッダー)。私はこれをUbuntuのサーバーとデスクトップで行いました。this guideは、他のOSの使い方を教えてくれましたcan be found here

適切なバージョンのffmpeg/ffserverを入手したら、ストリーミング用に設定することができます。私の場合、これは次のように行われました。

ビデオキャプチャデバイスの場合:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm 
  • その "-f video4linux2 - 標準NTSC -iは/ dev/video0" 部分は、入力ソースに応じて変更することができる(私はビデオのためのものですキャプチャカード)。

関連ffserver.conf抜粋:

Port 8090 
#BindAddress <server_ip> 
MaxHTTPConnections 2000 
MAXClients 100 
MaxBandwidth 1000000 
CustomLog /var/log/ffserver 
NoDaemon 

<Feed 0.ffm> 
File /tmp/0.ffm 
FileMaxSize 5M 
ACL allow <feeder_ip> 
</Feed> 
<Feed 0_webm.ffm> 
File /tmp/0_webm.ffm 
FileMaxSize 5M 
ACL allow localhost 
</Feed> 

<Stream 0.mpg> 
Feed 0.ffm 
Format mpeg1video 
NoAudio 
VideoFrameRate 25 
VideoBitRate 256 
VideoSize cif 
VideoBufferSize 40 
VideoGopSize 12 
</Stream> 
<Stream 0.webm> 
Feed 0_webm.ffm 
Format webm 
NoAudio 
VideoCodec libvpx 
VideoSize 320x240 
VideoFrameRate 24 
AVOptionVideo flags +global_header 
AVOptionVideo cpu-used 0 
AVOptionVideo qmin 1 
AVOptionVideo qmax 31 
AVOptionVideo quality good 
PreRoll 0 
StartSendOnKey 
VideoBitRate 500K 
</Stream> 

<Stream index.html> 
Format status 
ACL allow <client_low_ip> <client_high_ip> 
</Stream> 
  • 注これは、前述のffmpegのコマンドを実行するfeeder_ipのサーバ用に構成され、そしてSERVER_IPでサーバのサーバはclient_high_ipの一方を介してclient_low_ipするようserver_ipでmpegからwebmへの会話を処理します(下記参照)。

このffmpegのコマンドは、マシン上で実行される以前にSERVER_IPと呼ばれる(それは実際のMPEG処理 - > WEBM変換と異なるフィードにffserverに戻ってそれをフィード):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm 

これらがすべて起動されたら(最初にffserver、次にfeeder_ip ffmpegプロセス、次にserver_ip ffmpegプロセス)、http://:8090/0.webmでライブストリームにアクセスし、httpでステータスを確認する必要があります://:8090/

これは役に立ちます。

+0

私はダイレクトショーでそれを得ました。これは非常に役に立ちます。 –

+0

@EvrenBingøl、もっと情報を提供できますか? – alfadog67

+0

これはしばらくしているので、これは私が覚えていることです。 クライアントは、リアルタイムビデオを表すサーバーからogvファイルを要求します。 送信されているデータは、directXを使用してサーバー上でオンザフライでogvに変換されます。あなたはビデオチャットをしたいと言います。ビデオとオーディオデータをヘッダー(多分どんなタイプのものであれ)でサーバーに送り、directxはそれをogvに変換して受信側に送ります。 Ogvはチャンクを非常にうまく処理します。 –

4

私はStreammサーバーを使用してwebmストリームをクライアントHTML5ビデオタグに中継します。 https://github.com/yomguy/stream-m

本番環境でうまく機能します。 乾杯

EDIT:Icecastのは今も、箱から出してWebMのをストリーミングできることに注意してください。あなたが最初にこの質問をしておりますのでに十分に成熟してきたhttps://www.w3.org/TR/media-source/ メディアソース拡張機能、)

関連する問題