我是靠谱客的博主 悦耳人生,最近开发中收集的这篇文章主要介绍FFmpeg编程入门|FFmpeg动态库编译与将FFmpeg加入到Android项目中FFmpeg动态库编译将FFmpeg加入到Android项目中,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

FFmpeg动态库编译

下载NDK和FFmpeg

Android Studio默认下载对NDK版本会出现一些兼容问题,因此我们这里使用ndk-r15c(win64|linux64|mac64)版本。 FFmpeg官网下载源码,我用的是3.2.12

解压文件

首先解压NDK和ffmpeg

tar -zxf ffmpeg-3.2.12.tar.gz
unzip android-ndk-r15c-darwin-x86_64.zip -d android-ndk-r15c

修改FFmpeg配置,适配Android

进入ffmpeg目录,修改configure文件

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换为

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

编写FFmpeg脚本,生成动态so库

新建build_android.sh脚本

#!/bin/sh
NDK=/Users/xxx/Desktop/soft/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure 
--prefix=$PREFIX 
--enable-shared 
--disable-static 
--disable-doc 
--disable-ffmpeg 
--disable-ffplay 
--disable-ffprobe 
--disable-ffserver 
--disable-avdevice 
--disable-doc 
--disable-symver 
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- 
--target-os=linux 
--arch=arm 
--enable-cross-compile 
--sysroot=$SYSROOT 
--extra-cflags="-Os -fpic $ADDI_CFLAGS" 
--extra-ldflags="$ADDI_LDFLAGS" 
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

添加执行权限,执行sh脚本

chmod +x build_android.sh
./build_android.sh

整个编译花了10分钟左右(mbp i5配置),编译完成后,可以在android目录看到相关so文件和头文件
在这里插入图片描述

将FFmpeg加入到Android项目中

新建Android项目,添加C++支持

打开Android Studio,新建项目FFmpegAudioPlayer,添加C++支持
在这里插入图片描述

配置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下,最终目录如下

在这里插入图片描述
修改app/build.gradle文件,添加abiFilters

android {
    ...
    defaultConfig {
        ...
        externalNativeBuild {
            ndk{
                abiFilters "armeabi"
            }
        }
    }
...
}

打开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,set_target_properties 
# 设置swresample-2,avcodec-57,avfilter-6,swscale-4avformat-57 
...

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})

配置完成后,我们先编译运行一次,如果能顺利成功安装到手机上,正常运行,则说明配置正确。

学习交流群:960994558整理了一些个人觉得比较好的学习书籍、技术教学视频资料共享在里面,有需要的可以自行添加哦!~在这里插入图片描述
在这里插入图片描述

最后

以上就是悦耳人生为你收集整理的FFmpeg编程入门|FFmpeg动态库编译与将FFmpeg加入到Android项目中FFmpeg动态库编译将FFmpeg加入到Android项目中的全部内容,希望文章能够帮你解决FFmpeg编程入门|FFmpeg动态库编译与将FFmpeg加入到Android项目中FFmpeg动态库编译将FFmpeg加入到Android项目中所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部