据我了解,这会以 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)不支持该功能。
我认为使用UDP本身并不一定能解决延迟问题。这个答案只是试图解释为什么你的 UDP 尝试根本不起作用。
UDP是无连接协议,没有握手。这意味着您的
netcat
“监听”(netcat -l
) 不知道将数据发送到哪里,直到它从您的netcat
“连接”(或其他任何东西)接收到数据。不过,您的netcat
“连接”本身不会发送任何内容。发送一些东西,任何来自
netcat
“连接”的东西。在不更改命令的情况下,您可以通过键入某些内容(在运行它的终端中)并点击Enter;来完成此操作。尝试一下。或者,将命令和管道修改echo foo
为netcat
,以便它foo
无需等待您的任何输入即可发送:netcat
将打印“正在听”foo
。坦率地说,soleecho
而不是就echo foo
足够了,它会打印一个换行符,该换行符将进入“监听”状态netcat
,从而注意到它来自哪里。这样,“监听”
netcat
将了解将数据发送到哪里,并且它将开始执行此操作。对于 TCP,则不存在这样的问题,因为在向任何方向发送任何实际数据之前,侦听端会在握手期间了解连接端的地址和端口。