基於《雲伺服器Ubuntu基本配置》這篇文章,已經搭建好了雲伺服器,這篇文章使用Ubuntu編譯FFmpeg。
搭建NDK環境
1、建立NDK
目錄,並且上傳Linux
版本的NDK
。
這裡使用的ndk
版本是r10e
。
2、賦予ndk
資料夾下所有檔案的drwx
許可權,使其可執行。
chmod 777 -R ndk
NDK目錄給予許可權之後,可看到.bin
檔案顯示成綠色(可執行)了。
3、解壓執行.bin
檔案
到ndk
目錄下,./android-ndk-r10e-linux-x86_64.bin
執行檔案。
上圖顯示已經執行完成了。
4、環境變數配置
使用命令vim ~/.bashrc
進入環境配置檔案,新增
export NDKROOT=/usr/ndk/android-ndk-r10e
export PATH=$NDKROOT:$PATH
複製程式碼
5、更新環境變數
使用命令source ~/.bashrc
更新環境變數
至此,NDK環境已經搭建好了。
編譯FFmpeg
到官網下載FFmpge. zip
。
這裡使用FFmpeg 2.6.9
版本。
1、上傳檔案
使用xftp
上傳ffmpeg
壓縮包到Ubuntu
。
2、解壓FFmpeg
使用命令unzip ffmpeg-2.6.9.zip
解壓檔案
Xftp檢視,顯示解壓檔案
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資料夾中。
指定NDK路徑:export NDK=/usr/ndk/android-ndk-r10e; 配置CPU架構型別:export CPU=arm,PREFIX是指定動態庫輸出的路徑,然後disable一些不需要的庫(可減小輸出的動態庫的大小); enable-shared:生成共享庫。
4、build_android.sh
給予許可權。
顯示build_android.sh
沒有執行許可權。
使用chmod 777 build_android.sh
命令,給予build_android.sh
執行許可權。
5、執行檔案build_android
使用./build_android.sh
命令執行
報錯command not found
沒有make命令。安裝make:sudo apt-get install make
。
6、安裝dos2unix
命令:sudo apt-get install tofrodos
這裡的檔案是在window下建立的,需要使用dos2unix build_android.sh
命令轉換下檔案。
說明: 如果出現問題: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
編譯:
上圖就是編譯完成生成動態庫。
生成的動態庫有.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)'
複製程式碼
重新編譯,生成動態庫: