深圳宝安区住房和建设局网站,html模板大全,创业好项目,搭建网站空间Media3 ExoPlayer 扩展解码库介绍
请注意#xff0c;本文讨论的是 Media3 ExoPlayer 而不是 Google ExoPlayer2。详细参考#xff1a;Media3 ExoPlayer 迁移指南 文章最后提供了已经编译好的AAR文件#xff0c;直接引用即可#xff01;#xff01;#xff01;
为什么选…Media3 ExoPlayer 扩展解码库介绍
请注意本文讨论的是 Media3 ExoPlayer 而不是 Google ExoPlayer2。详细参考Media3 ExoPlayer 迁移指南 文章最后提供了已经编译好的AAR文件直接引用即可
为什么选择 ExoPlayer
使用过 ExoPlayer 的开发者都会发现相比原生 MediaPlayerExoPlayer 在使用体验上更加友好。这是因为 ExoPlayer 对状态的要求不像原生 MediaPlayer 那么严格如果在不同状态下调用某些方法原生 MediaPlayer 可能会导致崩溃。详细参考Android MediaPlayer 正确使用姿势
支持的视频格式
尽管 ExoPlayer 在网络流支持方面表现优异但在某些情况下它支持的视频格式可能不如原生 MediaPlayer 多。原因是两者都使用了系统的解码库 MediaCodec但如果平台进行了某些定制原生 MediaPlayer 的解封装能力可能会更强。
扩展解码能力
幸运的是ExoPlayer 提供了扩展解码能力的功能虽然实现起来相对复杂需要自己编译扩展库。
官方已经提供的扩展库包括
decoder_av1视频解码decoder_ffmpeg音频解码decoder_flac音频解码decoder_midi音频相关无需编译直接引用decoder_opus音频解码decoder_vp9视频解码
从上面可以看出ffmpeg 已经包括了 decoder_flac 和 decoder_opus 的解码能力。详情请参考支持的格式页面
因此实际上只需要编译并引用 decoder_vp9、decoder_av1 和 decoder_ffmpeg 这三个扩展库就能获得官方提供的全部解码能力。
编译示例FFmpeg 音频解码库
下面以 FFmpeg 音频解码库为例介绍如何编译和使用扩展库。
Let’s start 克隆 Media3 项目 git clone https://github.com/androidx/media.git首先要把整个media3项目弄下来还要准备Android ndk和sdk独立版就行了。 手动构建FFmpeg库以便gradle可以在APK中捆绑FFmpeg二进制文件设置以下shell变量
cd path to project checkout
FFMPEG_MODULE_PATH$(pwd)/libraries/decoder_ffmpeg/src/main下载安卓NDK并在shell变量中设置它的位置。这个构建配置已经在NDK r26b上测试过了(如果安卓_ABI小于21的话就是r23c)。
NDK_PATHpath to Android NDK设置主机平台(对于Mac OS X使用“darwin-x86_64”):
HOST_PLATFORMlinux-x86_64为本机代码设置ABI版本(通常等于minSdk不得超过它):
ANDROID_ABI21获取FFmpeg并检查一个适当的分支。我们不能保证与所有版本的FFmpeg兼容。我们目前推荐6.0版:
cd preferred location for ffmpeg \
git clone git://source.ffmpeg.org/ffmpeg \
cd ffmpeg \
git checkout release/6.0 \
FFMPEG_PATH$(pwd)将解码器配置为包括。参见支持的格式页面了解可用解码器的详细信息以及它们支持的格式。 详细支持的格式页面
ENABLED_DECODERS(vorbis opus flac)我编译已经包括了ffmpeg支持所有格式了啊
在FFmpeg模块中添加到FFmpeg源代码的链接jni目录。
cd ${FFMPEG_MODULE_PATH}/jni \
ln -s $FFMPEG_PATH ffmpeg执行build_ffmpeg.sh为构建FFmpegarmeabi-v7a, arm64-v8a, x86和x86_64。如果您需要为不同的体系结构构建可以编辑该脚本:
cd ${FFMPEG_MODULE_PATH}/jni \
./build_ffmpeg.sh \${FFMPEG_MODULE_PATH} ${NDK_PATH} ${HOST_PLATFORM} ${ANDROID_ABI} ${ENABLED_DECODERS[]}编译完成后生成 AAR 包
编译完成后可以使用 :assembleRelease 任务生成 AAR 包。
./gradlew :libraries:decoder_ffmpeg:assembleRelease项目引用
项目中引用编译好的 AAR 包非常方便因为 ExoPlayer 会通过反射自动加载扩展库所以只需将 AAR 包加入项目即可。
编译好的扩展库下载地址
接下来是编译好的扩展库 decoder_vp9 decoder_av1 decoder_ffmpeg
下载地址https://download.csdn.net/download/mhhyoucom/89900256