FFmpeg音频播放器(3)-将FFmpeg加入到Android中

FFmpeg音频播放器(1)-简介
FFmpeg音频播放器(2)-编译动态库
FFmpeg音频播放器(3)-将FFmpeg加入到Android中
FFmpeg音频播放器(4)-将mp3解码成pcm
FFmpeg音频播放器(5)-单输入filter(volume,atempo)
FFmpeg音频播放器(6)-多输入filter(amix)
FFmpeg音频播放器(7)-使用OpenSLES播放音频
FFmpeg音频播放器(8)-创建FFmpeg播放器
FFmpeg音频播放器(9)-播放控制

新建Android项目

打开Android Studio,新建项目FFmpegAudioPlayer,添加C++支持


3005998-5606d6481da0e61d.png
NDK支持

拷贝FFmpeg库文件

在src下的main文件中创建jniLibs文件夹,在jniLibs创建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 整个目录拷贝至jniLibs下,最终目录如下


3005998-31574db536f00aee.png
工程目录

修改app/build.gradle文件

因为我们只创建了armeabi文件夹,所以加入abiFilters

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

配置cmake文件

打开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       #工具库
                      swresample-2    #音频采样数据格式转换
                      avcodec-57      #编解码
                      avfilter-6      #滤镜特效处理
                      swscale-4       #视频像素数据格式转换
                      avformat-57     #封装格式处理
                      OpenSLES
                      ${log-lib}
                      ${android-lib})

先啥也不做,run一遍,编译是否通过,能否安装到手机上。如能安装上,正常运行,则说明配置正确,前期准备工作就完成啦,接下来就可以用FFmpeg库编程咯。

猜你喜欢

转载自blog.csdn.net/weixin_34117522/article/details/87161245