通过 UDP 通过网络发送 (alsa) 音频

通过 UDP 通过网络发送 (alsa) 音频

据我了解,这会以 wav 格式将单声道记录 300 秒到名为“mic_rec”的命名管道

rec arecord -D hw:4,0 -d 300 -f cd -t wav -c 1 mic_rec

这会将在命名管道“mic_rec”中找到的任何内容通过 tcp 发送到端口 8111

cat mic_rec |netcat -l -p 8111

UDP协议

cat mic_rec |netcat -u -l -p 8111

使用 TCP 接收(有效):

netcat 192.168.2.29 8111 |vlc -

使用 UDP 接收(不):

netcat -u 192.168.2.29 8111 |vlc -

这(使用 TCP)可以工作,但有大约 2 秒的延迟。所以我的第一个想法就是使用 -u 参数切换到 UDP。但这似乎不起作用,我在接收端听不到任何声音。我错过了什么?

Pulseaudio 似乎有一种更简单的方法来做到这一点。但据我所知,我使用的设备(NanoPi Neo 1.4)不支持该功能。

答案1

我认为使用UDP不一定通过它自己解决延迟问题。这个答案只是试图解释为什么你的 UDP 尝试根本不起作用。

UDP是无连接协议,没有握手。这意味着您的netcat“监听”( netcat -l) 不知道将数据发送到哪里,直到netcat它从你的(或其他什么)“连接”接收一些东西。不过,您的netcat“连接”本身不会发送任何内容。

发送一些东西,任何来自netcat“连接”的东西。在不更改命令的情况下,您可以通过键入某些内容(在运行它的终端中)并点击Enter;来完成此操作。尝试一下。或者,将命令和管道修改echo foonetcat,以便它foo无需等待您的任何输入即可发送:

echo foo | netcat -u 192.168.2.29 8111 | vlc -

netcat将打印“正在听” foo。坦率地说,soleecho而不是就echo foo足够了,它会打印一个换行符,该换行符将进入“监听”状态,netcat从而注意到它来自哪里。

这样,“监听”netcat将了解将数据发送到哪里,并且它将开始执行此操作。

对于 TCP,则不存在这样的问题,因为在向任何方向发送任何实际数据之前,侦听端会在握手期间了解连接端的地址和端口。

相关内容