本章仅对部分代码进行讲解,以帮助读者更好的理解章节内容。
本系列文章涉及的项目HardwareVideoCodec已经开源到Github,支持软编和硬编。使用它你可以很容易的实现任何分辨率的视频编码,无需关心摄像头预览大小。一切都如此简单。目前已迭代多个稳定版本,欢迎查阅学习和使用,如有BUG或建议,欢迎Issue。
关于x264
的编译比较简单,网上的教程也挺多的,这里只是总结一下,多个资源,方便新人学习。系统建议使用linux,本教程使用的是ubuntu
。
一、下载源码
我们可以从官网下载,也可以使用git,这里我们使用git
git clone http://git.videolan.org/git/x264.git
二、编写编译脚本
要编译源码,我们需要编写编译脚本。编译脚本主要是设置一写编译参数,以便编译出对应平台适用的so库。
这里以arm
为例,首先新建build-android-arm.sh
脚本文件。
vim build-android-arm.sh
输入以下脚本代码。其中NDK
替换成本系统NDK的路径,PLATFORM
和TOOLCHAIN
也可以替换成对应平台的工具链。ARM_IN
和ARM_LIB
不用管,PREFIX
是so的输出路径,也可替换成自己的。最后保存退出:wq
。
脚本参数有点多,都代表什么意思呢?
- --prefix=$PREFIX 设置输出目录
- --enable-pic 开启pic选项
- --enable-static 生成静态库
- --enable-shared 生成共享库
- --disable-lavf 禁用lavf
- --host=arm-linux 指定目标平台
- --cross-prefix 指定交叉编译工具链
- --sysroot 指定头文件
- --extra-cflags 添加编译参数,听说这样对arm有优化?我是没看到效果
#!/bin/bash
NDK=/home/limingyi/android-ndk-r14b
PLATFORM=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
ARM_INC=$PLATFORM/usr/include/
ARM_LIB=$PLATFORM/usr/lib/
PREFIX=./android/arm
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-pic \
--enable-static \
--enable-shared \
--disable-lavf \
--host=arm-linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--sysroot=$PLATFORM \
--extra-cflags="-fPIC -marm -DX264_VERSION -DANDROID -DHAVE_PTHREAD -DNDEBUG -static -D__ARM_ARCH_7__ -D__ARM_ARCH_7A__ -O3 -march=armv7-a -mfpu=neon -mtune=generic-armv7-a -mfloat-abi=softfp -ftree-vectorize -mvectorize-with-neon-quad -ffast-math" \
make clean
make -j4
make install
}
build_one
三、编译源码
我们首先授予脚本执行权限。
sudo chmod +x build-android-arm.sh
接下来执行脚本进行编译。
./build-android-arm.sh
不出意外的话会在x264/android/arm下生成so文件。上机测试发现,在骁龙630的Nokia 7
上,720p 24fsp尚可,cpu占用跟MediaCodec
相比还是有点高。最后放出arm64
和x86
的编译脚本。
本章知识点:
- 在Linux下编译Android版X264。
本章相关源码·HardwareVideoCodec项目:
网友评论