好文章轉載下,出處http://blog.csdn.net/fgwf1/archive/2011/01/05/6118686.aspx
為了能在android平台上播放全格式的多媒體檔案,我們需要自己做一個多媒體播放器。android內建的opencore系統解碼格式較少,只支援
mp4和ogg,並且結構不是很好理解。如果要加其他的解碼方式實在太費勁。經過考慮,基於ffmpeg實現全功能的播放器比較容易並且成本比較低。
(ffmpeg移植後的內容我已經放到git@github.com:windsome/ffmpeg-android.git上,有興趣的可以直接下
載,在android2.1上編過,不知道在其他android版本上能不能編過)
本文討論製作全格式多媒體播放器的第一步:ffmpeg 移植。
第一步:得到別人已經移植過的一個比較舊的android平台上的ffmpeg。地址為 http://gitorious.org/~olvaffe/ffmpeg/ffmpeg-android ,我們將使用其*.mk 檔案。我將此源碼放到一個臨時目錄中。
第二步:得到新版本的ffmpeg。地址為 http://ffmpeg.org/download.html 。一般用git clone 得到。我將源碼放到了android源碼樹的external/目錄下。
第三步:configure ffmpeg ,目的是得到android平台上的config.mak和config.h檔案。所以只需要configure成功即可,不必編譯,稍候我們會在android源碼樹下編譯。
export PREBUILT=/home/Dev/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0
./configure --target-os=linux
--arch=armv41
--enable-cross-compile
--cc=$PREBUILT/bin/arm-eabi-gcc
--cross-prefix=$PREBUILT/bin/arm-eabi-
--nm=$PREBUILT/bin/arm-eabi-nm
--extra-cflags="-fPIC -DANDROID"
--enable-static
--disable-shared
--disable-asm
--disable-yasm
--prefix=`pwd`/android_bin
--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x
-Wl,-rpath-link=/home/Dev/android/out/target/product/generic/obj/lib
-L/home/Dev/android/out/target/product/generic/obj/lib -nostdlib
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o
$PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"
解釋一下,PREBUILT為我的android編譯器路徑,我使用的是android源碼樹下的tool-chian。configure命令中除了目錄可能不一樣外,其他的應該不需要做改動。
第四步:將臨時目錄中的ffmpeg-android下的*.mk拷貝到android源碼樹的external/ffmpeg目錄下。這樣就完成了移植。(這一步中,可能需要做修改,我將需要修改的檔案打了個包,放在附件中)
第五步:在android目錄下make libavutil libavcodec libavformat libswscale。
註:我已經基於最新的ffmpeg(0.6版本-git-6157eab)做的改動上傳了。你只需要將附件解壓,並替換源ffmpeg中相應的檔案,即可直接執行第五步。