使用FFMPEG的实时音频流


14

我尝试使用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%,两秒钟后我的声音很差,什么也没有。。。在Wireshark中,我看到主板正在连续发送帧。

有人有降低CPU使用率的想法吗?


您可能需要研究超频和不同的内存分配。如果您选择编解码器,则可以通过切换实现一些改进。您可能还想研究流的压缩-尽管某些增益可能为零-您在传输时间中获得的任何收益都可能在压缩中丢失。
史蒂夫·罗比拉德

您是否尝试过首先写入本地文件?我会尝试逐步进行:1)实时录制到wave文件,2)实时录制到mp3文件3)通过网络流式传输内容
pixelistik,2012年

现在不行。手动完成所有这些步骤而不是全自动ffmpeg似乎很复杂;-)
hotips 2012年

你在录音什么
亚历克斯·张伯伦

1
我正在尝试制作以太网婴儿电话
hotips,2012年

Answers:


7

为了回答您的特定问题,您可以通过将arecord传递到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上,它从〜95%的CPU变为〜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硬件:1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.1.116:1234但是ffmpeg在几秒钟后崩溃:[alsa @ [0x7a1510] ALSA缓冲区xrun。还有其他想法吗?
2012年

我测试了ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234,但声音非常糟糕...滞后时间约为6秒。有更好的解决方案吗?
2012年

1
@ si2w我认为mp3的32k有点笑话。要么这样做,要么尝试使用其他编解码器。也许是专为电话设计的G2xx系列之一
Alex Chamberlain

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编码占用了90%以上的cpu功率,而跟不上音频-因此我将其更改为mp2编码。这使用了大约15-18%的CPU(测得为vi top),并顺利地流到我LAN上的VLC。这将成为一个完美的婴儿监视器,或者其他任何东西。仅存在一秒钟左右的延迟,这是VLC端的缓冲。

注意: ip地址是多播地址([224-239] .xyz)。您不必将其瞄准局域网中的特定网络设备,并且宽带路由器将流量保持在本地(默认情况下)。


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的版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.