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から。