Linux環(huán)境下編譯ffmpeg的so庫(kù)

一、搭建環(huán)境

1.1安裝ubuntu

自行參考網(wǎng)上的安裝教程,我參考的如下教程:手把手教你安裝Linux虛擬機(jī)

1.2一些必要工具的安裝

比如make、vim等,也可在輸入指令錯(cuò)誤或者編譯出錯(cuò)時(shí)按提示進(jìn)行安裝。

1.3下載ndk

ndk的官網(wǎng)地址下穩(wěn)定版本即可。將下載的zip放到Linux的目錄,比如 /home/ndk/下,然后打開(kāi)命令行工具到該目錄下執(zhí)行解壓:

unzip android-ndk-r22b-linux-x86_64.zip

1.4下載FFmpeg

FFmpeg的官網(wǎng)地址建議下載大版本,我下的是ffmpeg-4.4.tar.gz。下載完后右擊"Extract Here"。

編譯FFmpeg

1.1修改configure

進(jìn)入源碼根目錄,找到該文件,右擊"Open With Text Editor"(也可以在命令行用vim打開(kāi)),找到如下代碼:

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替換為如下代碼:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

1.2添加配置文件

在源碼根目錄新建build.sh,打開(kāi)文件復(fù)制如下內(nèi)容:

#!/bin/bash
make clean
export NDK=/home/xjf/ndk/android-ndk-r22b
export ADDI_LDFLAGS="-fPIE -pie"
export ADDI_CFLAGS="-fPIE -pie -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
export CPU=armv7-a
export ARCH=arm
export HOST=arm-linux
export SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
export PREFIX=$(pwd)/android/$CPU
#export x264=$(pwd)/x264/android/$CPU
#export PATH=$x264/bin:$PATH
#export PATH=$x264/include:$PATH
#export PATH=$x264/lib:$PATH
#export PKG_CONFIG_PATH=$x264/lib/pkgconfig:$PKG_CONFIG_PATH
./configure \
--prefix=$PREFIX \
--toolchain=clang-usan \
--enable-cross-compile \
--target-os=android \
--arch=$ARCH \
--sysroot=$SYSROOT \
--cc=$TOOLCHAIN/armv7a-linux-androideabi21-clang \
--cxx=$TOOLCHAIN/armv7a-linux-androideabi21-clang++ \
--strip=$TOOLCHAIN/arm-linux-androideabi-strip \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--disable-encoders \
--disable-decoders \
--disable-avdevice \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-network \
--disable-doc \
--disable-symver \
--disable-ffprobe \
--enable-neon \
--enable-shared \
#--enable-libx264 \
--enable-gpl \
--enable-pic \
--enable-jni \
--enable-pthreads \
--enable-mediacodec \
--enable-encoder=aac \
--enable-encoder=gif \
--enable-encoder=libopenjpeg \
--enable-encoder=libmp3lame \
--enable-encoder=libwavpack \
#--enable-encoder=libx264 \
--enable-encoder=mpeg4 \
--enable-encoder=pcm_s16le \
--enable-encoder=png \
--enable-encoder=mjpeg \
--enable-encoder=srt \
--enable-encoder=subrip \
--enable-encoder=yuv4 \
--enable-encoder=text \
--enable-decoder=aac \
--enable-decoder=aac_latm \
--enable-decoder=libopenjpeg \
--enable-decoder=mp3 \
--enable-decoder=mpeg4_mediacodec \
--enable-decoder=pcm_s16le \
--enable-decoder=flac \
--enable-decoder=flv \
--enable-decoder=gif \
--enable-decoder=png \
--enable-decoder=srt \
--enable-decoder=xsub \
--enable-decoder=yuv4 \
--enable-decoder=vp8_mediacodec \
#--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-bsf=aac_adtstoasc \
#--enable-bsf=h264_mp4toannexb \
--enable-bsf=hevc_mp4toannexb \
--enable-bsf=mpeg4_unpack_bframes
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

以下為注意點(diǎn):
1.NDK的路徑一定是自己的ndk路徑。
2.SYSROOT、TOOLCHAIN目錄及腳本文件中提到的其文件夾下的相關(guān)的文件都要檢查下是否存在?。?!
3.關(guān)于disable和enable的配置可以根據(jù)自己的需要進(jìn)行增減:

查看所有編譯配置選項(xiàng):./configure --help
查看支持的解碼器:./configure --list-decoders
查看支持的編碼器:./configure --list-encoders
查看支持的硬件加速:./configure --list-hwaccels

上面3點(diǎn)是編不過(guò),各種報(bào)錯(cuò)的主要原因?。?!

1.3執(zhí)行腳本文件

賦予權(quán)限:chmod +x build.sh
執(zhí)行腳本:./build.sh

然后就等它慢慢編譯了,結(jié)束后在源碼目錄下的android/armv7-a/lib/下找到我們需要的.so文件。

如果還有不懂的請(qǐng)參閱下面的文章,講解的很詳細(xì):
Android FFMPEG 開(kāi)發(fā)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容