二、編譯ffmpeg

二、編譯ffmpeg

來自專欄 移動音視頻開發

編譯環境

  • Ubuntu14.04
  • Ffmpeg2.5.2
  • Anroid-ndk-r9d-Linux-x86_64

編譯前的準備

查看ubuntu的版本是32位還是64位 uname -a

android-ndk需要和ubuntu版本的位數保持一致

編譯步驟

  1. 下載ndk

    dl.google.com/android/n

2. 下載ffmpeg

ffmpeg.org/releases/ ---下載2.5.2版本

3. 創建目錄

    • 在ubuntu中/home下創建NDK文件夾,將下載好的android-ndk-r9d解壓到NDK文件夾
    • 解壓android_ndk_r9d

      --- tar -jxvf android-ndk-r9d-linux-x86_64.tar.bz2
    • 解壓ffmpeg2.5.2

      --- tar -jxvf ffmpeg-2.5.2.tar.bz2

    • 將解壓後的ffmpeg2.5.2複製到android-ndk-r9d/sources/文件夾下

      ---cp -a ffmpeg-2.5.2 android-ndk-r9d/sources/

4. 編寫build_android.sh

在ffmpeg-2.5.2文件夾中創建build_android.sh文件

---vim build_android.sh

#!/bin/shNDK=$HOME/NDK/android-ndk-r9dSYSROOT=$NDK/platforms/android-9/arch-armTOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64function build_one{./configure --prefix=$PREFIX --enable-shared --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --disable-everything --enable-decoder=h264 --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --target-os=linux --arch=arm --enable-cross-compile --sysroot=$SYSROOT --extra-cflags="-Os -fpic $ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake install}CPU=armPREFIX=$(pwd)/android/$CPUADDI_CFLAGS="-marm"build_one

5. 修改configure文件

針對android需要將configure中的如下四行(2746-2749,不同的ffmpeg的版本行數可能會有差異)

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)

注意:如果不修改這四行的內容直接編譯,編譯出來的so文件類似libavcodec.so.55.39.101,Android上無法載入

6. 編譯腳本./build_android.sh

    • 如果build_android.sh沒有可執行許可權,請使用如下命令

      chmod +x build_android.sh
    • 如果使用./build_android.sh報如下錯誤

-bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory

這是由於在window編輯build_android.sh的編碼格式引起的。

可通過如下操作解決:

    • .查看該文件:vim build_android.sh
    • 查看該錯誤文件的格式(一般報錯的文件格式是DOS):

      :set ff
    • 修改該文件格式為UNIX:

      :set ff=unix
    • 再保存

      :wq!

7. 生成頭文件和庫文件

成功編譯完成後會在NDK/android-ndk-r9d/sources/ffmpeg-2.5.2/android/文件夾中生成一個arm文件夾,這個文件夾就是我們所需要的頭文件和動態庫,到此就大功告成啦。

編譯所需要的所有文件及編譯出來的動態庫下載

download.csdn.net/downl


推薦閱讀:

怎麼說服我不買 iPhone,接受 Android 手機?
為什麼安卓國行比水貨貴那麼多?
你是如何使用tasker的?
輕鬆去廣告、凍結流氓 App,就用這些 Android 應用
木犀互聯網技術周刊(第四期)

TAG:Android | FFmpeg | 音視頻 |