FFMpeg 4.0.2编译

因为项目需要,需要加入视频相关的功能,那必然绕不开FFMpeg了,所以本文记录一下在在编译FFMpeg中的经验和教训。

本篇将介绍2种环境下的编译方式:MacOS和Windows使用NDK r16b + FFMpeg 4.0.2,下载地址可以百度一下。这里就不累赘了

先以MacOS为例(因为网上很多例子都是Mac下的,而我刚开始用的windows,导致出现了很低级的错误,但是一直找不到原因)。

1:下载NDK,然后解压 android-ndk-r16b,配置NDK环境变量

打开终端输入 pico ~/.bash_profile

然后添加以下代码

export NDK_ROOT=/Users/zhaobo/Downloads/android-ndk-r16b  #这里替换成你的ndk路径

export PATH=$PATH:$NDK_ROOT

然后control+x 然后选择Y enter保存

然后需要更新环境变量 source ~/.bash_profile

验证是否配置正确,在终端里输入ndk-build,如果出现的不是command not found,说明配置成功了。

扫描二维码关注公众号,回复: 2984386 查看本文章

2:进入第二步,编译ffmpeg

在编译以前还需要做2件事情,1:修改configue文件;2:制作build_android.sh文件。

2.1修改configure文件,configure文件位于ffmpeg的根目录下,用文本编译器打卡,找到build settings

将下面四行

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

这个直接复制过去即可。然后保存。

2.2 制作build_android.sh文件

在ffmpeg的根目录下创建一个build_android.sh文件,可以在ffmpeg的目录里找一个.sh文件,拿来改动。以下是我的build文件,这些路径一定要仔细检查,90%的问题都来自路径的配置

#!/bin/bash
ADDI_CFLAGS="-marm"
API=27 #这个需要根据自己的ndk版本进行修改,确保自己的ndk下有android-27
PLATFORM=arm-linux-androideabi
CPU=armv7-a
NDK=/Users/zhaobo/Downloads/android-ndk-r16b # 修改成自己本地的ndk路径
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64 #这个路径非常关键,windows下是windows-x86_64
OUTPUT=/Users/zhaobo/Downloads/ffmpeg-4.0.2/android/output #自己指定一个输出目录,这个要提前手动创建好
function build_one
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
  make clean
  make 
  make install
}
echo "开始编译ffmpeg..."
build_one
echo "完成编译..."

保存

2.3编译

打开终端,首先cd C:/Workspace/Project/ffmpeg-4.0.2

然后./build_android.sh

接下来就是漫长的等待

备注:如果在终端中执行命令时,提示permission deny,就需要加权限 chmod 777 要执行的文件,如:chmod 777 ./build_android.sh, 然后再 ./build_android.sh

下面是windows下的编译步骤,和mac下大同小异。

1: 下载ndk和ffmpeg,然后配置ndk的环境变量,验证ndk环境变量是否配置成功,同样在命令行下输入 ndk-build

2:因为ndk编译需要linux环境,所以在windows下还需要下载安装MinGW,配置环境变量

3: 编译ffmpeg

3.1 修改 ffmpeg下的configure和上面mac下的方式一样

3.2 创建build_android.sh

#!/bin/bash
ADDI_CFLAGS="-marm"
API=27
PLATFORM=arm-linux-androideabi
CPU=armv7-a
NDK=C:/Workspace/SDK/ndk-bundle # 修改自己本地的ndk路径
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/windows-x86_64  #注意这里,一定是windows-xxx,我就是因为这个一直编译不过
OUTPUT=C:/Workspace/Project/ffmpeg-4.0.2/android/output #自己指定一个输出目录,提前手动建好
function build_one
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
$ADDITIONAL_CONFIGURE_FLAG
  make clean
  make 
  make install
}
echo "开始编译ffmpeg..."
build_one
echo "完成编译..."

保存,编译

双击打开MinGW下的\msys\1.0\msys.bat,然后和mac下的编译一样,

首先cd C:/Workspace/Project/ffmpeg-4.0.2

chmod 777 build_android.sh

build_android.sh

接着又是漫长的等待。

备注:windows下的路径"\" 在linux下需要换成"/"

猜你喜欢

转载自blog.csdn.net/xiantongyuan/article/details/82149199
今日推荐