ãä¸ãå®è£
cygwinãé
ç½®ndkåä¸è½½ffmpegæºç
ããè¿æ¥å°±ä¸è¯´äºï¼ç½ä¸å¾å¤æç¨ï¼å次声ææ¬æç¨åªé对ndk R4è¿ä¸ªçæ¬ãéè¦è¯´æçæ¯ï¼æ¬äººå¨cygwinå®è£
è·¯å¾ä¸ç.bash_profileæ件ä¸æå®çNDKè·¯å¾å¦ä¸æ示ãå 为æ¬äººè£
äºå¥½å 个NDKï¼å æ¤åé¢çR4åªæ¯ä¸ªæ 示ã
ããNDK_R4=/cygdrive/d/android-ndk-r4
ããexport NDK_R4
ããäºãç¼è¯ååå¤åç¼è¯
ãã1ãå 为R4è¿ä¸ªNDKæ¯è¾æ§ï¼äº¤åç¼è¯çæ¶åéè¦å¨ä¸ä¸ªAndroidç¯å¢ä¸ï¼é£ç®åï¼å建ä¸ä¸ªAndroid空项ç®ï¼ææ´ä¸ªé¡¹ç®æ·åºæ¥ï¼å¨é¡¹ç®ä¸å»ºç«ä¸ä¸ªæ件夹jniï¼æffmpeg0.6.6çæºç æ·è¿å»ãå·¦å¾ï¼HelloJniå°±æ¯ææ°å»ºçä¸ä¸ªé¡¹ç®ï¼Android.mkè¿æ¶åä½ è¿æ²¡æï¼å
ä¸ç¨ç®¡ãå³å¾ffmpeg-0.6.6æ件夹çå
容è¦è·æä¸æ ·ï¼ç´æ¥å°±æ¯ä»£ç ãæè¿éçffmpeg_cywinè¿ä¸ªæ件夹æ¯é便建çï¼æ¾åªéæ æè°çã
ãã
ãã
ãã2ãå¨ffmpeg-0.6.6ä¸å»ºç«ä¸ä¸ªæ件config.sh,å
容å¦ä¸æ示ãéè¦æ³¨æçæ¯ï¼unixä¸çæ¢è¡ç¬¦åwindowsä¸æ¯ä¸ä¸æ ·ï¼å¦æç´æ¥æ·è´å°windowsä¸çè®°äºæ¬ï¼åé¢æ§è¡è¿ä¸ªconfig.shçæ¶åä¼åºé®é¢ï¼è¿éæç¨çæ¯notepad++ç¼è¾çï¼å¨ç¼è¾->æ¡£æ¡æ ¼å¼è½¬æ¢->转æ¢ä¸ºUNIXæ ¼å¼ãï¼æ³¨æï¼åé¢çææçAndroid.mkçç¼è¾é½ææ¤è¦æ±ï¼ã
ããç®å说ä¸ä¸è¿ä¸ªconfig.shï¼PREBUILTåPLATFORMæ ¹æ®ä½ å®è£
ndkçä½ç½®èä¸åï¼config.shå
¶å®æ¯ä¸ä¸ªèæ¬ï¼æ§è¡è¿ä¸ªèæ¬çæ¶ååè°ç¨äºå¦å¤ä¸ä¸ªèæ¬configureï¼configure主è¦æ¯æ ¹æ®ç¼è¯é项ï¼ä¸é¢enable disableé£äºï¼ï¼çæç¸åºçç¼è¯é
ç½®ï¼å°±æ¯è¯´ä½ æ³è¦ç¼è¯ffmpegä»ä¹æ¨¡åå°±èªå·±å®å¶ç¼è¯é项çå
容ãåºæ¬ä¸è¿ä¸ªæ件åªè¦ä¿®æ¹ä¸ä¸PREBUILTåPLATFORMå°±è¡ï¼å
¶ä»é½ä¸ç¨æ¹ã
ãã#!/bin/bash
ããexport PREBUILT=D://android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0
ããexport PLATFORM=D://android-ndk-r4/build/platforms/android-8/arch-arm
ãã./configure --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=$PREBUILT/bin/arm-eabi-gcc \
ãã--cross-prefix=$PREBUILT/bin/arm-eabi- \
ãã--nm=$PREBUILT/bin/arm-eabi-nm \
ãã--extra-cflags="-fPIC -DANDROID" \
ãã--disable-asm \
ãã--enable-neon \
ãã--enable-armv5te \
ãã--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/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"
ãã3ãä¿®æ¹configureæ件ï¼æ¾å°ä¸å¾çå
容ï¼ä¿®æ¹ææè¿æ ·ï¼è¿ä¸ªæ¯ç¨æ¥åæ¾æ§è¡èæ¬è¿ç¨ç临æ¶æ件çï¼æè¿éç¨çæ¯Dï¼//NDKï¼ä½ å¯ä»¥è®¾ç½®å
¶ä»å°æ¹ï¼ä½æ¯è¦å
å建好è¿ä¸ªæ件夹ï¼æ¾åªéæ æè°çã
ãã4ãç¶åå¨cywinä¸è¿å
¥ffmpeg0.6.6æ件夹ï¼æ§è¡chmod -x config.shï¼ç¶åæ§è¡./configï¼æ¤è¿ç¨éè¦ä¸å®çæ¶é´ãå¦æè¿ä¸æ¥åºç°é®é¢ï¼å¾æå¯è½æ¯ä½ config.shä¸çPREBUILTåPLATFORMçè·¯å¾è®¾ç½®ä¸å¯¹ï¼æè
æ¯ä½ æ·è´å
容å°config.shçæ¶å没æå¨UNIXæ ¼å¼ä¸ãæ§è¡å®å¦ä¸å¾æ示ã
ãã5ãå¨ffmpeg-0.6.6ä¸ä¼çæä¸ä¸ªconfig.hæ件ï¼ç¼è¾å®ï¼æ¾å°#define restrict restrictè¿ä¸è¡ï¼æå®æ¹æ#define restrict
ãã6ãå¨libavutil/libm.hä¸ï¼æææstaticçæ¹æ³æ³¨éææè
ç´æ¥å æã
ãã7ãä¿®æ¹libavcodec,libavfilter,libavformat,libavutil,libpostprocålibswscaleç®å½çMakeFileæ件ï¼æ¯ä¸ªæ件ä¸ï¼å é¤è¯å¥
ããinclude $( SUBDIR ) ../config.mak å include $ (SUBDIR) .. / subdir.makã
ããlibavcodecä¸çmakefileä¸æç´¢inverse.oï¼æå®æå¨çé£ä¸è¡å æï¼è¦ä¸ç¼è¯çæ¶åä¼å²çªã
ãã8ãå¨ffmpeg-0.6.6æ件夹ä¸ï¼å建av.mkæ件ï¼UNIXæ ¼å¼ï¼ï¼å
容å¦ä¸ï¼
ãã#LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale
ãã#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak
ããinclude $(LOCAL_PATH)/../config.mak
ããOBJS :=
ããOBJS-yes :=
ããMMX-OBJS-yes :=
ããinclude $(LOCAL_PATH)/Makefile
ãã# collect objects
ããOBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)
ããOBJS += $(OBJS-yes)
ããFFNAME := lib$(NAME)
ããFFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))
ããFFCFLAGS = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign
ããFFCFLAGS += -DTARGET_CONFIG=\"config-$(TARGET_ARCH).h\"
ããALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)
ããALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))
ããifneq ($(ALL_S_FILES),)
ããALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))
ããC_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))
ããS_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))
ããelse
ããC_OBJS := $(OBJS)
ããS_OBJS :=
ããendif
ããC_FILES := $(patsubst %.o,%.c,$(C_OBJS))
ããS_FILES := $(patsubst %.o,%.S,$(S_OBJS))
ããFFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))
ãã9ãå¨jniæ件夹ä¸ï¼å建Android.mkï¼UNIXæ ¼å¼ï¼ï¼å
容å¦ä¸ï¼
ããinclude $(all-subdir-makefiles)
ãã10ãå¨ffmpeg-0.6.6æ件夹ä¸ï¼å建Android.mkï¼å
容å¦ä¸ï¼
ããLOCAL_PATH := $(call my-dir)
ããinclude $(CLEAR_VARS)
ããLOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale
ããLOCAL_MODULE := ffmpeg
ããinclude $(BUILD_SHARED_LIBRARY)
ããinclude $(call all-makefiles-under,$(LOCAL_PATH))
ãã11ãå¨ffmpeg-0.6.6\libavformatä¸ï¼å建Android.mkï¼å
容å¦ä¸ï¼
ããLOCAL_PATH := $(call my-dir)
ããinclude $(CLEAR_VARS)
ããinclude $(LOCAL_PATH)/../av.mk
ããLOCAL_SRC_FILES := $(FFFILES)
ããLOCAL_C_INCLUDES := \
ãã$(LOCAL_PATH) \
ãã$(LOCAL_PATH)/..
ããLOCAL_CFLAGS += $(FFCFLAGS)
ããLOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex
ããLOCAL_LDLIBS := -lz
ããLOCAL_STATIC_LIBRARIES := $(FFLIBS)
ããLOCAL_MODULE := $(FFNAME)
ããinclude $(BUILD_STATIC_LIBRARY)
ãã12ãå¨ffmpeg-0.6.6\libavcodecä¸ï¼å建Android.mkï¼å
容å¦ä¸ï¼
ããLOCAL_PATH := $(call my-dir)
ããinclude $(CLEAR_VARS)
ããinclude $(LOCAL_PATH)/../av.mk
ããLOCAL_SRC_FILES := $(FFFILES)
ããLOCAL_C_INCLUDES := \
ãã$(LOCAL_PATH) \
ãã$(LOCAL_PATH)/..
ããLOCAL_CFLAGS += $(FFCFLAGS)
ããLOCAL_LDLIBS := -lz
ããLOCAL_STATIC_LIBRARIES := $(FFLIBS)
ããLOCAL_MODULE := $(FFNAME)
ããinclude $(BUILD_STATIC_LIBRARY)
ãã13ãå¨ffmpeg-0.6.6\libavfilterãlibavutilãlibpostprocålibswscaleä¸ï¼å建Android.mkï¼å
容å¦ä¸ï¼
ããLOCAL_PATH := $(call my-dir)
ããinclude $(CLEAR_VARS)
ããinclude $(LOCAL_PATH)/../av.mk
ããLOCAL_SRC_FILES := $(FFFILES)
ããLOCAL_C_INCLUDES := \
ãã$(LOCAL_PATH) \
ãã$(LOCAL_PATH)/..
ããLOCAL_CFLAGS += $(FFCFLAGS)
ããLOCAL_STATIC_LIBRARIES := $(FFLIBS)
ããLOCAL_MODULE := $(FFNAME)
ããinclude $(BUILD_STATIC_LIBRARY)
ãã14ãç¶åå¨jniç®å½ä¸ï¼è¿è¡$NDK_R4/ndk-build -Bï¼è¿éçå½ä»¤éè¦æ ¹æ®ä½ èªå·±çæ
åµä¿®æ¹ï¼ç¶åå°±å¼å§ç¼è¯äºãè¿ç¨éè¦10æ¥åéï¼æåä¹åï¼ä¼å¨libsä¸ç产libffmpeg.soãå¦æç¼è¯åºæ¥çlibffmpeg.soåªæ1.5kï¼å¾å¦ä¸ä¿®æ¹ä¸ä¸NDKï¼åéæ°ç¼è¯ã
ããæä¸é¢çº¢è²é¨åå å°NDKçbuild/core/build-binary.mkéï¼
ããLOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))
ããLOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))
ãã...
ããstatic_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))
ããstatic_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))
ãã...
ãã$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))
ãã$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))
ãã...
ãã$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)
ãã...
ãã$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)
ãã$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)
ããæ¥çåå°æå¤å±ffmpeg/Android.mkéé¢çLOCAL_STATIC_LIBRARIESæ¹æLOCAL_STATIC_WHOLE_LIBRARIES
温馨提示:答案为网友推荐,仅供参考