前言
这篇文件简单介绍下移动端Android系统下利用FFmpeg的Filter进行音频数据预处理的方法。
按照惯例先上一份源码 AndroidFFmpegFilter。
项目实现了:
- 音量调节功能 volume_filter.cpp
- 混音 amix_filter.cpp
FFmepg编译须知
由于需要用到Filter模块,
所以在FFmpeg编译脚本中需要开启相关编译选项。
否则会出现 avfilter_get_by_name(filter_name)
找不到对应的处理器。
--enable-filters
#or
--enable-filter=name #name 指定需要使用到的filter name
如果不想自己编译,可以使用项目编译好的 动态库。
使用FFmpeg相关动态库
接下来要将ffmpeg的动态库链接到我们的工程上面。
Filter相关只需要使用到libavfilter.so、libavformat.so、libavutil.so这三个动态库。
参考代码如下(提供CMake实现,Android.mk请自己转换):
set(LIB_DIR ${PROJECT_SOURCE_DIR}/libs)
#设置ffmpeg的头文件目录位置
include_directories(${LIB_DIR}/include/ffmpeg)
#导入avfilter动态库
add_library( avfilter
SHARED
IMPORTED )
set_target_properties( avfilter
PROPERTIES
IMPORTED_LOCATION
${LIB_DIR}/${ANDROID_ABI}/libavfilter-6.so )
#导入avformat动态库
add_library( avformat
SHARED
IMPORTED )
set_target_properties( avformat
PROPERTIES
IMPORTED_LOCATION
${LIB_DIR}/${ANDROID_ABI}/libavformat-57.so )
#导入avutil动态库
add_library( avutil
SHARED
IMPORTED )
set_target_properties( avutil
PROPERTIES
IMPORTED_LOCATION
${LIB_DIR}/${ANDROID_ABI}/libavutil-55.so )
#连接动态库
target_link_libraries(
your-lib
avfilter
avutil
avformat
)
FFmpeg Filter初始化流程
导入头文件
extern "C" {
#include <libavfilter/buffersink.h>