【工具相关】Android音视频开发(14)——FFmpeg及x264的编译

准备

1.MSYS2 https://www.msys2.org/
安装方法:有安装程序,安装到自己方便操作的地方,记得去配置其bin目录的环境变量

2.FFmpeg源码 http://ffmpeg.org/download.html

在这里插入图片描述

解压后放入MSYS2目录下\home\你的用户名\中

3.git https://git-scm.com/download/win
安装方法同MSYS2

4.x264源码 https://www.videolan.org/developers/x264.html
想要支持FFmpeg的H264编解码必须先编译x264,放在和源码同样的目录中

5.android ndk https://developer.android.google.cn/ndk/downloads/
我用的是android-ndk-r19c,其他版本应该问题也不大,解压到方便使用的地方

6.熟悉一点Linux常用命令

开始编译

1.编译x264源码

首先安装mingw工具链,在MSYS2根目录下以管理员身份运行mingw64.exe,输入命令 pacman -S mingw-w64-x86_64-toolchain 然后 pacman -S base-develpacman -S yasm nasm gcc(这一句可能需要)

home/用户名目录下创建一个名为build(可以自定义),后缀为.sh的文件,此为脚本文件

在这里插入图片描述

build.sh内容如下

basepath=$(cd `dirname $0`;pwd)

echo ${basepath}

cd ${basepath}/x264-master
pwd

NDK=D:/android-ndk-r19c-windows-x86_64/android-ndk-r19c

PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt

PLATFORM=$NDK/platforms/android-21/arch-arm 


./configure \
--prefix=/x264_install_android \
--enable-shared \
--enable-pic \
--disable-asm \
--disable-cli \
--host=arm-linux \
--cross-prefix=$PREBUILT/windows-x86_64/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM

make 
make install

内容讲解
NDK则为我们解压的ndk的相应目录,PREBUILTPLATFORM同理,--prefix用于指定放置编译后文件的目录。--cross-prefix是交叉编译,需要用到ndk,如果不使用ndk来进行编译,在后续的ffmpeg编译中便会报libx264 not found的错误。--enable-shared表示编译的是动态库。

操作步骤
创建好以上文件后启动mingw64.exe,cd到build.sh所在的目录,输入sh build.sh

如果在编译的最后发现报错:libx264.so无法正常生成,因为没有这个文件时,我们可以查看x264_install_android所在的目录,此时so库就在其同级目录中,如果so库后面还有一个数字后缀,可以把该数字删除,然后删除另一个没有数字后缀的so库,因为这个文件是用来连接带有数字后缀的so库的,我们可以删除它,直接使用另一个真正的so库,然后把这个so库放入lib文件夹中。
在这里插入图片描述

2.编译FFmpeg

在FFmpeg的根目录中创建build.sh文件

build.sh内容

#!/bin/bash
NDK=D:/android-ndk-r19c-windows-x86_64/android-ndk-r19c
ADDI_LDFLAGS="-fPIE -pie"
ADDI_CFLAGS="-fPIE -pie -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
CPU=armv7-a
ARCH=arm
HOST=arm-linux
SYSROOT=$NDK/toolchains/llvm/prebuilt/windows-x86_64/sysroot
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/windows-x86_64/bin
PREFIX=$(pwd)/android/$CPU
x264=$(pwd)/x264_install_android
export PATH=$x264/bin:$PATH
export PATH=$x264/include:$PATH
export PATH=$x264/lib:$PATH
export PKG_CONFIG_PATH=$x264/lib/pkgconfig:$PKG_CONFIG_PATH
configure()
{
    ./configure \
    --extra-cflags="-I${x264}/include" \
    --extra-ldflags="-L${x264}/lib" \
    --prefix=$PREFIX \
    --toolchain=clang-usan \
    --enable-cross-compile \
    --target-os=android \
    --arch=$ARCH \
    --pkg-config=PKG_CONFIG_PATH \
    --sysroot=$SYSROOT \
    --cc=$TOOLCHAIN/armv7a-linux-androideabi21-clang \
    --cxx=$TOOLCHAIN/armv7a-linux-androideabi21-clang++ \
    --strip=$TOOLCHAIN/llvm-strip \
    --disable-encoders \
    --extra-libs=-ldl \
    --disable-decoders \
    --disable-avdevice \
    --disable-static \
    --disable-doc \
    --disable-ffplay \
    --disable-network \
    --disable-doc \
    --disable-symver \
    --disable-ffprobe \
    --enable-neon \
    --enable-shared \
    --enable-gpl \
    --enable-libx264 \
    --enable-pic \
    --enable-jni \
    --enable-pthreads \
    --enable-mediacodec \
    --enable-encoder=aac \
    --enable-encoder=gif \
    --enable-encoder=libopenjpeg \
    --enable-encoder=libmp3lame \
    --enable-encoder=libwavpack \
    --enable-encoder=libx264 \
    --enable-encoder=mpeg4 \
    --enable-encoder=pcm_s16le \
    --enable-encoder=png \
    --enable-encoder=mjpeg \
    --enable-encoder=srt \
    --enable-encoder=subrip \
    --enable-encoder=yuv4 \
    --enable-encoder=text \
    --enable-decoder=aac \
    --enable-decoder=aac_latm \
    --enable-decoder=libopenjpeg \
    --enable-decoder=mp3 \
    --enable-decoder=mpeg4_mediacodec \
    --enable-decoder=pcm_s16le \
    --enable-decoder=flac \
    --enable-decoder=flv \
    --enable-decoder=gif \
    --enable-decoder=png \
    --enable-decoder=srt \
    --enable-decoder=xsub \
    --enable-decoder=yuv4 \
    --enable-decoder=vp8_mediacodec \
    --enable-decoder=h264_mediacodec \
    --enable-decoder=hevc_mediacodec \
    --enable-bsf=aac_adtstoasc \
    --enable-bsf=h264_mp4toannexb \
    --enable-bsf=hevc_mp4toannexb \
    --enable-bsf=mpeg4_unpack_bframes

}

build()
{
    configure
    make clean
    make -j4
    make install
}

build

内容讲解
--extra-cflags--extra-ldflags分别指定了不在默认目录中的头文件和库文件,也就是我们刚刚编译的x264的include和lib地址,记得不要把-I-L忘了。--cc--cxx是指定c和c++编译器

操作步骤
创建好以上文件后启动mingw64.exe,cd到build.sh所在的目录,输入sh build.sh

注意
ndk请换成自己盘的目录
当出现错误时我们可以查看FFmpeg的ffbuild中的config.log去查看是什么地方出现了问题

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值