NDK编译ffmpeg

由于android中的音视频的解码有限,就学习了android NDK基础,决定使用ffmpeg来完成一些简单的来解码,但是ffmpeg没有android版本的 .so文件,就必须自行来编译ffmpeg了,网上有些博客,写得还是很不错的,为了自己以后方便查找,特此记录

ffmpeg在Linux操作系统下编译要方便的多(对linux不是很熟悉,就选择了windows来编译),在window下需要我们做一些额外的工作,我们使用MinGw工具来编译
我是基于以下环境编译ffmpeg的

    1. 编译ffmpeg基于window7环境
    2. ffmpeg版本为3.3
    3. 编译使用MinGW来编译 

1.ffmpeg最新下载链接
2.安装MinGw的exe文件和源码开源在SourceForge,MinGW下载链接
3.安装完成后,下载msys-base和mingw-32-gcc-ada两个库文件即可。这里我们主要是使用gcc来完成编译工作
4.将MinGW的安装目录下的bin目录配置到系统Path环境变量
5.因为ffmpeg编译出来的so文件后缀不能直接在Android环境下使用,所以需要我们找到ffmpeg文件夹下的configure文件并打开,搜索SLIBNAME_WITH_MAJOR定位到该行,将原来的

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

也就是修改编译出来的so文件后缀为.so形式
6.在ffmpeg目录下创建一个build_android.sh文件,拷贝如下代码

#!/bin/bash
export TMPDIR=D:/tmpdir
NDK=D:/Android/android-sdk-windows/ndk-bundle
SYSROOT=$NDK/platforms/android-24/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CPU=arm
PREFIX=D:/install
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--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
}
build_one

上面需要我们注意的地方有以下几点:(上面所有的路径都用反斜杠,以免报错)
(1)TMPDIR :该字段指向一个文件夹目录,该文件夹路径可任意指定。作用是在编译ffmpeg期间,会生成一些临时文件用于存放在该目录,编译完成后,临时文件会自动清除。
(2)NDK:即你本地电脑NDK目录
(3)SYSROOT:根据你目前的NDK中platforms文件夹下的版本来设置。
(4)PREFIX:ffmpeg编译完成的so文件存放路径,可随意指定。
其它保持不变即可。
7.执行gcc命令编译
打开MinGW目录下的msys文件夹,找到msys.bat,打开:
这里写图片描述
cd切换到ffmpeg根目录,执行./build_android.sh开始编译,这时等待它编译完成。经过一段时间后,当ffmpeg编译完成,打开第6步中我们配置的PREFIX所指向的目录。可以发现多了两个文件夹:
这里写图片描述

其中,include就是编译出来的头文件,lib中就是so文件了:

这里写图片描述
这里写图片描述
看到有这些文件,说明ffmpeg编译成功了

发布了30 篇原创文章 · 获赞 9 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章