第18课 移植FFmpeg和openCV到Android环境

要在Android下从事音视频开发,同样也绕不开ffmpeg+opencv,不管是初学者还是有一定经验的程序,面临的首要问题就是环境的搭建和库文件的编译配置等问题,特别是初学者,往往会在实际开发前浪费大量的时间来编译ffmpeg及opencv的动态库.so文件。因此作者整理了自己实际开发用的ffmpeg及opencv库文件(ffmpeg已集成x264+aac+mp3编码),并集成到Eclipse开发环境中(JNI方式)实际运行成功后作为一个模板提供给大家,方便初学者快速上手进行实际开发,节省您大量宝贵时间。当然,Android SDK和NDK需要自己下载,然后在Eclipse中指定相应路径就可以了。

1.下载模板文件到本地磁盘并解压,解压后的路径如E:\jPro\demo\AndroidManifest.xml。

2.启动eclipse并导入该项目。

3.导入后如图所示:

4.用usb连接线把你的手机与电脑连接起来并允许在手机上调试项目。

5.右单击项目并选择调试为Android程序。

6.选中手机单击ok按钮会在手机上安装应用,安装成功后显示如下界面则表示成功。

然后你就可以在此基础上自由的开发了!

现在,让我们回过头来看下与jni有关的重要选项。

7./demo/jni/Android.mk:位于项目 jni子目录中,用于向构建系统描述源文件和共享库,可以在其中配置动态链接库.so,类似于vs2013中加载.dll,在该项目中,其内容如下:

bash 复制代码
LOCAL_PATH := $(call my-dir)


#ffmpeg lib
include $(CLEAR_VARS)
LOCAL_MODULE := avcodec
LOCAL_SRC_FILES := lib/libavcodec.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avdevice
LOCAL_SRC_FILES := lib/libavdevice.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avfilter
LOCAL_SRC_FILES := lib/libavfilter.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avformat
LOCAL_SRC_FILES := lib/libavformat.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := avutil
LOCAL_SRC_FILES := lib/libavutil.so
include $(PREBUILT_SHARED_LIBRARY)


include $(CLEAR_VARS)
LOCAL_MODULE := postproc
LOCAL_SRC_FILES := lib/libpostproc.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swresample
LOCAL_SRC_FILES := lib/libswresample.so
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := swscale
LOCAL_SRC_FILES := lib/libswscale.so
include $(PREBUILT_SHARED_LIBRARY)

#x264 lib
include $(CLEAR_VARS)
LOCAL_MODULE := libx264
LOCAL_SRC_FILES := lib/libx264.161.so
include $(PREBUILT_SHARED_LIBRARY)

#opencv lib
include $(CLEAR_VARS)
LOCAL_MODULE := opencv
LOCAL_SRC_FILES :=lib/libopencv_java3.so
include $(PREBUILT_SHARED_LIBRARY)

#demo
include $(CLEAR_VARS)
LOCAL_MODULE    := demo
LOCAL_SRC_FILES := demo.cpp


LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
##-landroid for native windows
LOCAL_LDLIBS := -llog -landroid 
#LOCAL_LDLIBS := -llog -lz 
LOCAL_SHARED_LIBRARIES :=opencv libx264 avcodec avdevice avfilter avformat avutil postproc swresample swscale


include $(BUILD_SHARED_LIBRARY)

8./demo/jni/Application.mk:位于应用项目目录中的 jni下,用于指定 ndk-build 的项目级设置。

bash 复制代码
APP_ABI := armeabi-v7a
APP_STL:=gnustl_static  
APP_CPPFLAGS:=-frtti -fexceptions  
相关推荐
爱和冰阔落1 小时前
C++模板进阶 非类型模板参数 模板的特化 分离编译的深入探索
c++·面试·编译原理·模板
charlie1145141917 小时前
精读C++20设计模式:行为型设计模式:中介者模式
c++·学习·设计模式·c++20·中介者模式
楼田莉子7 小时前
Qt开发学习——QtCreator深度介绍/程序运行/开发规范/对象树
开发语言·前端·c++·qt·学习
oioihoii8 小时前
超越 std::unique_ptr:探讨自定义删除器的真正力量
c++
Pika8 小时前
深入浅出 Compose 测量机制
android·android jetpack·composer
Gohldg8 小时前
C++算法·贪心例题讲解
c++·数学·算法·贪心算法
天若有情6738 小时前
C++空值初始化利器:empty.h使用指南
开发语言·c++
远远远远子8 小时前
类与对象 --1
开发语言·c++·算法
无敌最俊朗@9 小时前
C/C++ 关键关键字面试指南 (const, static, volatile, explicit)
c语言·开发语言·c++·面试
长沙红胖子Qt9 小时前
FFmpeg开发笔记(十二):ffmpeg音频处理、采集麦克风音频录音为WAV
ffmpeg·pcm·wav·录音·麦克风