第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,在该项目中,其内容如下:

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.cppLOCAL_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 swscaleinclude $(BUILD_SHARED_LIBRARY)

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

APP_ABI := armeabi-v7a
APP_STL:=gnustl_static  
APP_CPPFLAGS:=-frtti -fexceptions  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java 设计模式】设计原则之里氏替换原则

文章目录 1. 定义2. 好处3. 应用4. 示例结语 在软件开发中,设计原则是创建灵活、可维护和可扩展软件的基础。 这些原则为我们提供了指导方针,帮助我们构建高质量、易理解的代码。 ✨单一职责原则(SRP) ✨开放/封闭原则&#xff08…

【前后端的那些事】开源!前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言:最近写项目,发现了一些很有意思的功能,想写文章,录视频把这些内容记录下。但这些功能太零碎,如果为每个功能都单独搭建一个项目&#xff0…

py连接sqlserver数据库报错问题处理。20009

报错 pymssql模块连接sqlserver出现如下错误: pymssql._pymssql.OperationalError) (20009, bDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (passwordlocalhost)\n) 解决办法: 打…

ES搜索的安装以及常用的增删改查操作(已经写好json文件,可以直接使用)

1.es的下载 https://www.elastic.co/cn/downloads/past-releases 2.elasticsearch安装及配置,遇到9200访问不了以及中文乱码,能访问了却要账户密码等问题 Elasticsearch启动后访问9200失败_http://localhost:9200无返回值-CSDN博客 3.开启es服务&#x…

ZZULIOJ 1112: 进制转换(函数专题)

题目描述 输入一个十进制整数n,输出对应的二进制整数。常用的转换方法为“除2取余,倒序排列”。将一个十进制数除以2,得到余数和商,将得到的商再除以2,依次类推,直到商等于0为止,倒取除得的余数…

C语言中关于指针的理解及用法

关于指针意思的参考:https://baike.baidu.com/item/%e6%8c%87%e9%92%88/2878304 指针 指针变量 地址 野指针 野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的) 以下是导致野指针的原因 1.指针…

pytorch 通用训练代码讲解(very good)

文章目录 1. 模型训练参数设置2. 保证模型可复现性3. 设置device4 初始化模型权重及加载预训练权重4.1 初始化模型权重4.2 加载预训练权重4.3 在线下载预训练权重5 k-means 聚类anchors6 多卡同步bn及并行运行7 权重指数平滑ModelEMA7.1 EMA的原理及作用7.2 EMA的实现7.2 EMA的…

mysql原理--redo日志1

1.redo日志是个啥 我们知道 InnoDB 存储引擎是以页为单位来管理存储空间的,我们进行的增删改查操作其实本质上都是在访问页面(包括读页面、写页面、创建新页面等操作)。我们前边唠叨 Buffer Pool 的时候说过,在真正访问页面之前&a…

Hyperledger Fabric 通道配置文件解析

fabric 版本 v2.4.1 Fabric 网络是分布式系统,采用通道配置(Channel Configuration)来定义共享账本的各项行为。通道配置的管理对于网络功能至关重要。 通道配置一般包括通道全局配置、排序配置和应用配置等多个层级,这些配置都存…

好物周刊#36:程序员简历

村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. SmartDNS 一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询…

JavaScript学习笔记——变量、作用域、var、const和let

JavaScript学习笔记——变量、作用域、var、const和let 学习链接(原链接)变量变量声明的三种方式 作用域作用域介绍作用域分类全局作用域局部作用域(函数作用域)块级作用域块级作用域和局部(函数)作用域区别 varvar的作用域(全局函…

单表的查询练习

一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 显示所有职工的基本信息。 mysql8.0 [chap03]>select * from worker; 查询所有职工所属部门的部门号,不显示重复的部门号。 mysq…

SOLID 原则

单一功能原则 单一功能原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。所有它的(这个类的)服务都应该严密的和该功能平行(功能平行&#x…

AnyDoor任意门:零样本物体级图像定制化

文章目录 一、AnyDoor简介二、AnyDoor方法(一)ID特征提取(二)细节特征提取(三)特征注入(四)视频、图像动态采样 一、AnyDoor简介 “任意门”算法:可以将任意目标传送到指…

Java SPI机制总结系列之开发入门实例

原创/朱季谦 在该文章正式开始前,先对 Java SPI是什么做一个简单的介绍。 SPI,是Service Provider Interface的缩写,即服务提供者接口,单从字面上看比较抽象,你可以理解成,该机制就像Spring容器一样&…

Python之Matplotlib绘图调节清晰度

Python之Matplotlib绘图调节清晰度 文章目录 Python之Matplotlib绘图调节清晰度引言解决方案dpi是什么?效果展示总结 引言 使用python中的matplotlib.pyplot绘图的时候,如果将图片显示出来,或者另存为图片,常常会出现清晰度不够的…

图像分类任务中 CNN 相比于前馈神经网络的优势

在图像分类任务中,卷积神经网络(CNN)相比于前馈神经网络(Feedforward Neural Network)具有以下优势: 局部感知能力:CNN通过使用卷积层和池化层来捕捉图像中的局部特征。卷积操作可以有效地共享参…

《哥德尔证明》阅读笔记——哥德尔证明过程

哥德尔的证明过程 背景 之前几节阐述了哥德尔证明的一个背景,具体脉络是,当人们在推进公理化系统时,遇到的一个核心问题:如何证明一个公理化系统是无矛盾的。人们一开始想出了模型法,即如果一个完全形式化的系统在现…

异构多品牌高清视频监控接入-技术方案

目 录 一、概述 二、建设目标及需求 (一)建设总目标 (二)需求分析 三、设计依据与设计原则 (一)设计依据 (二)设计原则 1、先进性与适用性 2、经济性与实用性 3、可靠性与安全性 4、开放性 5、可扩充性 6、追求最优化的系统设备配置 7、提高监管…

【JAVA】在 Queue 中 poll()和 remove()有什么区别

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 poll() 方法: remove() 方法: 区别总结: 结语 我的其他博客 前言 在Java的Queue接口中&…