在音視頻開發(fā)中刹泄,通常需要將顏色空間模型YUV外里、RGB數(shù)據(jù)編碼成MPEG、H.26X系列的視頻編碼特石。
視頻相關(guān)知識
顏色空間模型YUV和RGB
YUV:也稱為YCrCb盅蝗,是歐洲電視系統(tǒng)所采用的一種顏色編碼方法,是PAL和SECAM模擬彩色電視制式才用的顏色空間模型姆蘸。其中Y代表亮度墩莫,UV代表色差芙委,U和V是構(gòu)成顏色的兩個分量。通常有YUV444狂秦、YUV422灌侣、YUV420P、YUV420SP裂问、NV21侧啼、NV12等格式,這些格式的區(qū)別在于YUV的比例(數(shù)量)不同和排列順序的不同愕秫。
RGB:通過對紅慨菱、綠、籃3個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色戴甩。RGB格式有:RGB555符喝、RGB565、RGB24甜孤、RGB32等协饲。
視頻編碼
MPEG系列:(由ISO[國際標準化組織]下屬的MPEG[運動圖像專家組]開發(fā))視頻編碼方面主要是MPEG1(VCD)、MPEG2(DVD使用)缴川、MPEG4(DVDRIP)茉稠、MPEG4 AVC(熱門)。
H.26X系列:(由ITU[國際電傳視訊聯(lián)盟]主導(dǎo)把夸,側(cè)重網(wǎng)絡(luò)傳輸而线,只有視頻編碼)包括H.261、H.262恋日、H.263膀篮、H.263+、H.263++岂膳、H.264誓竿、H.265等,目前來說H.264最為流行谈截,而最新的H.265對硬件的需求還是比較大筷屡。
x264編譯
x264是一個優(yōu)秀的H.264編碼器,同樣的簸喂,如果我們想要在Android中使用x264毙死,那么我們就需要將其編譯成.so動態(tài)庫或者靜態(tài)庫。這里選擇編譯.so動態(tài)庫娘赴。
- 到官網(wǎng)下載x264源碼(或者通過git來進行下載)规哲,并解壓
# git clone https://code.videolan.org/videolan/x264.git
解壓:
tar -xjf x264.tar.bz2
- 創(chuàng)建build_x264.sh腳本文件,并通過Vim寫入如下內(nèi)容:
#!/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核心數(shù)>
make -j4
make install
}
build arm64
build armv7-a
腳本文件中創(chuàng)建了configure()和build()兩個方法诽表,configure()方法主要是調(diào)用configure腳本文件并配置對應(yīng)的選項來完成編譯唉锌;build()方法則是調(diào)用configure()和配置系統(tǒng)架構(gòu)。
- 給腳本添加執(zhí)行權(quán)限竿奏,并執(zhí)行
chmod +x build_x264.sh
./build_x264.sh
編譯完成后袄简,就得到.so動態(tài)庫,至于x264的使用泛啸,則在后續(xù)文章中進行講解绿语。