Live-client-4-x264编译

在音视频开发中,通常需要将颜色空间模型YUV、RGB数据编码成MPEG、H.26X系列的视频编码。

视频相关知识

颜色空间模型YUV和RGB

  1. YUV:也称为YCrCb,是欧洲电视系统所采用的一种颜色编码方法,是PAL和SECAM模拟彩色电视制式才用的颜色空间模型。其中Y代表亮度,UV代表色差,U和V是构成颜色的两个分量。通常有YUV444、YUV422、YUV420P、YUV420SP、NV21、NV12等格式,这些格式的区别在于YUV的比例(数量)不同和排列顺序的不同。

  2. RGB:通过对红、绿、篮3个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色。RGB格式有:RGB555、RGB565、RGB24、RGB32等。

视频编码

  1. MPEG系列:(由ISO[国际标准化组织]下属的MPEG[运动图像专家组]开发)视频编码方面主要是MPEG1(VCD)、MPEG2(DVD使用)、MPEG4(DVDRIP)、MPEG4 AVC(热门)。

  2. H.26X系列:(由ITU[国际电传视讯联盟]主导,侧重网络传输,只有视频编码)包括H.261、H.262、H.263、H.263+、H.263++、H.264、H.265等,目前来说H.264最为流行,而最新的H.265对硬件的需求还是比较大。

x264编译

x264是一个优秀的H.264编码器,同样的,如果我们想要在Android中使用x264,那么我们就需要将其编译成.so动态库或者静态库。这里选择编译.so动态库。

  1. 到官网下载x264源码(或者通过git来进行下载),并解压
# git clone https://code.videolan.org/videolan/x264.git
解压:
tar -xjf x264.tar.bz2
  1. 创建build_x264.sh脚本文件,并通过Vim写入如下内容:
#!/bin/bash
NDK=/usr/ndk/android-ndk-r14b

configure()
{
    CPU=$1
    PREFIX=$(pwd)/android/$CPU
    HOST=""
    CROSS_PREFIX=""
    SYSROOT=""
    if [ "$CPU" == "armv7-a" ]
    then
        HOST=arm-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm/
        CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
    else
        HOST=aarch64-linux
        SYSROOT=$NDK/platforms/android-21/arch-arm64/
        CROSS_PREFIX=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-
    fi
    ./configure \
    --prefix=$PREFIX \
    --host=$HOST \
    --enable-pic \
    --enable-strip \
    --enable-thread \
    --enable-asm \
    --enable-shared \
    --disable-static \
    --cross-prefix=$CROSS_PREFIX \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic" \
    --extra-ldflags="" \
}

build()
{
    make clean
    cpu=$1
    echo "build $cpu"

    configure $cpu
    #-j
    make -j4
    make install
}

build arm64
build armv7-a

脚本文件中创建了configure()和build()两个方法,configure()方法主要是调用configure脚本文件并配置对应的选项来完成编译;build()方法则是调用configure()和配置系统架构。

  1. 给脚本添加执行权限,并执行
chmod +x build_x264.sh
./build_x264.sh

编译完成后,就得到.so动态库,至于x264的使用,则在后续文章中进行讲解。

你可能感兴趣的:(Live-client-4-x264编译)