14

リアルタイムでエンコードされたデータを webm または ogv にラップして、html5 ブラウザーに送信したいと考えています。

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

オーディオとビデオを別々に送信したくないので、これを行う必要があります。

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

4

3 に答える 3

12

webm については、次のように Ubuntu で実行されている ffmpeg/ffserver でこれを行いました (mp4 と ogg は少し簡単で、同じサーバーから同様の方法で動作するはずですが、ブラウザー間の互換性のために 3 つの形式すべてを使用する必要があります)。

まず、ソースから ffmpeg をビルドして libvpx ドライバーを含めます (それを含むバージョンを使用している場合でも、グローバル ヘッダーを含める機能を追加したばかりなので、webm をストリーミングするには最新のもの (今月現在) が必要です)。私はこれを Ubuntu サーバーとデスクトップで行いました。このガイドではその方法を説明しました。他の OS の手順については、こちらを参照してください

適切なバージョンの ffmpeg/ffserver を取得したら、それらをストリーミング用にセットアップできます。私の場合、これは次のように行われました。

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

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
  • その「-f video4linux2 -standard 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>
  • これは、feeder_ip のサーバーが前述の ffmpeg コマンドを実行するように構成されていることに注意してください。server_ip のサーバーは、server_ip で mpeg から webm への会話を処理しながら client_high_ip を介して client_low_ip に移動します (以下に続きます)。

この 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/

お役に立てれば。

于 2013-03-16T15:04:24.827 に答える
4

エヴレン

最初にこの質問をして以来、Media Source Extensions https://www.w3.org/TR/media-source/は十分に成熟しており、非常に短い (30ms) ISO-BMFF ビデオ/mp4 セグメントを再生できるようになりました。少しバッファリング。

HTML5ライブストリーミングを参照

だからあなたの発言

(h264とmp3をリアルタイムでラップしてラップしてクライアントに送信することはできません)

は古くなっています。はい、h264 + AAC で実行できます。

そこにはいくつかの実装があります。Unreal Media Server を見てください。Unreal Media Server FAQ から: http://umediaserver.net/umediaserver/faq.html

Unreal HTML5 ライブ ストリーミングは MPEG-DASH とどう違うのですか? MPEG-DASH とは異なり、Unreal Media Server は、Web ブラウザーの HTML5 MSE 要素へのライブ ストリーミングに WebSocket プロトコルを使用します。これは、MPEG-DASH ごとに HTTP リクエストを介してセグメントをフェッチするよりもはるかに効率的です。また、Unreal Media Server は、最短 30 ミリ秒の最小期間のセグメントを送信します。これにより、1 秒未満の低遅延ストリーミングが可能になりますが、MPEG-DASH は、他の HTTP チャンクベースのライブ ストリーミング プロトコルと同様に、低遅延ライブ ストリーミングを提供できません。

彼らのデモ Web ページには、RTSP カメラからのライブHTML5フィードがあり ます。

于 2017-03-17T20:35:43.530 に答える