FFmpeg音頻播放器(3)-將FFmpeg加入到Android中

FFmpeg音頻播放器(1)-簡(jiǎn)介
FFmpeg音頻播放器(2)-編譯動(dòng)態(tài)庫(kù)
FFmpeg音頻播放器(3)-將FFmpeg加入到Android中
FFmpeg音頻播放器(4)-將mp3解碼成pcm
FFmpeg音頻播放器(5)-單輸入filter(volume,atempo)
FFmpeg音頻播放器(6)-多輸入filter(amix)
FFmpeg音頻播放器(7)-使用OpenSLES播放音頻
FFmpeg音頻播放器(8)-創(chuàng)建FFmpeg播放器
FFmpeg音頻播放器(9)-播放控制

新建Android項(xiàng)目

打開(kāi)Android Studio,新建項(xiàng)目FFmpegAudioPlayer,添加C++支持


NDK支持

拷貝FFmpeg庫(kù)文件

在src下的main文件中創(chuàng)建jniLibs文件夾,在jniLibs創(chuàng)建armeabi文件夾,將ffmpeg下android/arm/lib/目錄下的so文件(libavcodec-57.so/libavfilter-6.so/libavformat-57.so/libavutil-55.so/libswresample-2.so/libswscale-4.so)拷貝至此目錄。將android/arm/include 整個(gè)目錄拷貝至jniLibs下,最終目錄如下


工程目錄

修改app/build.gradle文件

因?yàn)槲覀冎粍?chuàng)建了armeabi文件夾,所以加入abiFilters

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"
            }
            ndk{
                abiFilters "armeabi"
            }
        }
    }
...
}

配置cmake文件

打開(kāi)app目錄下的CMakeLists.txt文件,修改成如下配置

cmake_minimum_required(VERSION 3.4.1)
add_library( native-lib
             SHARED
             src/main/cpp/native-lib.cpp)
find_library( log-lib
              log )
find_library( android-lib
              android )
set(distribution_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI})
add_library( avutil-55
             SHARED
             IMPORTED )
set_target_properties( avutil-55
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libavutil-55.so)
add_library( swresample-2
             SHARED
             IMPORTED )
set_target_properties( swresample-2
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libswresample-2.so)
add_library( avcodec-57
             SHARED
             IMPORTED )
set_target_properties( avcodec-57
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libavcodec-57.so)
add_library( avfilter-6
             SHARED
             IMPORTED )
set_target_properties( avfilter-6
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libavfilter-6.so)
add_library( swscale-4
             SHARED
             IMPORTED )
set_target_properties( swscale-4
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libswscale-4.so)
add_library( avformat-57
             SHARED
             IMPORTED )
set_target_properties( avformat-57
                       PROPERTIES IMPORTED_LOCATION
                       ${distribution_DIR}/libavformat-57.so)
set(CMAKE_VERBOSE_MAKEFILE on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories(src/main/cpp)
include_directories(src/main/jniLibs/include)

target_link_libraries(native-lib
                      avutil-55       #工具庫(kù)
                      swresample-2    #音頻采樣數(shù)據(jù)格式轉(zhuǎn)換
                      avcodec-57      #編解碼
                      avfilter-6      #濾鏡特效處理
                      swscale-4       #視頻像素?cái)?shù)據(jù)格式轉(zhuǎn)換
                      avformat-57     #封裝格式處理
                      OpenSLES
                      ${log-lib}
                      ${android-lib})

先啥也不做,run一遍,編譯是否通過(guò),能否安裝到手機(jī)上。如能安裝上,正常運(yùn)行,則說(shuō)明配置正確,前期準(zhǔn)備工作就完成啦,接下來(lái)就可以用FFmpeg庫(kù)編程咯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容