编译FFmpeg+x264移植到安卓(一)

1.环境:Linxu 系统 个人使用深度Deepin 15.1.1,不用乌班图,因为deepin 更利于桌面操作 ,我们仅仅需要一个linux环境而已。

ffmpeg4.2.2 ,ndk 用 R21b 这个版本, x264 安装包,这个版本不讲究。

下载X264安装包 解压重名为X264文件夹:如安装在build 文件夹下

./configure --prefix=/home/dylan/Documents/ffmpegTool/x264/build --disable-asm --enable-static --enable-shared

make

make install

这里我们用脚本来安装,编写脚本前先修改 config 文件,先进入到x264目录,修改configure文件。定位到

else echo "SOSUFFIX=so" >> config.mak echo "SONAME=libx264.so.$API"

这几行,将"libx264.so.$API"替换为"libx264.so",文件名中就不要版本了。

编写脚本文件:build_x264.sh

build_x264.sh

#!/bin/bash

NDK=/home/dylan/Documents/ffmpegTool/android-ndk-r21b

TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

function build_android

{

#x264路径

x264Dir=/home/dylan/Documents/ffmpegTool/x264/android/$CPU

echo "Compiling FFmpeg for $CPU"

echo "加载x264:$x264Dir"

./configure \

--prefix=$PREFIX \

--enable-cross-compile \

--target-os=android \

--arch=$ARCH \

--cpu=$CPU \

--cc=$CC \

--cxx=$CXX \

--cross-prefix=$CROSS_PREFIX \

--sysroot=$SYSROOT \

--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \

--extra-ldflags="$ADDI_LDFLAGS" \

--extra-cflags="-I$x264Dir/include" \

--extra-ldflags="-L$x264Dir/lib" \

--enable-neon \

--enable-hwaccels \

--enable-gpl \

--enable-libx264 \

--enable-encoder=libx264 \

--enable-postproc \

--enable-shared \

--enable-jni \

--enable-mediacodec \

--disable-static \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--enable-avdevice \

--disable-doc \

--disable-symver \

make clean

make -j4

make install

echo "The Compilation of FFmpeg for $CPU is completed"

}

#armv7-a

API=21

ARCH=arm

CPU=armv7-a

CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang

CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++

SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot

CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-

PREFIX=$(pwd)/android/$CPU

#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"

OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -mfpu=neon -march=$CPU"

build_android

运行脚本后会生成android 目录,里面是X264 的静态库文件,include 和 lib 需要被 ffmpeg 引用。

安装FFmpeg ,和 x264 一样,要修改ffmpeg 的 config,

打开ffmpeg目录下的configure文件,找到如下一段:

SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'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)'

编写build_ffmpeg_withx264的脚本

#!/bin/bash

NDK=/home/dylan/Documents/ffmpegTool/android-ndk-r21b

TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64

function build_android

{

#x264路径

x264Dir=/home/dylan/Documents/ffmpegTool/x264/android/$CPU

echo "Compiling FFmpeg for $CPU"

echo "加载x264:$x264Dir"

./configure \

--prefix=$PREFIX \

--enable-cross-compile \

--target-os=android \

--arch=$ARCH \

--cpu=$CPU \

--cc=$CC \

--cxx=$CXX \

--cross-prefix=$CROSS_PREFIX \

--sysroot=$SYSROOT \

--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \

--extra-ldflags="$ADDI_LDFLAGS" \

--extra-cflags="-I$x264Dir/include" \

--extra-ldflags="-L$x264Dir/lib" \

--enable-neon \

--enable-hwaccels \

--enable-gpl \

--enable-libx264 \

--enable-encoder=libx264 \

--enable-postproc \

--enable-shared \

--enable-jni \

--enable-mediacodec \

--disable-static \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--enable-avdevice \

--disable-doc \

--disable-symver \

make clean

make -j4

make install

echo "The Compilation of FFmpeg for $CPU is completed"

}

#armv7-a

API=21

ARCH=arm

CPU=armv7-a

CC=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang

CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang++

SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot

CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-

PREFIX=$(pwd)/android/$CPU

#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"

OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -mfpu=neon -march=$CPU"

build_android

执行build_ffmpeg_withx264.sh, 若看到日志里面 有libx264,说明 ffmpeg 已经把x264 给引用进来了。

执行完后会生成库文件:

(0)

相关推荐