現在、単純なアプリケーションのオーディオ遅延を最小限に抑えようとしています:
PC にビデオがあり、ビデオのオーディオを RTP 経由でモバイル クライアントに送信しています。非常によく似たバッファリング アルゴリズムを使用すると、iOS では 90 ミリ秒のレイテンシを達成できますが、Android では恐ろしい ±180 ミリ秒です。
この違いは、Androidでよく知られている遅延の問題に起因していると思います。
ただし、少し読んだ後、次の記事に出くわしました。
一部のデバイスでは、Android 4.1/4.2 以降で低遅延オーディオを利用できます。
Android 用の Pure Data ライブラリである libpdを使用して、低遅延のオーディオを実現できます。
これらの 2 つのステートメントに直接関連する 2 つの質問があります。
Jellybean の新しい低遅延オーディオに関する詳しい情報はどこで入手できますか? これは私が見つけることができるすべてですが、具体的な情報が非常に不足しています。変更は透過的である必要がありますか?それとも、アプリケーションの変更に気付くために実装する必要がある新しいクラス/API 呼び出しはありますか? 私は AudioTrack API を使用していますが、この改善の恩恵を受けるかどうか、またはオーディオ再生のための他のメカニズムを検討する必要があるかどうかさえわかりません。
libpd の使用を検討する必要がありますか? 低レイテンシーを達成する唯一のチャンスのように思えますが、私は常に PD をオーディオ合成ユーティリティと考えてきたので、ネットワーク ストリームからフレームを取得して再生するプロジェクトに本当に適していますか? ? 私は実際に合成を行っていません。私は間違った道をたどっていますか?
追記として、誰かが OpenSL ES について言及する前に、この記事では、OpenSL ES を使用しても遅延の改善は期待できないことを明確にしています。
「OpenSL ES はネイティブ C API であるため、OpenSL ES を呼び出す非 Dalvik アプリケーション スレッドには、ガベージ コレクションの一時停止などの Dalvik 関連のオーバーヘッドはありません。しかし、これ以外に OpenSL ES を使用することによる追加のパフォーマンス上の利点はありません。特に、OpenSL ES を使用しても、プラットフォームが一般的に提供するものよりもオーディオ レイテンシが低くなったり、スケジューリングの優先度が高くなったりすることはありません。」