exoplayer3 ffmpeg 扩展库编译 aar,导入集成。
已经编译完成的aar:https://download.csdn.net/download/mhhyoucom/88086822
编译项目方法:
github下载项目:https://github.com/google/ExoPlayer
FFmpeg 模块提供 ,它使用 FFmpeg 进行解码 并且可以呈现以各种格式编码的音频。
要使用该模块,您需要克隆此 GitHub 项目并依赖其 本地模块。有关执行此操作的说明,请参阅顶级自述文件。该模块不是通过谷歌的Maven存储库提供的 。
此外,还需要手动构建 FFmpeg 库,以便 可以将 FFmpeg 二进制文件捆绑在 APK 中:
设置以下外壳变量:
cd “ ”
FFMPEG_MODULE_PATH=“$(pwd)/extensions/ffmpeg/src/main”
下载安卓 NDK 并在 shell 变量中设置其位置。 此构建配置已在 NDK r21 上进行了测试。
NDK_PATH=“ ”
设置主机平台(对于 Mac OS X,请使用“darwin-x86_64”):
HOST_PLATFORM=“linux-x86_64”
获取 FFmpeg 并签出相应的分支。我们不能保证 与所有版本的 FFmpeg 兼容。我们目前推荐版本 4.2:
cd “” &&
git clone git://source.ffmpeg.org/ffmpeg &&
cd ffmpeg &&
git checkout release/4.2 &&
FFMPEG_PATH=“$(pwd)”
配置要包含的解码器。请参阅支持的格式页面 可用解码器的详细信息,以及它们支持的格式。
ENABLED_DECODERS=(vorbis opus flac)
在 FFmpeg 模块目录中添加指向 FFmpeg 源代码的链接。jni
cd “KaTeX parse error: Expected 'EOF', got '&' at position 27: …ULE_PATH}/jni" &̲& \ ln -s "FFMPEG_PATH” ffmpeg
执行以构建 、 和 的 FFmpeg。如果需要构建,可以编辑脚本 不同的架构:build_ffmpeg.sharmeabi-v7aarm64-v8ax86x86_64
cd “KaTeX parse error: Expected 'EOF', got '&' at position 27: …ULE_PATH}/jni" &̲& \ ./build_ffm…{FFMPEG_MODULE_PATH}” “ N D K P A T H " " {NDK_PATH}" " NDKPATH""{HOST_PLATFORM}” “${ENABLED_DECODERS[@]}”
如何使用:
导入java类。
public class PluginRenderFactory extends DefaultRenderersFactory {
/**
* @param context A {@link Context}.
*/
public PluginRenderFactory(Context context) {
super(context);
}
@Override
protected void buildAudioRenderers(Context context, int extensionRendererMode, MediaCodecSelector mediaCodecSelector, boolean enableDecoderFallback, AudioSink audioSink, Handler eventHandler, AudioRendererEventListener eventListener, ArrayList<Renderer> out) {
out.add(new FfmpegAudioRenderer(eventHandler, eventListener, audioSink));
super.buildAudioRenderers(context, extensionRendererMode, mediaCodecSelector, enableDecoderFallback, audioSink, eventHandler, eventListener, out);
}
}
exoplayer初始化时候设置进入:
DefaultRenderersFactory renderersFactory = new PluginRenderFactory(context)
.setExtensionRendererMode(DefaultRenderersFactory.EXTENSION_RENDERER_MODE_ON);
mPlayer = new ExoPlayer.Builder(context).setRenderersFactory(renderersFactory).build();
编译集成完毕