编译的是最新版2.2.3。再说编译环境
操作系统 ubuntu14.04 32位(实在不建议使用64位 惨痛的教训)
adt:Build: v22.6.2-1085508
NDK:R9d
因为之前就看到有人提到0.8版会出现一些问题,这也难怪,所以开始目标就瞄准了最新的代码进行编译
首先下载FFmpeg源码,从http://ffmpeg.org/download.html 可以获取最新版的源码,不管是git或者直接下载解压都可以 下载完成后放入NDK目录下source文件夹 文件名大概位ffmpeg-2.2.3,
1.首先修改configuration文件,会直接影响到生成的so文件命名
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' SLIB_INSTALL_LINKS='$(SLIBNAME)'
2.生成build_android.sh文件
#!/bin/bash NDK=$HOME/Desktop/adt/android-ndk-r9d SYSROOT=$NDK/platforms/android-9/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86 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的目录,如果一再找不到某些编译器 例如g++ 可以试着SYSROOT以及TOOLCHAIN都写成绝对路径,编译如果失败 密切注意config.log文件,最下几行,看好log可以让你少走很多弯路,一味的机械的执行别人写的教程只会让你离成功编译越来越远,找到一条属于自己的路。之前系统64位编译时,会出现乱码,侥幸贼心不死,回到家以后又尝试了一下,一次编译过去,至此发现本地环境有问题,一样的代码一个的脚本,两个结果,没有精力深究,换到32位,一帆风顺。(家里是64位)
至此,应该创建了android文件夹 并且文件夹下有了arm文件夹。恭喜你,编译成功了。去掉lib中的link文件,就剩下调用了。
3.在android/arm目录下创建Android.mk文件 直接影响到后面项目中的加载以及调用。(放到source下就是为了在多个项目中统一调用)
LOCAL_PATH:= $(call my-dir) 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-4.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)
这里需要注意的是文件名 我在编译时filter已经到了-4 而参考的mk还是写的-3 不改会提示找不到文件
到现在 有了so文件 也有了so文件的声明 在项目里见效果吧 项目也只需引用该本地资源即可
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.2.3/android/arm)
编译过程中也经历了无数的失败 也深刻认识到拿来注意多害人 弯路走多了不要紧 能吸取教训就行
我的指路明灯:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/
相关推荐
ndk25C编译的android下的ffmpeg6.0,集成v4l2视频采集和pulse音频采集
ijkplayer ffmpeg android独立编译.docx
ffmpeg版本4.3.1,openssl版本1.1.1i, android cup架构支持armeabi-v7a,arm64-v8a,x86,x86_64,ffmpeg和openssl都是基于Android API level 21编译的。自测播放本地视频文件,http视频文件和https视频文件均可正常...
ffmpeg6.1安卓交叉编译库 解压查看FFmpegLib/src/main/jniLibs/ 目录下的 arm64-v8a armeabi-v7a x86 x86_64 工程里有调用的示例,可以直接编译。
FFmpeg Android 编译以及普通调用,里面有jni原始文件和 .so文件
Android ffmpeg x264 编译脚本
4.0.2的编译过的ffmpeg全款so for Android,给有需要的朋友直接学习ffmpeg
build_android.sh ffmpeg编译android库的脚本,ffmpeg2.6、1.1.2编译正常
android各种架构下面的 ffmpeg h264编译脚本
详情请参考:http://blog.csdn.net/teisun/article/details/7531889
分别基于 FFmpeg 5.0.1和FFmpeg 4.3.2,编译后的so文件,用于实现Android快速接入FFmpeg 包括arm64-v8a和armeabi-v7a的libavcodec.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale...
ffmpeg android交叉编译后的相关库文件, so文件,示例文件等,包括arm64和armv7。
android 成功编译 ffmpeg0.6,需要你参考这个帖子http://write.blog.csdn.net/postedit/8106042
FFMPEG开发QTonAndroid的工程(QT5.12),附带FFMPEG库,可以直接编译到Android设备进行开发。 FFMPEG使用NDK_R19C编译。 这是一个简单的DEMO工程,可以直接使用QT打开,编译部署到Android设备运行。 注意: 这个工程...
资源文件为Mac下编译Android平台的FFmpeg脚本,支持动态(so)库、静态(a)库,支持架构:arm(armv7-a)、arm64、x86、x86_64,NDK版本需大等于r15c。 脚本为原创,若积分不够,可参考原文:...
基于android-ndk-r10b ffmpeg3.1版本编译成功的so库及编译的工程 并且集成x264编码库。
1 支援h264软编码 2 编译ffmpeg全平台版本 3 支援各种自定义编译参数
android版ffmpeg的编译脚本文件,网上复制粘贴容易出现格式问题。
ubuntu下编译ffmpeg 2.5.1 包含头文件和so库,可直接移植使用。