2

Android システムの C++ 側でカスタム ファイル形式からオーディオをストリーミングできる必要があります。カスタム メディア プレーヤーの移植に取り組んでおり、カスタム ファイルを開いてそこからオーディオをストリーミングできるようにする必要があります。プレーヤー全体を Java に移植することはパフォーマンスの観点からは実現可能ではなく、JNI インターフェイスを介してオーディオ バッファーを移動するのは遅すぎて適切なフレーム レートを維持できないため、これは重要です。OpenGL ES を介して NDK 側でビデオを処理できますが、これを実現する方法がわかりません。

4

2 に答える 2

2

JNI を介してオーディオを渡し、実際にどのように動作するかを確認することをお勧めします。JNI は実際には (正しく実装されていれば) 非常に効率的であり、必要なものに対して十分に高速であっても驚かないことがわかりました。

実装に関する注意点として、オーディオを渡すたびにJavaにバッファを作成させないでください。単にJavaで(またはJNIを介して)バッファを作成し、更新が必要になるたびにmemcpyを使用してください。

また、Android のオーディオ クラスはすべて現在 C++ で記述されており、JNI を介して実行されることに注意してください。一方向に進むのに十分な速さである場合 (私は現在、問題なく Java から AudioTrack に 0.5 MB を超えるオーディオ データを送信できるゲームに取り組んでいます)、おそらくそれほど悪くはありません。基本的に同じ操作として、もう一方に進みます。つまり、バッファのロック、書き込み、オーディオへのロック解除、およびオーディオクラス内でのバッファのロック、読み取り、ロック解除です。

于 2010-09-10T16:34:29.577 に答える
1

現在、NDK はオーディオ フレームの再生をサポートしていません。これを実現するには、Java AudioTrack API を使用する必要があります。

于 2010-03-07T15:07:00.667 に答える