Android Studio編譯FFmpeg

前言

編譯FFmpeg的Android版本,并整合到Android Studio。

系統:macOS Sierra 10.12。

NDK版本:r12b。

FFmpeg版本:3.1.3

編譯FFmpeg的步驟

  • 下載 NDK 。

  • 下載 ffmpeg源碼 ,解壓到NDK目錄下的sources目錄下。如圖

WechatIMG9.jpeg

  • 修改ffmpeg-3.1.3目錄下的configure文件 定位到3309行:如圖:

WechatIMG11.jpeg

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名稱規范化,用以滿足android build。

  • 在當前目錄下新建一個build_android.sh文件,如圖:

WechatIMG13.jpeg

內容為:

#!/bin/bash
NDK=/Users/maimingliang/Documents/NDK/android-ndk-r12b
SYSROOT=$NDK/platforms/android-15/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-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
  • 打開終端并且把路徑切換到build_android 所在的目錄 ,執行命令

./build_android.sh

完成編譯以后,進入生成的android文件夾,在arm文件夾里面新建一個Android.mk文件,內容為:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-57.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-57.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-4.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-6.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS) LOCAL_MODULE:= libswresample LOCAL_SRC_FILES:= lib/libswresample-2.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)</code></pre>

至此FFmpeg的編譯完成,下面整合到Android Studio 中:

配置Android Studio

  • 在local.properties加入ndk的路徑,我這里是:

ndk.dir=/Users/maimingliang/Documents/NDK/android-ndk-r12b

也可以在project structure 中添加。如圖所示:

WechatIMG14.jpeg

  • 在build.gradle 文件中添加圖中標紅處的內容。

WechatIMG21.jpeg

  • 配置javah,ndk-build ,ndk-build clean 命令

WechatIMG15.jpeg

添加javah命令:

![Uploading WechatIMG17_232544.jpeg . . .]

program:$JDKPath$/bin/javah

paramers:-classpath $Classpath$ -v -jni $FileClass$

working diretory : $ModuleFileDir$/src/main/jni

添加 ndk-build

IMG_4113.JPG

program:/Users/maimingliang/Documents/NDK/android-ndk-r12b/build/ndk-build //這里要修改你的ndk路徑 的ndk-build

paramers:

working diretory : $ModuleFileDir$/src/main/jni

添加 ndk-build clean

IMG_4114.JPG

program:/Users/maimingliang/Documents/NDK/android-ndk-r12b/build/ndk-build //這里要修改你的ndk路徑的 ndk-build

paramers:clean

working diretory : $ProjectFileDir$/app/src/main

  • 編寫 C文件
  • 編寫Android.mk文件
  • 編寫Application.mk文件。
  • 運行 javah,ndk-build ndk-build clean 命令

IMG_4115.JPG

IMG_4116.JPG

 

 

來自:http://www.jianshu.com/p/42c82169bb7d

 

 本文由用戶 jngr0128 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!