雲伺服器Ubuntu下搭建NDK環境,並編譯FFmpeg

鋸齒流沙發表於2018-01-06

基於《雲伺服器Ubuntu基本配置》這篇文章,已經搭建好了雲伺服器,這篇文章使用Ubuntu編譯FFmpeg。

搭建NDK環境

1、建立NDK目錄,並且上傳Linux版本的NDK

搭建ndk環境.png

這裡使用的ndk版本是r10e

2、賦予ndk資料夾下所有檔案的drwx許可權,使其可執行。

搭建ndk環境.png

chmod 777 -R ndk NDK目錄給予許可權之後,可看到.bin檔案顯示成綠色(可執行)了。

3、解壓執行.bin檔案

ndk目錄下,./android-ndk-r10e-linux-x86_64.bin執行檔案。

搭建ndk環境.png

上圖顯示已經執行完成了。

4、環境變數配置

使用命令vim ~/.bashrc進入環境配置檔案,新增

export NDKROOT=/usr/ndk/android-ndk-r10e
export PATH=$NDKROOT:$PATH
複製程式碼

搭建ndk環境.png

5、更新環境變數

使用命令source ~/.bashrc更新環境變數

搭建ndk環境.png

至此,NDK環境已經搭建好了。

編譯FFmpeg

官網下載FFmpge. zip

FFMPEG.png

FFMPEG.png

FFMPEG.png

這裡使用FFmpeg 2.6.9版本。

1、上傳檔案

使用xftp上傳ffmpeg壓縮包到Ubuntu

FFMPEG.png

2、解壓FFmpeg

使用命令unzip ffmpeg-2.6.9.zip解壓檔案

FFMPEG.png

Xftp檢視,顯示解壓檔案

FFMPEG.png

3、編寫shell指令碼檔案

build_android.sh檔案:

#!/bin/bash
make clean
export NDK=/usr/ndk/android-ndk-r10e
export SYSROOT=$NDK/platforms/android-9/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"

./configure --target-os=linux \
--prefix=$PREFIX --arch=arm \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
複製程式碼

注意:

1)換行的時候需要有\,注意不要有額外的空格,否則編譯出錯

2)指令碼檔案統一轉為UTF-8無BOM格式。可通過note pad++進行轉碼,或者先由Linux建立檔案再由Windows編輯。

3)NDK儘量不要使用太新的版本,一般使用Android-9即可,否則新版本會出現不相容的問題。

4)將編寫好的shell指令碼放在解壓後的ffmpeg-2.6.9資料夾中。

FFMPEG.png

指定NDK路徑:export NDK=/usr/ndk/android-ndk-r10e; 配置CPU架構型別:export CPU=arm,PREFIX是指定動態庫輸出的路徑,然後disable一些不需要的庫(可減小輸出的動態庫的大小); enable-shared:生成共享庫。

4、build_android.sh給予許可權。

FFMPEG.png

顯示build_android.sh沒有執行許可權。

使用chmod 777 build_android.sh命令,給予build_android.sh執行許可權。

FFMPEG.png

5、執行檔案build_android

使用./build_android.sh命令執行

FFMPEG.png

報錯command not found沒有make命令。安裝make:sudo apt-get install make

6、安裝dos2unix

命令:sudo apt-get install tofrodos

這裡的檔案是在window下建立的,需要使用dos2unix build_android.sh命令轉換下檔案。

FFMPEG.png

說明: 如果出現問題:bad interpreter : No such file or directory,原因:沒有將檔案轉成Linux編碼格式。

轉換Linux編碼格式有兩種方式:

1、在Linux下建立這個檔案touch build_android.sh,從Linux傳出到桌面把指令碼命令拷入這個檔案中,上傳到Linux;
2、使用 dos2unix build_android.sh 轉成Linux編碼格式
複製程式碼

7、再次執行檔案build_android

編譯:

FFMPEG.png

FFMPEG.png

上圖就是編譯完成生成動態庫。

生成的動態庫有.56,.5的庫,這種庫Android很難載入到,我們需要的是字尾.so的庫,這就需要修改configure檔案。

修改configure檔案

修改輸出的動態庫的命名規則:

#修改前
#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)'
複製程式碼

重新編譯,生成動態庫:

FFMPEG.png

相關文章