window環境下使用ndk編譯出android studio/Eclipse能使用的ffmpeg動態庫
window環境下使用ndk編譯出android studio 能使用的ffmpeg動態庫
目錄
ffmepg介紹
FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。採用LGPL或GPL許可證。它提供了錄製、轉換以及流化音視訊的完整解決方案。它包含了非常先進的音訊/視訊編解碼庫libavcodec。–來至百度百科
對於一些不熟悉Linux系統的開發者來說,本文將帶領你們來使用window作業系統來編輯ffmepg動態,來為我們的android studio使用(或者Eclipse)
環境準備
ndk環境搭建
1.android studio通過sdk Manager/SDK TOOls分類下,NDK直接下載,
次方法下載完的路徑在android Manager下載目錄Android sdk目錄下的ndk-bundle中
2.離線下載方式,解壓到一個地址即可
接下來環境變數配置
!
安裝minGW軟體,並配置它的環境變數
安裝過程
接下來進入下載管理器過程,類似android Manager的工具
接下來進入選擇安裝模組的介面,需要安裝紅色框選擇的兩個模組
安裝方法是右鍵要安裝的模組->下拉選擇框中選擇“Mark for instatllation->選擇選單欄“Installation->點選選擇Apply changes項
會調整到這個介面,apply即可
環境變數配置
配置minGW安裝目錄下的bin到環境變數
編譯ffmpeg
原始碼下
編譯檔案配置
編輯ffmpeg資料夾下面的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)'
增加build_android.sh檔案
其中NDK,SYSROOT,TOOLCHAIN是你需要更加本地環境情況需要配置的
#!/bin/bash
NDK=你對應的ndk目錄
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
function 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 \
--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_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
我的配置是
NDK=C:/WorkSoftwear/Sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
開始編譯
安裝Mingw成功後,雙擊目錄MinGW/msys/1.0/msys.bat批處理檔案,然後輸入命令cd 你的目錄 進入對應的ffmpeg根目錄下(即進入到build.android.sh所在目錄下)後輸入./build_android.sh進行編譯,大概十幾分鐘左右。(途中會有一些warning,和deprecated api,不會影響結果)。
第一條命令錯誤是因為linux下資料夾分隔符“/”和window下是相反,複製過來的路徑需要修改,結束之後可以看到在ffmpeg資料夾下面多了一個android資料夾
如果是eclipse使用,那麼你需要一個Android.mk檔案,android studio忽略
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= lib/libavformat-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= lib/libswscale-3.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= lib/libavutil-54.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= lib/libavfilter-5.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libwsresample
LOCAL_SRC_FILES:= lib/libswresample-1.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)