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()判断加载是否成功