在Linux下编译Android版X264「第七章,Android音视频编码那点破事」

2,228 阅读2分钟

  本章仅对部分代码进行讲解,以帮助读者更好的理解章节内容。 本系列文章涉及的项目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的路径,PLATFORMTOOLCHAIN也可以替换成对应平台的工具链。ARM_INARM_LIB不用管,PREFIX是so的输出路径,也可替换成自己的。最后保存退出:wq。   脚本参数有点多,都代表什么意思呢?

  1. --prefix=$PREFIX 设置输出目录
  2. --enable-pic 开启pic选项
  3. --enable-static 生成静态库
  4. --enable-shared 生成共享库
  5. --disable-lavf 禁用lavf
  6. --host=arm-linux 指定目标平台
  7. --cross-prefix 指定交叉编译工具链
  8. --sysroot 指定头文件
  9. --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相比还是有点高。最后放出arm64x86的编译脚本。

本章知识点:

  1. 在Linux下编译Android版X264。

本章相关源码·HardwareVideoCodec项目


欢迎关注微信公众,第一时间获取一手多媒体技术资讯