FFMPEGを使用したライブオーディオストリーム


13

ffmpeg外部USBマイクを使用してライブオーディオをストリーミングしようとしています。このほぼチュートリアルに従った

私はいくつかの手順を調整する必要がありましたが、最終的に、このコマンドを使用してラップトップのストリームを受信することができました:

ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234

CPUはほぼ100%で、2秒以内に悪い音がしますが、何も聞こえません... Wiresharkでは、ボードがフレームを継続的に送信していることがわかります。

誰かがCPU使用率を下げるアイデアを持っていますか?


オーバークロックと別のメモリ分割を検討することもできます。コーデックを選択できる場合は、切り替えることでいくつかの改善を達成できる場合があります。また、ストリームの圧縮を調べることもできます-これはゼロのゲインかもしれませんが-転送時間で得られるものはすべて圧縮で失われる可能性があります。
スティーブ

最初にローカルファイルへの書き込みを試みましたか?1)Waveファイルへのリアルタイムレコーディング、2)mp3ファイルへのリアルタイムレコーディング、3)ネットワークを介したストリーミングストリーミング
pixelistik

現時点ではない。全自動ffmpegではなく、これらすべての手順を手動で行うのは複雑なようです;-)
hotips

何を録音していますか?
アレックスチェンバレン

1
私はイーサネットbabyphoneを作成しようとしている
hotips

回答:


7

特定の質問に答えるには、レコードをffmpegにパイプすることでCPUを削減できます。

arecord -f cd -D plughw:1,0 | ffmpeg -i - -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://234.5.5.5:1234

plughw:1,0を特定のサウンドカードに置き換える必要があります。詳細については、arecord -lを参照してください。Rasp Piでは、CPUが95%から35%になりました。


6

ALSA入力

別の方法として、ALSAを使用する方法があります。上記と同様のコマンドは

ffmpeg -ac 1 -f alsa -i hw:0,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://localhost:1234

これがCPU使用率にどのように影響するかわかりません。


私が試した:ffmpeg -ac 1 -f alsa -i hw:1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.1.116:1234しかし、ffmpegは数秒後にクラッシュします:[alsa @ 0x7a1510] ALSAバッファxrun。他のアイデアはありますか?
hotips

ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234をテストしましたが、音が非常に悪いです...遅れは約6秒です。より良い解決策があると思いますか?
hotips

1
@ si2w mp3の32kはちょっとした冗談だと思います。それか、別のコーデックを試してください。多分電話用に設計されたG2xxシリーズの1つ
アレックスチェンバレン

3

これは動作し、CPU使用量を削減します。

ffmpeg -f alsa -i default:CARD=U0x46d0x819 -acodec mp2 -ac 1 -re -f rtp rtp://234.5.5.5:1234 2> /tmp/mylog.log &

必ずdefault:CARD = U0x46d0x819をマイクID(arecord -lから取得)に置き換えるか、cad指定-i hw:0,0(またはデバイス)に置き換えてください。

私は同様の問題を抱えていました-mp3エンコーディングはCPUパワーの90%以上を占め、オーディオに追いつかなかったので、mp2エンコーディングに変更しました。これはCPUの約15〜18%(viで測定top)を使用し、LAN上のVLCにスムーズにストリーミングします。それは完璧なベビーモニター、または何でも作るでしょう。VLC終了時のバッファリングである、わずか1秒程度の遅延があります。

注: IPアドレスはマルチキャストアドレス([224-239] .xyz)です。LAN上の特定のネットワークデバイスに向ける必要はありません。ブロードバンドルーターはトラフィックをローカルに保ちます(デフォルト)。


2

入力デバイスのオーディオサンプルレートを減らし(-ar 8000 -f alsa)、コーデックのオーディオビットレートを128k(-b:a 128k)に設定することにより、CPUの負荷を大幅に減らすことができます。また、皮肉なことにチャンネル数(-ac 1)を減らすとCPUの負荷が増加するように見えたため、このコマンドはかなり低いCPUで実行されることがわかりました。

ffmpeg -ar 8000 -f alsa -i hw:0 -acodec mp2 -b:a 128k -f rtp rtp://other:4444

使用しようとしているキャプチャハードウェアの機能と、ffmpeg / avconvのバージョンにも依存することを覚えておく必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.