centos7.2 下 ffmpeg交叉编译(安卓版x86_64)

参考链接:王英豪大神  王英豪大神系列博客

网上查到的都是arm版本的,但是我们项目中使用的是x86_64的,编译整理完保存一下,给大家提供方便,本文编译的ffmpeg源码是3.2.12,文章末尾有编译好的库及源码(3.2.12与3.4.2),但3.2.12版本似乎使用有bug,不知道是否是我使用不当,使用3.2.12版本的动态库推流时会有卡顿,将库替换成3.4.2版本问题解决。

运行环境:centos7.2  i7-6700  

                  ndk版本:android-ndk-r14b

下载好ndk。

开始:

一、安装ndk,顺序执行
1. cd /usr/local
2. mkdir android
3. cd android
4. mkdir ndk
5. cd ndk

将安装包拷贝过来,解压到当前文件夹

unzip android-ndk-r14b-linux-x86_64.zip

修改/etc/profile文件,
vi /etc/profile 追加:
export ANDROID_NDK_HOME=/usr/local/android/ndk/android-ndk-r14b
export PATH=$ANDROID_NDK_HOME:$PATH

source /etc/profile

执行  ndk-build   (终端输入此命令即可)


出现下面提示代表成功
Android NDK: Could not find application project directory !    
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.    
/usr/local/android/ndk/android-ndk-r14b/build/core/build-local.mk:151: *** Android NDK: Aborting    .  Stop.

二、编译ffmpeg


1.将下载好的ffmpeg源码包,上传至服务器,解压进入ffmpeg目录:
2.修改ffmpeg的configure文件:


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

为什么?
原因:Android 工程中只支持导入 .so 结尾的动态库,形如:libavcodec-57.so 。
但是FFmpeg 编译生成的动态库默认格式为 xx.so.版本号 ,形如:libavcodec.so.57 ,
所以需要修改 FFmpeg 根目录下的 configure 文件,使其生成以 .so 结尾格式的动态库。

 


3.编译 FFmpeg 之前,我们需要修改 FFmpeg 的编译选项,主要目的如下:


a.规定编译方式,使其通过交叉编译生成我们需要的动态库。
b.选择所需功能,针对需求定制 FFmpeg 功能,精简动态库。
在 FFmpeg 根目录下通过 ./configure 命令进行设置,但是为了方便记录与修改,我们选择在根目录下建立一个脚本文件来运行 ./configure 命令:
编写build_android.sh脚本,其中ndk路径为第一步骤中的安装路径,这个是编译的安卓系统X86_64版本的ffmpeg库:
#!/bin/bash  
NDK=/usr/local/android/ndk/android-ndk-r14b
SYSROOT=$NDK/platforms/android-22/arch-x86_64/
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64

CPU=x86_64
PREFIX=$(pwd)/Android/$CPU

#--target-os=linux \         #目标系统
#--prefix=$PREFIX \          #规定编译文件在哪里生成
#--enable-cross-compile \    #启用交叉编译方式
#--cross-prefix=$TOOLCHAIN/bin/x86_64-linux-android- \  #交叉编译链
#--nm=$TOOLCHAIN/bin/x86_64-linux-android-nm
#--arch=x86_64 \             #目标平台架构
#--toolchain=hardened
#--sysroot=$SYSROOT \        #交叉编译环境     
#--enable-gpl    
#--enable-shared \           #生成动态库(共享库)
#--disable-static \          #禁止生成静态库    
#--disable-indevs \             #禁用不需要的功能,下同
#--disable-asm
#--extra-cflags="-fPIC -DANDROID -D__thumb__ -Wfatal-errors -Wno-deprecated"
#-Wfatal-errors  首次出现错误的地方,在gcc中加入编译选项能够使编译停止在第一次出现错误的地方:
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --cross-prefix=$TOOLCHAIN/bin/x86_64-linux-android- --nm=$TOOLCHAIN/bin/x86_64-linux-android-nm --arch=x86_64 --toolchain=hardened --sysroot=$SYSROOT --enable-gpl --enable-shared --disable-static --disable-indevs --disable-asm --extra-cflags="-fPIC -DANDROID -D__thumb__ -Wfatal-errors -Wno-deprecated"

4.在ffmpeg目录下手动创建Android/x86_64目录,回到ffmpeg主目录执行脚本./build_android.sh


此时需注意:要是在windows下编写此脚本,上传至服务器执行时可能会提示找不到文件;
这时需转换脚本的编码格式,
vi build_android.sh
:set ff=unix
保存退出

5.make
6.make install
7.进入Android/x86_64,看到的文件就是所需文件

 

3.2.12版本下载链接:

x86_64 :https://download.csdn.net/download/m0_37684310/10930150

arm : https://download.csdn.net/download/m0_37684310/10930034

ffmpeg源码及编译好所有库:https://download.csdn.net/download/m0_37684310/11080213

3.4.2版本下载链接:

ffmpeg源码及编译好所有库:https://download.csdn.net/download/m0_37684310/11080222

 

没有下载积分的可以联系邮箱lichongjiang@126.com,会尽快回复!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值