我們想要在Android上面開發自己的media player,第一個想到的就是利用FFmpeg來實作。FFmpeg是一個跨平台的編解碼函式庫,我們可以呼叫它所提供的API來完成。另 外,FFmpeg有提供一個小程式ffplay,它本身就是一個media player,所以我們打算以ffplay作為程式的基礎。以 下是這次我所用到的開發環境:- Cygwin- Android NDK:android-ndk-r4b-windows- FFmpeg:0.6.1- SDL:1.2.14《Step 1》首先建立一個Android的project。《Step 2》建立一個資料 夾$(PROJECT)/jni/libs,然後參考【將FFmpeg整合至Android平台】,將libavcodec.a、libavformat.a、 libavutil.a、libpostproc.a和libswscale.a拷貝至此。《Step 3》從 ffplay的程式碼中,可以發現它內部會用到SDL的函式。因為FFmpeg只負責編解碼,如果想要將解出來的影像資料畫到螢幕上去,或是將聲音播放出 來,這時就會需要SDL來幫忙把資料傳給device。可以參考【將SDL整合至Android平台】,將libSDL.a拷貝至$(PROJECT)/jni/libs。《Step 4》將ffplay.c、cmdutils.c和cmdutils.h放到$(PROJECT)/jni底下,然後建立一個Makefile:TARGET = libjniomx.soSOURCES = $(wildcard *.c)CFLAGS = -I../../../build/platforms/tegra/include/openmax/il/ -I/usr/local/include/SDL/ -I./ffmpeg/ -std=c99LDFLAGS = -lstdc++ -lc -lm -llog -lnvomx -lavformat -lavcodec -lavutil -lswscaleLDFLAGS += -L./ffmpeg/libs/ -lSDLinclude ../../../build/build.mk《Step 5》在$(PROJECT)/jni底下執行make,接著透過Eclipse將project build出來。《Step 6》Install到Android平台上會發現程式跑不起來,我們可以利用debug模式來看問題出在哪裡。此時會出現下面的 message:No available video deviceTrace程式會得到開啟/dev/graphics/fb0失敗的現象。《Step 7》參考下面的連結:http://groups.google.com/group/android-ndk/browse_thread/thread/9cb5a34e0baae1f0Linux的framebuffer在存取上會有permission方面的問題,因此我 們的程式無法正常運行。《Step 8》結論:以FFmpeg加上SDL所實作的media player,無法在Android平台上作用。