Android从C+播放原始音频+;一边 我需要能够在Android系统的C++侧从自定义文件格式流音频。我正在移植一个自定义媒体播放器,需要能够打开一个自定义文件和流音频从它。这一点很重要,因为我认为从性能的角度来看,将整个播放器移植到JAVA是不可行的,而通过JNI接口移动音频缓冲区,我认为速度太慢,无法保持合适的帧速率。我可以通过OpenGL ES处理NDK端的视频,但音频我不知道如何实现这一点

Android从C+播放原始音频+;一边 我需要能够在Android系统的C++侧从自定义文件格式流音频。我正在移植一个自定义媒体播放器,需要能够打开一个自定义文件和流音频从它。这一点很重要,因为我认为从性能的角度来看,将整个播放器移植到JAVA是不可行的,而通过JNI接口移动音频缓冲区,我认为速度太慢,无法保持合适的帧速率。我可以通过OpenGL ES处理NDK端的视频,但音频我不知道如何实现这一点,c++,android,video,audio,android-ndk,C++,Android,Video,Audio,Android Ndk,NDK当前不支持播放音频帧。您必须使用java AudioTrack API来实现这一点。我建议您通过JNI传递音频,并查看其实际执行情况。我发现JNI实际上非常高效(如果实现正确的话),如果它足够快,满足您的需要,我也不会感到惊讶 只是一个关于实现的说明,不要让Java在每次您想要传递音频时都创建一个缓冲区,只需在Java中创建一个缓冲区(或通过JNI),然后在每次需要更新时将memcpy放入其中 也应该注意Android上的所有音频类目前都是用C++编写的,并且通过JNI运行。如果它的速度足

NDK当前不支持播放音频帧。您必须使用java AudioTrack API来实现这一点。

我建议您通过JNI传递音频,并查看其实际执行情况。我发现JNI实际上非常高效(如果实现正确的话),如果它足够快,满足您的需要,我也不会感到惊讶

只是一个关于实现的说明,不要让Java在每次您想要传递音频时都创建一个缓冲区,只需在Java中创建一个缓冲区(或通过JNI),然后在每次需要更新时将memcpy放入其中

也应该注意Android上的所有音频类目前都是用C++编写的,并且通过JNI运行。如果它的速度足够快,可以走一条路(我目前正在开发一款游戏,我们可以在一些帧上从Java向AudioTrack提交超过0.5mb的音频数据,而没有问题),那么走另一条路可能不会太糟糕,因为它的操作基本相同,即锁定缓冲区、写入、解锁到音频,以及锁定缓冲区、读取,在音频类中解锁