c++ - Android 从 C++ 端播放原始音频

标签 c++ android video audio android-ndk

我需要能够在 Android 系统的 C++ 端以自定义文件格式传输音频。我正在致力于移植自定义媒体播放器,并且需要能够打开自定义文件并从中传输音频。这很重要,因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的,并且通过 JNI 接口(interface)移动音频缓冲区我认为速度太慢而无法保持良好的帧速率。我可以通过 OpenGL ES 处理 NDK 端的视频,但音频我不知道如何实现这一点。

最佳答案

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

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

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

关于c++ - Android 从 C++ 端播放原始音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2312542/

相关文章:

c++ - Eclipse Luna CDT 在 Windows 64 中失败

Android Studio 项目结构对话框

linux - 适合新 Ruby on Rails 开发人员的最佳 Linux 截屏视频学习系列?

c++ - std::uniform_int_distribution 不够随机

c++ - 返回 const 'this' 指针

c++ - 故障管道三个命令 "dmesg|sort|more"c++

android - 如何确保 admob 出现在我的应用中

Java 使用分隔符拆分字符串

iphone - 如何使用 AVFoundation 组合不同方向的视频剪辑

android - 从我的应用程序在 whatsapp 上分享视频