无法让 JACK 音频/网络插孔通过 LAN 工作

Posted

技术标签:

【中文标题】无法让 JACK 音频/网络插孔通过 LAN 工作【英文标题】:Cannot get JACK Audio/Netjack working over LAN 【发布时间】:2016-07-16 10:33:04 【问题描述】:

我正在尝试在 2 个树莓派之间传输低延迟音频。 gstreamer 和 ffmpeg 都对我造成了 2 秒以上的延迟。

我在本地玩过 Jack Audio,在单个 pi 上似乎很有希望。我可以在本地将麦克风输入路由到扬声器,这几乎是瞬时的。

但是,我在使用 Netjack 在设备之间进行路由时遇到了麻烦。

# ON SERVER
jackd -P70 -p16 -t2000 -dalsa -dhw:1 -p128 -n3 -r44100 -s 

# ON CLIENT
jackd -v -R -P70 -dnetone -i1 -o1 -I0 -O0  -r44100 -p128 -n3

# ON SERVER
jack_netsource -H < ip address of client >
jack_lsp # list availible connection ports

>system:capture_1
>system:playback_1
>system:playback_2
>netjack:capture_1
>netjack:capture_2
>netjack:capture_3
>netjack:playback_1
>netjack:playback_2
>netjack:playback_3

jack_connect system:capture_1 system:playback_1 # this works
jack_connect system:capture_1 netjack:playback_1 # this doesn't work :(

我从这里http://wiki.linuxaudio.org/wiki/raspberrypi#using_jack 提取的大多数启动选项。老实说,我真的不知道他们在做什么。

客户端jackd输出显示如下消息

Jack: data not valid
Jack: data not valid
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 6
Jack: JackRequest::Notification
Jack: JackEngine::ClientNotify: no callback for notification = 3
Jack: JackEngine::ClientNotify: no callback for notification = 3
netxruns... duration: 139ms
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 6
Jack: JackRequest::Notification
Jack: JackEngine::ClientNotify: no callback for notification = 3
Jack: JackEngine::ClientNotify: no callback for notification = 3

服务器 jack_netsource 输出看起来像

current latency 114
current latency 20
current latency 27
current latency 29
current latency 48
current latency 23
current latency 33
current latency 28
current latency 41
current latency 84
current latency 44

服务器jackd输出看起来像

JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackEngine::XRun: client = netjack was not finished, state = Triggered
JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackAudioDriver::ProcessGraphAsyncMaster: Process error
JackEngine::XRun: client = netjack was not finished, state = Triggered
JackEngine::XRun: client = netjack was not finished, state = Triggered

我相信-dnetone 标志表示使用 Netjack2。 Netjack 1,我尝试使用 -dnet 标志导致来自 jack_netsource 的单个 Not Connected 消息和:

Jack: CatchHost fd = 5 err = Resource temporarily unavailable
Jack: CatchHost fd = 5 err = Resource temporarily unavailable
Jack: CatchHost fd = 5 err = Resource temporarily unavailable
Jack: CatchHost fd = 5 err = Resource temporarily unavailable
Jack: CatchHost fd = 5 err = Resource temporarily unavailable
Jack: JackSocketServerChannel::Execute : fPollTable i = 1 fd = 6

来自客户端jackd。

【问题讨论】:

你有没有得到这个工作?我想试试这个远程在线排练的解决方案。 我认为 Jack 对网络延迟非常敏感。我认为插孔不适用于远程或无线设置 【参考方案1】:

首先在树莓派上,确保您已启用 mmap (check here)。

一旦 jackd 设置正确,这是在主从之间连接 jackd2 的基本方法:

在主...

jackd -d alsa 
jack_load netmanager

在奴隶上……

jackd -r -d net -a ipaddress

此时应该可以工作了,不要忘记将网络插孔的端口连接到主设备上的系统输入和输出。您可以使用 JackPortMonitor 或 JackPortMonitorGui 为您在主设备上自动连接这些。在这种情况下,主启动看起来像这样: jackd -d alsa jack_load 网络管理器 JackPortMonitorGui

【讨论】:

以上是关于无法让 JACK 音频/网络插孔通过 LAN 工作的主要内容,如果未能解决你的问题,请参考以下文章

将 Jack 与 Web 音频上下文连接

jack_connect MIDI (Alsa) 端口

插孔音频连接套件 + Windows 音频

将声音输出到声卡的多个通道

如何更改插孔音频中的采样率?

如何使 nrepl-ritz-jack-in 通过 TRAMP / Emacs 远程工作