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

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

搭建NDK環境

一、建立NDK目錄,而且上傳Linux版本的NDKlinux

搭建ndk環境.png

這裏使用的ndk版本是r10eandroid

二、賦予ndk文件夾下全部文件的drwx權限,使其可執行。shell

搭建ndk環境.png

chmod 777 -R ndk NDK目錄給予權限以後,可看到.bin文件顯示成綠色(可執行)了。vim

三、解壓執行.bin文件bash

ndk目錄下,./android-ndk-r10e-linux-x86_64.bin執行文件。服務器

搭建ndk環境.png

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

四、環境變量配置ide

使用命令vim ~/.bashrc進入環境配置文件,添加post

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

搭建ndk環境.png

五、更新環境變量

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

搭建ndk環境.png

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

編譯FFmpeg

官網下載FFmpge. zip

FFMPEG.png

FFMPEG.png

FFMPEG.png

這裏使用FFmpeg 2.6.9版本。

一、上傳文件

使用xftp上傳ffmpeg壓縮包到Ubuntu

FFMPEG.png

二、解壓FFmpeg

使用命令unzip ffmpeg-2.6.9.zip解壓文件

FFMPEG.png

Xftp查看,顯示解壓文件

FFMPEG.png

三、編寫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:生成共享庫。

四、build_android.sh給予權限。

FFMPEG.png

顯示build_android.sh沒有執行權限。

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

FFMPEG.png

五、執行文件build_android

使用./build_android.sh命令執行

FFMPEG.png

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

六、安裝dos2unix

命令:sudo apt-get install tofrodos

這裏的文件是在window下建立的,須要使用dos2unix build_android.sh命令轉換下文件。

FFMPEG.png

說明: 若是出現問題:bad interpreter : No such file or directory,緣由:沒有將文件轉成Linux編碼格式。

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

一、在Linux下建立這個文件touch build_android.sh,從Linux傳出到桌面把腳本命令拷入這個文件中,上傳到Linux;
二、使用 dos2unix build_android.sh 轉成Linux編碼格式
複製代碼

七、再次執行文件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
相關文章
相關標籤/搜索