編輯:關於Android編程
最近兩天為了測試使用ffmpeg獲取視頻圖片的效率問題,玩了一把ffmpeg的移植工作. 在這裡作下記錄。
所有測試都只在mac系統中測試。
在方官網頁中http://ffmpeg.org/download.html 中有ffmpeg的git地址:
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
shell中運行到要存放的目錄運行上命令
172-15-70-196:ffmpeg jerome$ pwd /Users/jerome/dev/ffmpeg 172-15-70-196:ffmpeg jerome$ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
就會在當前目錄中生成ffmpeg子目錄,目錄中包含ffmpeg的源代碼。
我目前的源碼目錄為 :/Users/jerome/dev/ffmpeg/ffmpeg
下面是我注釋掉的和修改的內容
3220 #SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' 3221 #LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' 3222 #SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' 3223 #SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)' 3224 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' 3225 LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"' 3226 SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' 3227 SLIB_INSTALL_LINKS='$(SLIBNAME)'
在/Users/jerome/dev/ffmpeg/ffmpeg中建立build_andriod_mac.sh文件
文件內容為
#!/usr/bin/env bash export NDK=/Users/jerome/dev/android-ndk-r12b export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64 export PLATFORM=$NDK/platforms/android-23/arch-arm export PREFIX=$NDK/sources/ffmpeg/android build_one(){ ./configure --target-os=linux \ --prefix=$PREFIX --enable-cross-compile \ --enable-runtime-cpudetect --disable-asm \ --arch=arm --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ --cross-prefix=$PREBUILT/bin/arm-linux-androideabi \ --disable-stripping --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ --sysroot=$PLATFORM --enable-gpl --enable-shared --disable-static \ --enable-small --disable-ffprobe --disable-ffplay --disable-ffmpeg \ --disable-ffserver --disable-debug \ --extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" } build_one make clean make make install
接著修改文件權限為可執行
chmod 777build_andriod_mac.sh
NDK路徑:NDK路徑要跟自己設置的版本一致。我的版本是
export NDK=/Users/jerome/dev/android-ndk-r12b
PRODUILT變量: 這個要一致,我就在這問題是查了好久才解決的,就是確保你的路徑存在!
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
PLATFORM變量: 設置ok ! export PLATFORM=$NDK/platforms/android-23/arch-arm
生成存放路徑PREFIX: 為了最後使用ndk-build生成工具方便,我存放到了ndk環境路徑下面.
還要注意其它設置了路徑的目錄是否存在(這主要跟ndk版本有關)。
官方地址https://developer.android.com/ndk/downloads/index.html
目前官方地址不好下載,我找了個服務器進行下載http://mirrors.neusoft.edu.cn/android/repository/?C=M&O=D
按時間倒序排序 找到最新的版本:
我是mac系統所以下載了android-ndk-r12b-darwin-x86_64.zip 版本。進行解壓到目錄/Users/jerome/dev/, 在這目錄下生成了ndk目錄android-ndk-r12b, 所以ndk路徑就為
/Users/jerome/dev/android-ndk-r12b
就可以正常使用了。
172-15-70-196:ffmpeg jerome$ pwd /Users/jerome/dev/ffmpeg/ffmpeg 172-15-70-196:ffmpeg jerome$ chmod 777 build_andriod_mac.sh 172-15-70-196:ffmpeg jerome$ ./build_andriod_mac.sh
172-15-70-196:android jerome$ pwd /Users/jerome/dev/android-ndk-r12b/sources/ffmpeg/android 172-15-70-196:android jerome$ ls include lib 172-15-70-196:android jerome$
libavdevice-57.so libavfilter.so libavutil-55.so libpostproc.so libswscale-4.so 172-15-70-196:android jerome$ ls -l lib total 19640 -rwxr-xr-x 1 jerome staff 6336784 9 2 17:51 libavcodec-57.so lrwxr-xr-x 1 jerome staff 16 9 2 17:51 libavcodec.so -> libavcodec-57.so -rwxr-xr-x 1 jerome staff 98208 9 2 17:51 libavdevice-57.so lrwxr-xr-x 1 jerome staff 17 9 2 17:51 libavdevice.so -> libavdevice-57.so -rwxr-xr-x 1 jerome staff 1358684 9 2 17:51 libavfilter-6.so lrwxr-xr-x 1 jerome staff 16 9 2 17:51 libavfilter.so -> libavfilter-6.so -rwxr-xr-x 1 jerome staff 1450792 9 2 17:51 libavformat-57.so lrwxr-xr-x 1 jerome staff 17 9 2 17:51 libavformat.so -> libavformat-57.so -rwxr-xr-x 1 jerome staff 304764 9 2 17:51 libavutil-55.so lrwxr-xr-x 1 jerome staff 15 9 2 17:51 libavutil.so -> libavutil-55.so -rwxr-xr-x 1 jerome staff 24240 9 2 17:51 libpostproc-54.so lrwxr-xr-x 1 jerome staff 17 9 2 17:51 libpostproc.so -> libpostproc-54.so -rwxr-xr-x 1 jerome staff 112832 9 2 17:51 libswresample-2.so lrwxr-xr-x 1 jerome staff 18 9 2 17:51 libswresample.so -> libswresample-2.so -rwxr-xr-x 1 jerome staff 322464 9 2 17:51 libswscale-4.so lrwxr-xr-x 1 jerome staff 15 9 2 17:51 libswscale.so -> libswscale-4.so drwxr-xr-x 10 jerome staff 340 9 2 17:51 pkgconfig 172-15-70-196:android jerome$ ls -l include total 0 drwxr-xr-x 19 jerome staff 646 9 2 17:51 libavcodec drwxr-xr-x 4 jerome staff 136 9 2 17:51 libavdevice drwxr-xr-x 7 jerome staff 238 9 2 17:51 libavfilter drwxr-xr-x 5 jerome staff 170 9 2 17:51 libavformat drwxr-xr-x 75 jerome staff 2550 9 2 17:51 libavutil drwxr-xr-x 4 jerome staff 136 9 2 17:51 libpostproc drwxr-xr-x 4 jerome staff 136 9 2 17:51 libswresample drwxr-xr-x 4 jerome staff 136 9 2 17:51 libswscale 172-15-70-196:android jerome$
這文件作用主要是告訴ndk怎麼把ffmpeg的.so的路徑及頭文件連接起來。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-57.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-57.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-4.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-55.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-6.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswresample LOCAL_SRC_FILES:= lib/libswresample-2.so LOCAL_EXPORT_C_INCLUDES := include include $(PREBUILT_SHARED_LIBRARY)
LOCAL_PATH:$(callmy-dir) 把當前文件夾(即:Android.mk所在的路徑)設置成 當前路徑。 include$(CLEAR_VARS) 請除掉除LOCAL_PATH之外的變量信息,目前是為了防止引入不必要的環境變量,影響後面的模塊的處理流程 LOCAL_MODULE:=libavcodec 設置當前模塊名為 libavcodec LOCAL_SRC_FILES:=lib/libavcodec-57.so 當前模塊對應的源文件,ndk默認在 LOCAL_PATH路徑下查找,如果找不到,會報錯。 LOCAL_EXPORT_C_INCLUDES:=include 設置頭文件目錄,目的是ndk編譯時能夠找到頭文件,也是LOCAL_PATH下的include文件。也可以寫成 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/include 效果是一樣的。 include$(PREBUILT_SHARED_LIBRARY 負責收集自從上次調用 ‘include$(CLEAR_VARS)’以來,定義在LOCAL_XXX變量中的所有信息,並且決定編譯什麼,如何正確地去做。並根據其規則生成動態庫。 當前例子中,只是把 lib/libavcodec-57.so文件進行了復制。 上述文件定義了庫有:libavcodec,libavformat,libswscale,libavutil,libavfilter,libswresample. 而生成的lib中還有libpostproc,libavdevice, 在我第一個例子中沒有用到這兩個庫,所以就沒有添加進Android.mk文件中,自己偷了一下懶,為了使用方便,讀者可自行加上。
172-15-70-196:android jerome$ pwd /Users/jerome/dev/android-ndk-r12b/sources/ffmpeg/android 172-15-70-196:android jerome$ ls Android.mk include lib 172-15-70-196:android jerome$
到此,環境配置就完成了。
這一篇主要是環境配置。 下一篇將展示實際例子如何使用。
最後我的配置源文件:
配置文件及android_build_mac.sh文件下載
游戲碰撞的大致可以分為這幾種類 1.主角與邊界的碰撞,限制主角不能走出手機屏幕外。 2.主角與物理層的碰撞,與地圖中的房子 桌子 椅子等
這裡先貼出原文,下次再來翻譯;:p 原文地址:http://developer.android.com/training/basics/actionbar/styli
1、把aar復制到項目中的 libs 裡面 2、在module 裡面的build.gradle 的根目錄添加repositories{ flatDir {
Android開發中的圖片存儲本來就是比較耗時耗地的事情,而使用第三方的七牛雲,便可以很好的解決這些後顧之憂,最近我也是在學習七牛的SDK,將使用過程在這記錄下來,方便以