ffmpegをAndroid用にビルドする方法
明けましておめでとうございます。
ニシザワです。
本年も引き続き弊社をよろしくお願いします。
ブログの更新が止まっていました。
更新に関して以前より頻繁には出来ないだろうと思いますが、月に数回は更新しようと思いますので
これからもよろしくお願いします。
さて、今回はffmpegをAndroid用にビルドする方法を書きます。
日本語の情報が少ないため活用いただければと思います。
ほとんどが翻訳的になるかと思いますが皆様の役に1つでも立てれば幸いです。
参考サイトは以下です。
http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/
環境
Mac OSX 10.9
NDK r9
まず、Android NDKが使える環境を整えて置いてください。
NDKの導入についてはググレば日本語サイトが多くでてきますのでここでは省略します。
それでは、ffmpegのソースコード(ffmpeg2.1.1)を以下よりダンロードしてきてください。ダウンロードしたffmpegのフォルダをNDK/sourcesの直下に入れます。
http://www.ffmpeg.org/download.html
次にダウンロードしたffmpegのフォルダの中にあるconfigureファイルを以下の用に編集します。
変更前
変更後
NDKのパスには自分のPCのNDKフォルダの絶対パスを入れてください。
コンパイル完了まで少し時間がかかります。
sources/ffmpeg-2.1.1/android/arm/Android.mk
のファイルを作成し以下のコードを書きます。
最後にJNIのプロジェクトをつくりAndroid.mkファイルに以下のコード記述すれば無事ffmpegが使えるようになると思います。
以下チュートリアルのGithub
https://github.com/roman10/android-ffmpeg-tutorial
少し長くなりましたが以上です。
ニシザワです。
本年も引き続き弊社をよろしくお願いします。
ブログの更新が止まっていました。
更新に関して以前より頻繁には出来ないだろうと思いますが、月に数回は更新しようと思いますので
これからもよろしくお願いします。
さて、今回はffmpegをAndroid用にビルドする方法を書きます。
日本語の情報が少ないため活用いただければと思います。
ほとんどが翻訳的になるかと思いますが皆様の役に1つでも立てれば幸いです。
参考サイトは以下です。
http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/
環境
Mac OSX 10.9
NDK r9
まず、Android NDKが使える環境を整えて置いてください。
NDKの導入についてはググレば日本語サイトが多くでてきますのでここでは省略します。
それでは、ffmpegのソースコード(ffmpeg2.1.1)を以下よりダンロードしてきてください。ダウンロードしたffmpegのフォルダをNDK/sourcesの直下に入れます。
http://www.ffmpeg.org/download.html
次にダウンロードした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のパスには自分のPCのNDKフォルダの絶対パスを入れてください。
#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r9 //ここは自分で変える
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-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
次にターミナルを開き以下のコマンドを入れていきます。sudo chmod +x build_android.sh ./build_android.shこれで無事コンパイルが完了したらあと少しです。
コンパイル完了まで少し時間がかかります。
sources/ffmpeg-2.1.1/android/arm/Android.mk
のファイルを作成し以下のコードを書きます。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-2.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-52.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-3.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libwsresample LOCAL_SRC_FILES:= lib/libswresample-0.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)
最後にJNIのプロジェクトをつくりAndroid.mkファイルに以下のコード記述すれば無事ffmpegが使えるようになると思います。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial03 //ここは適宜変更
LOCAL_SRC_FILES := tutorial03.c //ここは適宜変更
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil
include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.1.1/android/arm)
Android向けffmpegのチュートリアルもあるので動かしてみてください。以下チュートリアルのGithub
https://github.com/roman10/android-ffmpeg-tutorial
少し長くなりましたが以上です。