1. 环境 ubuntu 我的是13.10 ndk r9 64位
2. 下载ffmpeg http://www.ffmpeg.org/download.html 找到
FFmpeg 2.1.3 "Fourier"
2.1.3 was released on 2014-01-15. It is the latest stable FFmpeg release from the 2.1 release branch, which was cut from master on 2013-10-28. Amongst lots of other changes, it includes all changes from ffmpeg-mt, libav master of 2013-10-27, libav 9 as of 2013-10-27.
It includes the following library versions:
libavutil 52. 48.101 libavcodec 55. 39.101 libavformat 55. 19.104 libavdevice 55. 5.100 libavfilter 3. 90.100 libswscale 2. 5.101 libswresample 0. 17.104 libpostproc 52. 3.100
下载之后 解压到 $NDK/sources 文件夹下面,这是因为编译快捷以及方便使用
3. 找到 ffmpeg-xxx/configure 找到如下几行:
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)' SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
上面几行会导致libavcodec.so.<version> (e.g. libavcodec.so.55),不会被android承认 ,修改为;
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
4. 复制下面的代码到文本中 并命名为 build_android.sh,注意这个文件应该保存到 ffmpeg-xxx/configure 同一个文件夹下
#!/bin/bash NDK=$HOME/Desktop/adt/android-ndk-r9 SYSROOT=$NDK/platforms/android-9/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-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
注意修改 NDK=$HOME/Desktop/adt/android-ndk-r9 这行
5. 执行
sudo chmod +x build_android.sh ./build_android.sh
6.输出 $NDK/sources/ffmpeg-xxx/android, arm/lib 和arm/include
注意 arm/lib包含了两个 library files (e.g.: libavcodec-55.so) 和 symbolic links (e.g.: libavcodec.so) 我们需要删掉 symbolic links .
7. 让ffmpeg Libraries用在我们的工程下
为了使ffmpeg libraries 可以作为 reusable modules, 需要添加一个文件 $NDK/sources/ffmpeg-xxx/android/arm/Android.mk 使用如下内容,
include $(CLEAR_VARS) LOCAL_MODULE:= libavcodec LOCAL_SRC_FILES:= lib/libavcodec-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavformat LOCAL_SRC_FILES:= lib/libavformat-55.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libswscale LOCAL_SRC_FILES:= lib/libswscale-2.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavutil LOCAL_SRC_FILES:= lib/libavutil-52.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libavfilter LOCAL_SRC_FILES:= lib/libavfilter-3.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE:= libwsresample LOCAL_SRC_FILES:= lib/libswresample-0.so LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include include $(PREBUILT_SHARED_LIBRARY)
这就是为什么我们把源码放在source文件夹下,ndk会自动寻找
8.使用
使用 libraries在Android project’s jni/Android.mk file,
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := tutorial03 LOCAL_SRC_FILES := tutorial03.c LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil include $(BUILD_SHARED_LIBRARY) $(call import-module,ffmpeg-2.0.1/android/arm)
这里你就会发现 我们用到了source中调用了 import-module 使用相对路径去调用。
相关推荐
用ndk r9编译的ffmpeg2.2.4库,可以在android中通过jni方法调用, 头文件请自己到官网下载源代码
详细的描述了Android NDK下编译ffmpeg开源库的步骤。
ubuntu下ndk编译ffmpeg0.8.1,详细介绍了如何将ffmpeg移植到linux下,生成的so动态链接库文件可以直接在android里使用。
在NDK9 环境下编译 Android 下的 ffmpeg, 可以编译动态库, 静态库。可以用于Android下h264解码。
ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件ndk编译ffmpeg修改后的configure文件
在ubuntu 64位下使用android-ndk-r9d 编译最新版本ffmpeg2.2 所生成的8个so库:libavcodec.so libavdevice.so libavfilter.so libavformat.so libavutil.so libswresample.so libswscale.so libpostproc.so 以及对应...
用Android_NDK编译FFmpeg,RTSP手机视频
该资源为NDK编译ffmpeg中的YUV转换BGR代码
ffmpeg4.16 ndk21 android 21 版本编译的库,包含 arm-v7a、arm-v8,包含include、动态链接库.so文件。
android-ndk-r9c ffmpeg android
android-ndk-r9c ffmpeg android
android-ndk-r9c ffmpeg android
ubuntu 14.04 + NDK10d+ffmpeg 3.0编译出来的库和头文件。可以在安卓环境下使用。
将其解压得到download目录直接放在opencv\sources\3rdparty\ffmpeg下即可
Using Android NDK r9b builds boost 1.53.0, including the build script. Usage: ./build-android.sh $NDK_ROOT
arm平台下使用ndk工具交叉编译python,用于android系统;android-arm平台ndk交叉编译python
android-ndk-r9c ffmpeg android
前提准备 * Android Studio+Cmake+云服务器 * 这里是在阿里云服务器上编译,采用Ubuntu 16.04 64位 * 采用android-ndk-r10e-linux-x86_64.bin编译ffmpeg-2.6.9 * 采用Xshell和Xftp进行服务器的操作
针对之前有的小伙伴说使用hello-jni测试 NDK-r9编译好的最新的FFmpeg2.2的所有so库和头文件 的时候。在使用cygwin编译jni的时候会报错:”undefined reference to 'avcodec_version'“ 的问题,所以现在把本人在...
Ubuntu20系统,Android NDK-r21e 编译 FFmpeg4.2.4; 编译出libavcodec.so libavdevice.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale.so;