ffmpegやffplayerで使用されているlibavcodecをAndroid用にビルドしたので備忘録です。
ライブラリ作成手順
参考サイトを記載します。こちらの通りに行うとlibavcodec.soファイルは作成できるようです。前提条件として、LinuxへのAndroid NDK環境の構築とAndroid NDKの初歩的なノウハウ知識が必要です。
参考サイト
- odroid
英語による解説サイトです。 - COCOAQUA
日本語による説明のサイトです。 - Android Core – Android Tutorial
英語による説明のサイトです。日本語のサイトより少し分かりやすいかもしれません。 - A Bit? No!!!
中国語による説明のサイトです。プロジェクト作成から説明してくれています。
リリースされているアプリ
海外で『FFmpeg for Android Beta』がリリースされています。こちらはFFmpegコマンドをそのまま入力する形式のアプリになります。
ffmpegのバージョン
FFmpeg 0.6.3でも試したのですが、ライブラリ作成後、どうもFFMPEGがうまく動いてくれなく(おそらく画像Scaleのシフト演算で失敗)FFmpeg 0.7-rc1にしました。こちらではrc1のパッチ適応とコンパイルエラーを地道に修正後、動画からの画像キャプチャまで確認できました。
ライブラリ作成後
ライブラリ作成後は、sample.javaとsample.cのようなファイルを作成し、libavcodec.aのAPIを使用したソース(JNIを利用する)を記載します。ソース作成後は、libavcodec.soをライブラリとして取り込むよう、Android.mkを作成します。その後、ndk-buildをもう一度かけます。
作業の感想
参考を元にlibavcodecライブラリを作成までは進めましたが、思っていたような動画変換処理がなかなかできず手こずりました。0.7-rc1には、コンパイルエラーもあるのでパッチ(http://patches.libav.org/patch/2476/)も適用しなければいけなかったし…。対応手順は多すぎて忘れてしまいましたので省略します。とりあえず検証として確認はできました。
作業メモ
いろいろ試し結果windows上でcygwinを使用したbuildはあきらめ、vm-wareにUbuntuを載せてコンパイルしました。試行錯誤した際のメモがあったので追記しておきます。
#!/bin/bash #/cygdrive/c/android-ndk/toolchains/arm-eabi-4.4.0/prebuilt/windows #/cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows #PREBUILT=/cygdrive/c/android-ndk/build/prebuilt/linux-x86/arm-eabi-4.4.0 #PLATFORM=/cygdrive/c/android-ndk/build/platforms/android-8/arch-arm #PREFIX_DIR=~/Developments/Android-ffmpeg/ffmpeg-android-bin #PREBUILT=/cygdrive/c/android-ndk/toolchains/arm-eabi-4.4.0/prebuilt/windows #PLATFORM=/cygdrive/c/android-ndk/platforms/android-8/arch-arm #PREFIX_DIR=/cygdrive/c/cygwin/home/user/ffmpeg-bin ./configure --prefix=/cygdrive/c/cygwin/home/user/ffmpeg-bin --disable-yasm --target-os=linux --arch=arm --enable-version3 --enable-gpl --enable-nonfree --disable-stripping --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-encoders --disable-muxers --disable-devices --disable-protocols --enable-protocol=file --enable-avfilter --disable-network --disable-mpegaudio-hp --disable-avdevice --enable-cross-compile --cc=/cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-eabi-gcc --cross-prefix=/cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-eabi- --nm=/cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-eabi-nm --extra-cflags=”-fPIC -DANDROID” --disable-asm --enable-neon --enable-armv5te --extra-ldflags=”-Wl,-T,/cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=/cygdrive/c/android-ndk/platforms/android-8/arch-arm/usr/lib -L /cygdrive/c/android-ndk/platforms/android-8/arch-arm/usr/lib -nostdlib /cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/lib/gcc/arm-eabi/4.4.0/crtbegin.o /cygdrive/c/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl” ■エラー arm-eabi-gcc is unable to create an executable file.t/windows ■うまくいった ./configure --enable-version3 --enable-gpl --enable-nonfree --disable-stripping --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-ffprobe --disable-encoders --disable-muxers --disable-devices --disable-protocols --enable-protocol=file --enable-avfilter --disable-network --disable-mpegaudio-hp --disable-avdevice ■参考URL android with ffmpet http://xcocoaquax.blogspot.com/2010/11/ffmpegandroid-22.html about ffmpeg install http://babukuma.com/2011/02/linuxffmpeg.html ffmpeg install on cygwin http://www.kkaneko.com/rinkou/cygwin/ffmpeg.html development of android ndk http://www.usefullcode.net/2010/12/android_ndkzlib.html ■minwg-android-ndkつかってみた cygwin 事前導入 For Windows, a recent release of Cygwin is required GNU Make 3.81 or later GNU Makeinfo (most recent version) GIT (for downloading toolchain sources) Most recent GNU Libtool packages (automake, autoconf etc) GNU C/C++ 3.x or later (for Windows, it should be exactly 3.x, not 4.x) ncurses library (for Cygwin, it should be ncurses-devel package) GNU flex (most recent version) patch utility. Most likely, it is already installed if you are using Linux or Mac OS X; however, in Cygwin it should be installed explicitl wget automake cd ~ wget http://www.crystax.net/data/android-ndk-r4-crystax-4.diff wget http://www.crystax.net/data/android-ndk-r4-windows-crystax-4.zip cmd /c ”icacls . /grant Everyone:(F) /T” gunzip android-ndk-r4-windows-crystax-4.zip mv android-ndk-r4-crystax-4.diff android-ndk-r4-windows-crystax-4/android-ndk-r4-windows-crystax/. cd android-ndk-r4-windows-crystax-4/android-ndk-r4-windows-crystax patch -p1 < android-ndk-r4-crystax-4.diff ←できなかった export ANDROID_NDK_ROOT=`pwd` export CC=gcc-3 ./build/tools/download-toolchain-sources.sh --release=myrelease --package --over-http --verbose --for-date=2010-07-15 ←時間かかる ./build/tools/rebuild-all-prebuilt.sh --verbose --package --toolchain-src-pkg=/tmp/android-ndk-toolchain-myrelease.tar.bz2 ■実行エラー コンパイルオプションにenable-encodeとmuxerが必要 ■コンパイルエラー parse_number_or_die エラーでパッチを適用。 http://patches.libav.org/patch/2476/ RUSAGE_SELF 1 -> 0 HAVE_SETRLIMIT 1 -> 0 version.hを作成 > #define FFMPEG_VERSION ”UNKNOWN”