1

2 つのラズベリー pi 間で低遅延のオーディオをストリーミングしようとしています。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 は、 jack_netsource から-dnetの単一の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から。

4

1 に答える 1

1

まず、ラズベリー pi で、mmap が有効になっていることを確認します (ここを確認してください)。

jackd が適切にセットアップされたら、これが 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 に答える