# iot-demo
**Repository Path**: keonwj/iot-demo
## Basic Information
- **Project Name**: iot-demo
- **Description**: 本项目是aimp-iot项目的使用方法说明和实例demo。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2022-04-12
- **Last Updated**: 2025-10-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# AIMP——Iot模块
## 项目说明
本项目主要实现AIMP模块的设备管理模块,包括设备连接和登录,视频流的编码和解码,视频流帧图像获取,设备云台控制,数据推流等功能。
### 设备登录连接
主要实现海康威视和浙江大华两个品牌网络摄像头的登录连接,后续品牌摄像头也可以添加。
### 视频流的编码和解码
主要对视频流获取到的裸码流进行解码和编码,主要码流是H264和MPEG-4,而大部分品牌设备也会支持这两个码流格式,本项目主要应用ffmpeg的Java API实现相关功能。
### 帧的图片化流
为了AI中台处理更加便捷,本项目提供视频流中的每一帧将其转化为图片流,以便更快的进行图像处理和分析。
### 设备云台控制
本项目提供设备主动巡航,设备自动追踪目标,设备抓拍,镜头拉伸,夜间红外等功能。
### 数据推流
这里主要完成将设备的视频流推送到流媒体服务器,AI中台处理完毕的图片流转化为为视频流推送的流媒体服务器。
## 快速开始
1. 在pom文件中加入aimp-Iot的依赖。(其中版本根据最新情况修改。)因为海康威视视频解析需要的jar包不在maven中央仓库中,所以需要本地导入。
```
com.sun.jna
examples
1.1
system
${pom.basedir}/jar/examples.jar
com.sun.jna
jna
1.1
system
${pom.basedir}/jar/jna.jar
io.github.keonwangjw
aimp-iot
1.0.3
```
2. 添加海康威视视频源码解析dll文件。将本项目中位于*src/main/resources/*下的 *hc文件夹* 复制到所需项目的*src/main/resources*文件夹下
2. 创建配置文件(可省略,使用默认配置文件)。可以仿造*src/main/resources/configuration.xml*修改或者添加参数。相关参数说明见配置介绍。
3. 创建实现
```
//设置配置文件路径(可省略,使用默认配置)
ConfigureTool.setConfigureFilePath(System.getProperty("user.dir") + "src\\main\\resources\\configuration.xml");
//设备登录,获取设备实例
Device device = LoginAndOutModule.login(Constant.DAHUA, "ip", 1000, "userName", "password");
//调用实时播放函数,开始实时播放。主要输入是设备实例获得的设备ID,其余包括实时播放配置、转发流媒体配置、云台控制配置都是可选。
Object[] objects = RealPlayModule.postTasks(device.getDeviceId(), new RealplayConfig(), null, null);
//实时播放函数的返回值是三项项,一项是图片存储仓库,即为一帧一帧的数据转化为的图片,另一项是控制指令仓库,主要是将处理后的目标位置和标签返回,一遍自动化云台控制。第三项是输出直流,用于前端直接读取展示(相关解析代码见项目videoservice)。
//注意当在实时播放配置中设置没有开启获取图片流、不自动进行云台控制和不开启获取直连流时,则返回值对应那一项为NULL。
ImgStorage imgStorage = (ImgStorage) objects[0];
PtzStorage ptzStorage = (PtzStorage) objects[1];
InputStream directCurrent = (PipedInputStream) objects[2];
int i = 0;
while (true){
//获取图片
BufferedImage bufferedImage = imgStorage.consumePendingImg();
//处理图片,eg:存储,检测等
ImageIO.write(bufferedImage, "jpg", new File("E:/test/" + i + ".jpg"));
//处理完图片以后,将图片返回给图片仓库,存入已处理图片仓库。
imgStorage.produceProcessedImg(bufferedImage);c
//可选 如果开启自动云台控制 则将处理后的检测信息封装为jaon形式字符串返回给控制指令仓库,同时说明原始视频的高度和宽度。
ptzStorage.produce(jsonString, widch, height);
}
```
### 注意事项
1. 注意:所有任务的实现均需要调用`RealPlayModule.postTasks(device.getDeviceId(), new RealplayConfig(), null, null);`实现,包括开启和关闭相关功能。
2. 在登录设备可以使用三种登录方式,第一种不传入设备配置信息,即使用默认配置信息。第二种是传入配置信息名称,即使用配置文件中对应的名称的各项参数。最后一种是传入设备配置对象,即传入DeviceConfig对象,传入这种对象的时候可以设置一部分参数,未设置的属性将填充默认参数(如果填写配置信息名称,则填充名称对应参数)。
3. 在实时预览发布任务时,四项参数均需要填写,设备ID,实时预览配置,转发配置,云台控制配置。配置信息可以传入null,此时均使用默认配置,若传入配置信息部分属性为空,则根据配置名称填充参数,若配置信息名称为空则按照默认配置填充参数。
## 配置介绍
关于设备的配置主要包括四个部分,设备连接配置,实时播放配置,云台控制配置,转发流媒体配置。
### 设备连接配置
设备连接配置主要是配置设备连接超时时间、设备重连接次数、设备重连接时间等连接参数。
使用方式:
AimpDeviceConfig deviceConfig = new AimpDeviceConfig("",10000, 1, 2000, "");
实例化设备配置以后可以当做参数传入到登录函数中,实现设备连接配置。
### 实时播放配置
设备连接配置主要是配置设备当前播放通道、码流类型、连接模式、阻塞模式、是否获取图片流、待处理图片仓库最大存储大小、已处理图片仓库最大存储大小、是否存储为本地文件、存储路径、是否转发到流媒体服务器、流媒体服务器地址、是否使用自动设备云台控制等。(0:关闭,1:开启)
使用方式:
AimpRealplayConfig aimpRealplayConfig = new AimpRealplayConfig();
aimpRealplayConfig.setIsPtzControl(0);
aimpRealplayConfig.setIsForward(0);
aimpRealplayConfig.setBBlocked(0);
aimpRealplayConfig.setChannelNum(1);
aimpRealplayConfig.setDwLinkMode(0);
aimpRealplayConfig.setIsImgStream(1);
aimpRealplayConfig.setIsSaveFile(0);
aimpRealplayConfig.setIp(haikang.getIp());
aimpRealplayConfig.setDwStreamType(0);
aimpRealplayConfig.setPendingListMaxSize(30);
aimpRealplayConfig.setProcessedListMaxSize(30);
实例化实时播放配置以后可以当做参数传入到实时播放函数中,实现实时播放配置。
### 云台控制配置
云台控制配置主要是配置云台控制指令仓库最大存储空间、指令控制时长(一条指令执行的开始和结束时间)、小目标识别阈值(低于阈值将识别为小目标)、冷却时间(设备启动和镜头缩回后进行冷却时间,防止设备再次进行镜头拉近)等
使用方式:
AimpPtzcontrolConfig ptzcontrolConfig = new AimpPtzcontrolConfig();
ptzcontrolConfig.setCoolingTime(6);
ptzcontrolConfig.setPtzStorageMaxSize(30);
ptzcontrolConfig.setSleepTime(150);
ptzcontrolConfig.setSmallObject(0.3);
实例化云台配置以后可以当做参数传入到实时播放函数中,实现设备云台控制。
### 转发流媒体配置
转发流媒体配置主要是配置传输的视频高度、视频宽度、编码方式(如H264和MPEG4等)、视频封格式等。
使用方式:
AimpForwardConfig forwardConfig = new AimpForwardConfig();
forwardConfig.setHeight(1080);
forwardConfig.setWidth(1920);
//0:H264 1:MPEG4
forwardConfig.setVideoCodec(0);
forwardConfig.setVideoFormat("mp4");
实例化流媒体配置以后可以当做参数传入到实时播放函数中,实现设备云台控制。
## 模块介绍
## BUG反馈
当前项目处于初步开发,在使用过程中会遇到很多问题,还请在在使用过程中遇到的bug及时反馈给作者,邮箱:keon.wangjw@outlook.com