搭建ffmpeg player(二)--导入ffmpeg库

2020-04-17 17:44:24 浏览数 (1)

https://github.com/yizhongliu/FFMediaPlayer

base commit: ec501a89d8f77fe4b9aaa9049eb27948d8348758

在文章准备工作--ffmpeg编译已经编译出了ffmpeg的库。我的生成的目录在ffmpeg-4.1.3/dist/ffmpeg-4.0/,工程导入的是动态库,只导入armeabi-v7a

1 在ffmediaplayer/src/main 目录下创建文件夹jniLibs

2 拷贝so文件

将ffmpeg-4.1.3/dist/ffmpeg-4.0/armeabi-v7a/lib中的so 拷贝到 ffmediaplayer/src/main/jniLibs/armeabi-v7a目录下

Screenshot from 2020-03-25 14-24-28.png

ffmpeg编译生成的so文件有链接文件,注意不要拷贝错

3 拷贝头文件

将ffmpeg-4.1.3/dist/ffmpeg-4.0/armeabi-v7a/include 整个文件夹拷贝到 ffmediaplayer/src/main/cpp下面

4 修改CMakeLists.txt

代码语言:javascript复制
#加载ffmpeg头文件的路径
include_directories(include)
... 

#链接ffmpeg so,ffmpeg模块链接有些有先后顺序,如果不注意某些方法可能在使用时报错
#用 -Wl,--start-group  -Wl,--end-group 包裹起来可以不用去留意so的顺序
target_link_libraries( # Specifies the target library.
        nativeffmpeg

        -Wl,--start-group
        avcodec-58
        avdevice-58
        avfilter-7
        avformat-58
        postproc-55
        swresample-3
        swscale-5
        avutil-56
        -Wl,--end-group

        android

        # Links the target library to the log library
        # included in the NDK.
        ${log-lib})

5 写测试代码

代码语言:javascript复制
extern "C" {
#include <libavcodec/avcodec.h>
}

FFMediaPlayer::FFMediaPlayer() {
    //TODO:test code, remove
    ALOGE("avcodec version: %d", avcodec_version());
}

C 代码调用C需要使用extern "C", 通过avcodec_version()判断加载是否成功

0 人点赞