一、下载NDK、X264、ffmpeg
(1) NDK选择版本(ndk-r14b)下载地址:
https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
(2) X264
X264下载地址:
http://www.videolan.org/developers/x264.html
(3) ffmpeg版本(ffmpeg-4.0.2):
https://www.ffmpeg.org/releases/ffmpeg-4.0.2.tar.gz
二、 在Linux系统中安装NDK以及配置好NDK环境(见前文配置)
三、 先编译X264
1、 编译X264前的配置
(1) 首先在系统环境中安装yasm
sudo apt install yasm
(2) 修改x264源码根目录下的configure中的这一行,改成下图这个样,不然生成的库的名字会是libx264.so.159 (Android系统是不识别这种命名的动态库的)
[注:这个当时自己进去看了看,忘了有没有修改了]
2、 在主目录下面新建一个文件夹:my
将下载好的X264放在这个文件my中(home/gyl/my)
打开终端(Ctrl+Alt+T)在终端中输入:
进入my文件夹:
cd my
解压X264压缩文件:
tar -xvf last_x264.tar.bz2
解压完成后在my文件夹中出现了x264-snapshot-20190914-2245 文件夹。
进入X264解压后的文件夹:
cd x264-snapshot-20190914-2245
3、在解压后的x264-snapshot-20190914-2245 文件中,新建
build_android.sh 脚本
新建脚本使用的shell命令为:
touch build_android.sh
输入命令:
vim build_android.sh
点击Enter打开文件,在文件中粘贴下面内容:
#!/bin/sh
make distclean
#这里替换成你的NDK目录即可
export NDK=/home/gyl/my/android-ndk-r14b
export SYSROOT=$NDK/platforms/android-24/arch-arm64
export TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
CPU=arm64
PREFIX=$(pwd)/android/$CPU
function build_64
{
./configure \
--prefix=$PREFIX \
--enable-static \
--enable-shared \
--enable-pic \
--disable-asm \
--enable-strip \
--host=aarch64-linux-android \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
build_64
make -j8
make install
关闭终端打开的这个文件,发现在 x264-snapshot-20190914-2245 文件夹中出现了一个build_android.sh(但是里面内容显示为空,我也没弄清怎么回事,将上面的代码打开这个.sh文件,又重新复制粘贴了一遍,保存关闭)
最后在终端中输入X264编译命令:
./build_android.sh
此时提示的是bash: .xx.sh: 权限不够.。
在终端命令行中:
先是:chmod 777 xx.sh
最后执行:bash xx.sh
【或者:source xx.sh 或者:sh xx.sh】
就可以了
重新在终端中输入:
./build_android.sh
开始编译,提示输入make
然后输入:
make
等待编译完成,最后在终端中输入:
make install
到这里,X264的编译完成。
编译完成图如下:
4、编译带X264的ffmpeg:
将下载好的ffmpeg压缩包放入my文件夹中
在终端进入my文件夹,开始压缩命令:
tar -xvf ffmpeg-4.0.2.tar.gz
解压完成,在my文件夹中出现了一个ffmpeg-4.0.2文件夹
进入这个解压后的文件夹:
cd ffmpeg-4.0.2
在解压后的文件夹ffmpeg-4.0.2中,新建build_ffmpeg_android64.sh脚本文件(使用的shell命令“touch build_ffmpeg_android64.sh”)
touch build_ffmpeg_android64.sh
输入命令:
vim build_ffmpeg_android64.sh
点击Enter打开文件,在文件中粘贴下面内容
#!/bin/bash
make clean
#你自己的NDK路径。
export NDK=/home/gyl/my/android-ndk-r14b
#设置你的android平台编译器的版本 这里采用Android4.0
export SYSROOT=$NDK/platforms/android-24/arch-arm64
#编译使用的toolchain
export TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
export CPU=arm64 \
#这个是输出的路径
export PREFIX=$(pwd)/android/$CPU
#export ADDI_CFLAGS="-marm -I/usr/local/include -I/home/gyl/my/x264-snapshot-20190914-2245/android/arm/include"
#export ADDI_LDFLAGS="-L/home/gyl/my/x264-snapshot-20190914-2245/android/arm/lib -L/usr/local/lib"
./configure --target-os=android \
--prefix=$PREFIX \
--arch=arm64 \
--enable-neon \
--enable-hwaccels \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--disable-doc \
--enable-shared \
--enable-static \
--disable-x86asm \
--disable-symver \
--enable-gpl \
--enable-libx264 \
--enable-muxer=mp4 \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic -I/home/gyl/my/x264-snapshot-20190914-2245/android/arm64/include $ADDI_CFLAGS" \
--extra-ldflags="-L/home/gyl/my/x264-snapshot-20190914-2245/android/arm64/lib $ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make -j16
make install
关闭终端打开的这个文件,发现在 ffmpeg-4.0.2 文件夹中出现了一个build_ffmpeg_android64.sh(但是里面内容显示为空,我也没弄清怎么回事,将上面的代码打开这个.sh文件,又重新复制粘贴了一遍,保存关闭)
脚本建立完成后,同理在终端命令中添加权限:
chmod build_ffmpeg_android64.sh
然后:
bash build_ffmpeg_android64.sh
最后进行编译,执行build_ffmpeg_android64.sh:
1、
chmod +x build_ffmpeg_android64.sh
2、
./build_ffmpeg_android64.sh
到这里ffmpeg编译完成。
编译完成图如下:
参考文章:
1、脚本创建:
https://www.jianshu.com/p/feab970fd74c
2、参考X264和ffmpeg编译脚本:
https://blog.csdn.net/Xiaoma_Pedro/article/details/104891937?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%AE%89%E5%8D%93%E7%BC%96%E8%AF%91x264%E5%92%8Cffmpeg&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-104891937
3、编译中遇到的问题搜索解决:
(1) 解决权限问题:
http://blog.sina.com.cn/s/blog_ea0196720102vxl2.html
(2) 编译中的一些坑:
https://www.jianshu.com/p/da5d55b59f4b
(3) 其他参考:
https://blog.csdn.net/Enjolras_fuu/article/details/83513993