經過兩天努力 終於成功移植FFMPEG0.7.6到 ADNROID中 下面是在移植過程遇到的問題 ,歡迎轉載 請註明出處
tools:
ffmpeg-0.7.6
android-ndk-r4b
ubuntu 10.11
路徑:root\android\android-ndk-r4b\samples\FFMPEG\jni\ffmpeg-0.7.6
移植過程需要注意幾點 :
1 :修改libavutil/libm.h中靜態方法 前面的static全部去掉
2:修改ffmpeg-0.7.6中./config.sh執行後的config.h檔案中的 一些標誌 如下:
sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i 's/HAVE_SYMVER 1/HAVE_SYMVER 0/g' config.h
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i 's/#define restrict restrict/#define restrict /g' config.h
3: 出現如下錯誤
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavutil.a(inverse.o):(.rodata+0x0): multiple definition of `ff_inverse'
/home/chf0001/android-ndk/android-ndk-r5/samples/ffmpeg/obj/local/armeabi/libavcodec.a(inverse.o):(.rodata+0x0): first defined here
直接修改libavcodec/Makefile,把下面一行刪掉:
OBJS-$(!CONFIG_SMALL) += inverse.o
4:分別把libavutil、libavcodec、libavformat、libavfilter、libpostproct和libswscale下的Makefile檔案中下面兩行刪除掉:
include $(SUBDIR)../subdir.mak
include $(SUBDIR)../config.mak
5:需要記住在ffmpeg-0.7.6下面建立av.mk
6:若用ndk-r4b 最後產生的ffmpeg.so是 1.6k,則需要在build/core/build-binary.mk中的添加whole_satatic_libraries定義
7:以上各點必需正確做到準確無誤,有一個出錯編繹不會成功,正常的ffmpeg.so>=3.2M.上述原因就不多說了.這是我這一兩天來出現問題的總結 希望對大家有所協助,下面我將上傳各目錄下面的 Android.mk.如果你的環境和我一樣 可以直接用.
Android.mk檔案地址