環(huán)境準備:
1.Ubuntu 20.04.4 LTS
2.AndroidNDK版本r26C
3.AndroidStudio 2023.1.1(配置好SDK和JDK 17.0.10)
4.ffmpeg6.0源碼
5.ExoPlayer源碼,AndroidX Media release分支版本
操作步驟:
1.下載Exoplayer源碼
目前官方已廢棄Exopler2,代碼已經遷移到AndroidX Media,下載完成設置FFMPEG_MODULE_PATH變量
1.git clone https://github.com/androidx/media
2.cd media && FFMPEG_MODULE_PATH="$(pwd)/libraries/decoder_ffmpeg/src/main"
2.下載NDK
官網下載NDK或者通過SDKManager安裝
下載完成后解壓,設置NDK_PATH變量
1.unzip android-ndk-r26c-linux.zip
2.cd android-ndk-r26c && NDK_PATH="$(pwd)"
3.設置編譯平臺
Lunux為
HOST_PLATFORM="linux-x86_64"
MacOX為
HOST_PLATFORM="darwin-x86_64"
4.設置最小支持Android版本
通常為項目設置的minSDK版本,NDKr26最小支持SDK為21ANDROID_ABI=23
5.下載ffmpeg源碼
下載源碼并設置FFMPEG_PATH變量git clone git://source.ffmpeg.org/ffmpeg && \ cd ffmpeg && \ git checkout release/6.0 && \ FFMPEG_PATH="$(pwd)"
6.配置解碼器格式
根據自己需要解碼的格式設置,具體支持的解碼格式參考官網ENABLED_DECODERS=(aac ac3 mp3 flac)
7.關聯(lián)ffmpeg源碼
將ExoPlayer源碼中ffmpeg模塊jni與ffmpeg源碼關聯(lián),關聯(lián)成功后會在jni目錄中生成一個快捷方式指向ffmpeg源碼目錄
1.cd "${FFMPEG_MODULE_PATH}/jni"
2.ln -s "$FFMPEG_PATH" ffmpeg
8.編譯ffmpeg
編譯成功后,會在ffmepg目錄下生成一個android-libs目錄./build_ffmpeg.sh \ "${FFMPEG_MODULE_PATH}" "${NDK_PATH}" "${HOST_PLATFORM}" "${ANDROID_ABI}" "${ENABLED_DECODERS[@]}"
9.編譯生成Android項目依賴的aar包
退回到ExoPlayer項目工程目錄執(zhí)行,編譯成功后會在\libraries\decoder_ffmpeg\buildout\outputs\aar\目錄生成aar包./gradlew lib-decoder-ffmpeg:assembleRelease
10.項目使用
復制生成的aar包到項目libs目錄,修改app下的build.gradle文件,引用aar包implementation(files("libs/extension-ffmpeg-release.aar"))
自定義DefaultRenderersFactory,構造ExoPlayer實例時傳入,日志中有ffmpeg相關信息代表加載成功。
文章來源:http://www.zghlxwxcb.cn/news/detail-848794.html
11.常見問題
1.shell變量屬于臨時設置,只在當前窗口生效,新打開命令窗口后需要重新設置,運行build_ffmpeg.sh腳本時會打印相關變量信息,注意查看是否正確。
2.編譯ffmpeg源碼和生成aar時NDK最好保持一致,否則生成aar包時可能報錯。
3.編譯時下載Gradle和同步Maven庫很慢或超時可以設置國內鏡像源,參考AndroidStudio配置騰訊鏡像地址
4.教程參考官方開發(fā)者指南README.md。文章來源地址http://www.zghlxwxcb.cn/news/detail-848794.html
到了這里,關于ExoPlayer(AndroidX Media3) 擴展ffmpeg實現(xiàn)音頻軟解碼的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!