4

ヘッドレス Ubuntu サーバー (Maverick 10.10 を実行) に接続された Web カメラからビデオとオーディオをストリーミングしようとしています。WebM 形式 (VP8 ビデオ + OGG) でストリーミングできるようにしたい。帯域幅は限られているため、ストリームは 1Mbps 未満である必要があります。

FFmpeg を使ってみました。次の方法で、Web カメラから WebM ビデオを録画できます。

ffmpeg -s 640x360 \
-f video4linux2 -i /dev/video0 -isync -vcodec libvpx -vb 768000 -r 10 -vsync 1 \
-f alsa -ac 1 -i hw:1,0 -acodec libvorbis -ab 32000 -ar 11025 \
-f webm /var/www/telemed/test.webm 

ただし、あらゆる種類の vsync オプションと async オプションを試してみたにもかかわらず、オーディオの同期が取れなくなったり、Benny Hill スタイルの早送りビデオと一致する高速オーディオを使用したりすることができます。また、これを ffserver で実際に動作させることもできませんでした (test.webm パスとファイル名を関連するフィード ファイル名に置き換えることにより)。

目的は、オープン ソース コンポーネントのみを使用して、狭い帯域幅で、最新のブラウザーで表示可能なライブのオーディオ + ビデオ フィードを取得することです。(その MP3 形式の法的チャフはありません)

したがって、私の質問は次のとおりです。Linux経由で同期オーディオを使用してWebカメラからWebMをストリーミングするにはどうすればよいですか? どのようなソフトウェアを使用していますか?

FFmpeg 経由で同期オーディオを使用して Web カメラから webm をエンコードすることに成功しましたか? もしそうなら、どのコマンドを発行しましたか?

FFmpeg + FFserver に固執する価値はありますか、それとも他のより適切なコマンドライン ツールがありますか (たとえば、エンコーディング用に構築されていないように見える VLC)?

Gstreamer + Flumotion のようなものは、コマンド ラインから構成できますか? もしそうなら、flumotion docはコマンドラインの詳細がかなり少ないので、コマンドラインのドキュメントはどこにありますか?

前もって感謝します!

4

2 に答える 2

0

最近設定したのですが、ちょっと面倒です。これが私がしなければならなかったことです:

まず、ソースから 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:07:40.440 に答える
0

Flumotion を試してみることを検討してください。Flumotion-admin を使用してウェブカメラからキャプチャする webm パイプラインを簡単にセットアップし、バックグラウンドで実行できます。

于 2011-10-30T18:45:00.787 に答える