開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. Android >
  4. ffmpegをAndroid用にビルドする方法
no-image

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ファイルを以下の用に編集します。


変更前
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


少し長くなりましたが以上です。

  • posted by Nextatスタッフ
  • Android
TOPに戻る