1

我正在尝试在 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标志导致Not Connected来自 jack_netsource 的一条消息,并且:

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。

4

1 回答 1

1

首先在树莓派上,确保你启用了 mmap(检查这里)。

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

在主...

jackd -d alsa 
jack_load netmanager

在奴隶...

jackd -r -d net -a ipaddress

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

于 2016-09-19T19:41:34.147 回答