经过 上一篇博客的步骤后,生成了八个带版本号的 .so 库,接下来进行导入 NDK 项目的操作

第一步:用 Android Studio 新建 FFmpegDemo 项目,注意勾选 include c++ support 选项

这里写图片描述
这里写图片描述

项目创建完成后,在 libs/ 下新建 armeabi/inlcude/目录,并将上一篇博客中生成的 android/arm/include 目录下的文件放入 include 目录,android/arm/lib 下的带版本号的 .so 文件放入 armeabi/目录,如下所示:

android 使用 ffmpeg 进行视频转码(二)_第1张图片

第二步:修改 CMakeLists.txt 文件的内容如下:

# 指定 cmake 最小版本cmake_minimum_required(VERSION 3.4.1)# 最终生成的共享库命名为:native-lib,源文件路径在 src/main/cpp/native-lib.cppadd_library( native-lib             SHARED             src/main/cpp/native-lib.cpp )# 寻找 log 库,然后赋值给 log-lib,用于在 NDK 开发中输出 Log 信息find_library(log-lib log)# 指定 include 头文件所在路径include_directories(libs/include)# 设置根目录变量 DIRset(DIR ../../../../libs)# 这一句和 下面的 set_target_properties 这一句表示,# 将 armeabi 目录下的 libavcodec-56.so 导入为 avcodec-56 库,并且在项目中引用# 下面的七组功能类似。 注意:add_library 中的 avcodec-56 命名 需要与 .so 库的命名一致# 去掉前缀 lib 和后缀 .soadd_library( avcodec-56             SHARED             IMPORTED )set_target_properties( avcodec-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavcodec-56.so                     )#add_library( avdevice-56             SHARED             IMPORTED )set_target_properties( avdevice-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavdevice-56.so                     )#add_library( avfilter-5             SHARED             IMPORTED )set_target_properties( avfilter-5                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavfilter-5.so                     )#add_library( avformat-56             SHARED             IMPORTED )set_target_properties( avformat-56                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavformat-56.so                     )#add_library( avutil-54             SHARED             IMPORTED )set_target_properties( avutil-54                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libavutil-54.so                     )#add_library( postproc-53             SHARED             IMPORTED )set_target_properties( postproc-53                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libpostproc-53.so                     )#add_library( swresample-1             SHARED             IMPORTED )set_target_properties( swresample-1                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libswresample-1.so                     )#add_library( swscale-3             SHARED             IMPORTED )set_target_properties( swscale-3                       PROPERTIES IMPORTED_LOCATION                       ${DIR}/armeabi/libswscale-3.so                     )# 最终生成 native-lib 库,以及生成所依赖的其他的库target_link_libraries( native-lib                       avcodec-56                       avdevice-56                       avfilter-5                       avformat-56                       avutil-54                       postproc-53                       swresample-1                       swscale-3                       ${log-lib}                        )

第三步:在 MainActivity 中加载 .so 库

android 使用 ffmpeg 进行视频转码(二)_第2张图片

注意:native-lib 需要写在最下面

第四步:修改 app module 下的 build.gradle 文件

在 android.defaultConfig 下,添加如下内容:

android 使用 ffmpeg 进行视频转码(二)_第3张图片
指定 abi 架构 为 armeabi,以及指定 jniLibs 所在目录

第四步:在 native-lib.cpp 中添加如下头文件引用

#include #include #include // 告诉编译器按照 C 的规则去编译函数extern "C" {//编码#include "libavcodec/avcodec.h"//封装格式处理#include "libavformat/avformat.h"//像素处理#include "libswscale/swscale.h"}#define LOGI(FORMAT, ...) __android_log_print(ANDROID_LOG_INFO,"jason",FORMAT,##__VA_ARGS__);#define LOGE(FORMAT, ...) __android_log_print(ANDROID_LOG_ERROR,"jason",FORMAT,##__VA_ARGS__);

最后在 stringFromJNI 方法中添加两个函数:

LOGE("测试 log");av_register_all();

最终效果如下:

android 使用 ffmpeg 进行视频转码(二)_第4张图片最后,运行项目,并生成 APK,如果没有报错,则表示引用 ffmpeg 库到 android 项目成功了

更多相关文章

  1. Android 开机图片/文字/动画的修改
  2. Android Studio中创建Selector文件的方法
  3. Android的图片浏览源码解读
  4. Android文件读写实例代码
  5. 面向 Android 的 Google 项目:Google API
  6. Android Opencv 之 Android Studio 进行 opencv ( 4.2.0) 环境搭建
  7. Android ListView滑动过程中图片显示重复错乱闪烁问题解决

随机推荐

  1. 搭建Android(安卓)UI Testing自动化测试
  2. 初学者---Android(安卓)Fragment之间数据
  3. Android和Linux kernel版本对应表
  4. Android开发之旅:android架构
  5. android中下载文件到sdcard和进度条小结
  6. Android(安卓)init.rc文件解析过程分析
  7. Android实例剖析笔记(二)
  8. android控件的对齐方式转讲
  9. android音频口通信(二)——2FSK信号解调
  10. Android(安卓)启动过程