【发布时间】:2012-05-10 02:27:31
【问题描述】:
我知道这个问题可能与许多其他问题重复,但没有好的答案也没有好的教程可供使用
我想在我的项目中使用 ffmpeg 我在 windows 上使用 android ndk7 不知道要下载什么 ffmpeg 代码,可用的编译教程适用于 UBUNTU 对 windows 没什么用
非常感谢一个非常好的答案。
【问题讨论】:
标签: java android android-ndk ffmpeg
我知道这个问题可能与许多其他问题重复,但没有好的答案也没有好的教程可供使用
我想在我的项目中使用 ffmpeg 我在 windows 上使用 android ndk7 不知道要下载什么 ffmpeg 代码,可用的编译教程适用于 UBUNTU 对 windows 没什么用
非常感谢一个非常好的答案。
【问题讨论】:
标签: java android android-ndk ffmpeg
我从来没有能够在 Windows 下为 Android 构建 FFMPEG,但在 Ubuntu 下成功地做到了(虽然遇到了一些困难)。
我使用 Oracle VM Virtual Box 免费软件在 Windows 下模拟 Ubuntu 机器。
然后我使用来自 bambuser http://bambuser.com/opensource 的脚本构建了 FFMPEG。
然后我将生成的目录移动到我项目的 jni 文件夹下的 windows 中,并从我的 Android.mk 中引用这些库
FFMPEG_DIR := ffmpeg
ifeq ($(TARGET_ARCH_ABI), armeabi)
FFMPEG_DIR := $(FFMPEG_DIR)/armeabi
else
ifeq ($(TARGET_ARCH_ABI), armeabi-v7a)
FFMPEG_DIR := $(FFMPEG_DIR)/armeabi-v7a
endif
endif
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavcore
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavdevice
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavfilter
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libswscale
LOCAL_SRC_FILES := $(FFMPEG_DIR)/lib/$(LOCAL_MODULE).a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)
【讨论】:
您可以将其用作 build_android.sh,我对其进行了测试,它对我有效
#!/bin/bash
NDK=D:/android/ndk/android-ndk-r10d
SYSROOT=$NDK/platforms/android-8/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
您还需要运行以下命令:
dos2unix build_android.sh
chmod +x build_android.sh
./build_android.sh
使用this Tutorial 作为参考
【讨论】: