我在我的应用程序中使用 Sonic Ndk 播放此示例中的音频https://github.com/waywardgeek/sonic-ndk。但它不能播放 mp3 文件。
2 回答
Android NDK 没有这样的 api。但是在ndk中有几种播放mp3的解决方案。
您可以使用 MediaPlayer 平台 api。见https://android.googlesource.com/platform/frameworks/av/+/master/include/media/mediaplayer.h
但是,它不是公共 api,它可以被制造商破坏。
您可以使用 OpenMAX AL 接口。最近,ndk 支持 OpenMAX AL。
但是,它使用起来非常困难,参考文献很少。:(
并且只支持 api 级别 14 或以上。
您可以在 jni 中调用 java 方法。
您可以在下面的源代码中看到如何在 c/c++ 源代码中调用 java 方法。 https://android.googlesource.com/platform/frameworks/base/+/master/media/jni/android_media_MediaScanner.cpp
我认为这是比其他更好的解决方案。
抱歉回复这篇文章迟了,我找到了解决办法。
SONIC ndk 正在播放 pcm 文件。
您可以将任何 mp3 转换为 pcm,然后尝试播放该文件是 demo sonic 项目,您将能够播放该文件。对于将 mp3 转换为 pcm,我使用 ffmpeg 使用命令
ffmpeg -y -i mymp3file.mp3 -f s16le -acodec pcm_s16le mypcmfile.pcm