我需要能够从 Android 系统的 C++ 端的自定义文件格式流式传输音频。我正在移植自定义媒体播放器,需要能够打开自定义文件并从中流式传输音频。这一点很重要,因为从性能的角度来看,我认为将整个播放器移植到 JAVA 是不可行的,并且我认为通过 JNI 接口移动音频缓冲区会太慢而无法保持良好的帧速率。我可以通过 OpenGL ES 处理 NDK 端的视频,但音频我不知道如何实现这一点。
问问题
3180 次
2 回答
2
我建议您通过 JNI 传递音频并查看它的实际执行情况。我发现 JNI 实际上非常高效(如果实施得当),如果它足够快满足您的需要,也不会感到惊讶。
只是关于实现的说明,不要让 Java 在每次要传递音频时都创建缓冲区,只需在 Java 中(或通过 JNI)创建一个缓冲区,然后每次需要更新时将 memcpy 放入其中。
此外,您应该注意,Android 上的所有音频类目前都是用 C++ 编写的,并通过 JNI 运行。如果它足够快以单向运行(我目前正在开发一款游戏,我们可以在某些帧上从 Java 向 AudioTrack 提交超过 0.5mb 的音频数据而不会出现问题),那么它可能不会太糟糕go other 与其基本相同的操作,即锁定缓冲区,写入,解锁进入音频,并锁定缓冲区,读取,解锁音频类。
于 2010-09-10T16:34:29.577 回答
1
NDK 目前不支持播放音频帧。您必须使用 java AudioTrack API 来实现这一点。
于 2010-03-07T15:07:00.667 回答