我目前正在玩一个 AudioOverIP 项目,想知道你是否可以帮助我。 我有一个 LAN,带有一个音频源(Dante/AES67-RTP-Stream),我想将其分发到多个带有音频输出(例如耳机插孔)的接收器(SBC(例如 RaspberryPi)):
PC-->Audio-USB-Dongle-->AES67/RTP-Multicast-Stream-->LAN-Network-Switch-->RPI (Gstreamer --> AudioJack)
我目前使用 Gstreamer 作为管道:
gst-launch-1.0 -v udpsrc uri=udp://239.69.xxx.xx:5004 caps="application/x-rtp,channels=(int)2,format=(string)S16LE,media=(string)audio,payload=(int)96,clock-rate=(int)48000,encoding-name=(string)L24" ! rtpL24depay ! audioconvert ! alsasink device=hw:0,0
一切正常,但如果我在 PC 上观看视频并收听 RPI 的音频,我会出现一些延迟(~200-300 毫秒),因此我的问题是:
rtpjitterbuffer
或类似内容无助于减少延迟?廉价的解决方法:将视频延迟 200 毫秒,例如使用 VLC。
alsasink
缓冲区减少延迟rtpjitterbuffer
将 增加更多延迟通过减少
alsasink
缓冲区,此管道显示 40 毫秒的往返延迟:
gst-launch-1.0 udpsrc address=239.69.x.x port=5004 multicast-iface=eth0 !\
application/x-rtp, clock-rate=48000, channels=2 !\
rtpL24depay !\
audioconvert ! audio/x-raw,format=S24LE,channels=1 !\
alsasink device=hw:CARD=Loopback,DEV=0 buffer-time=5000 latency-time=500 sync=false
我只调整了alsasink部分。运行
gst-inspect alsasink
显示 buffer-time 默认为 200ms。在看到音频伪影之前,我能够将其减少到 5 毫秒。减少它时,请确保将latency-time(“写入的最小数据量”)调整为比buffer-time更小的值。还必须添加 sync=false 来消除一些警告。
我对管道进行了测量。必须将 Audacity 延迟补偿设置为等于 Audacity 缓冲区。您看到一个小工件,可能是由于非实时操作系统造成的。
Ubuntu-PC -> DanteAVIO USB-C -> Cat5e -> Gstreamer
如果您的设备具有与 NXP i.MX8 相当的规格,那么 Dante/AES67/RTP 延迟绝对有可能低于 50 毫秒。
如果您的目标是:“将低延迟 AES67 流传输到 RPi”,我建议您查看适用于 Linux 的 Ravenna 实现。 Ravenna 与 Dante “相似”,但更符合 AES67。 Ravenna 和 AES67 使用 RTP 的方式完全相同。另外,pipewire 最近支持 AES67(我没有测试)。 我知道这些可行的选择:
Merging Technologies 提供“
数据包时间:处理数据包中的样品的时间,约。 1毫秒。
设置为 200ms。 数据包时间应为 1ms,因为 Dante 使用 AES67 强制配置文件(48 kHz,48 个样本/数据包)。我假设您的发件人正确处理了此问题,但我无法判断。
在网络上,至少应使用千兆交换机和 Cat 5e 电缆。 请务必遵循
建议进行开关和配置(特别是禁用EEE)。
如果发送方和接收方的时钟同步,请在两者上运行 tcpdump 或 Wireshark,以更好地估计网络延迟。
按端口过滤有效负载是最简单的,例如RTP:port 5004 or port 9875
。在捕获中很容易发现取消静音/静音 (
latency = T_send - T_recv
)。RPi 低延迟音频似乎可能。 尽管如此,您仍然可以测量 RPi 上 ADC/DAC 的速度。 实时优化你的 Linux 可以让你进一步减少 alsa 缓冲区。 4. Gstreamer Rtpjitterbuffer
rtpjitterbuffer
。它的
docs谈论“重传”。 AES67 标准不包括有效负载的重传。 此外,rtpjitterbuffer 元素添加了另一个 200 个数据包的缓冲区,即 1 毫秒数据包时间时的 200 毫秒。 专业音频+视频