Live-client-4-x264编译

作者: G63HH | 来源:发表于2019-08-19 15:21 被阅读4次

在音视频开发中,通常需要将颜色空间模型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<CPU核心数>
    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编译

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

  • dtb文件编译

    反编译 编译 批量反编译

  • 编译过程与静态库&动态库

    一、编译过程 1、预编译(Preprocessing) 预编译即预处理,编译器不能直接对预编译命令进行编译,必须在...

  • 宏、const、static、extern使用详解

    宏与const的区别 编译时刻:宏是预编译(编译之前处理),const是编译阶段。编译检查:宏不做检查,不会报编译...

  • iOS const 与宏

    编译时刻:宏是预编译(编译之前处理),const是编译阶段。 编译检查:宏不做检查,不会报编译错误,只是替换,co...

  • 2020-09-09 RK系统编译

    编译uboot: 编译kernel: 环境配置: 编译系统:

  • 程序编译过程

    本文编译的文件cpu架构为X86_64。 编译型语言编译过程主要有预编译、编译、汇编、链接。 预编译This st...

  • 自己动手编译OpenJDK

    Linux下 编译 Centos 下编译OpenJDK Mac下编译 MacOS 下编译OpenJDK Windo...

  • 宏 const static extern的区别与使用

    一. const 与 宏的区别 编译时刻: 宏是预编译(编译之前处理), const是编译阶段处理 编译检查: 宏...

  • 晚期(运行期)优化

    HotSpot的即时编译器 解释器与编译器 编译对象与触发条件 编译过程 编译优化技术 如果还对其他的经典编译优化...

网友评论

    本文标题:Live-client-4-x264编译

    本文链接:https://www.haomeiwen.com/subject/zxfssctx.html