您好,实在不知道了。
大华摄像头的SDK
用java开发,实现人经过,动态报警功能
//初始化
LoginModule.init(disConnect, haveReConnect);
//登录
LoginModule.login("192.168.1.108", 37777, "admin", "qwer1234");
fAlarmDataCB cbMessage = new fAlarmDataCB();
netsdk.CLIENT_SetDVRMessCallBack(cbMessage, null);
System.out.println("监听开始:" + netsdk.CLIENT_StartListenEx(LoginModule.m_hLoginHandle));
try {
Thread.sleep(500000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("登出");
LoginModule.logout();
开始监听返回true
但不知道从哪里获取返回的报警信息,望解答
QCloundController.java
// 临时秘钥配置
TreeMap<String, Object> config = new TreeMap<String, Object>();
Response credential = null; // 凭证结果
try {
config.put("SecretId", cosProperties.getSecretId());
config.put("SecretKey", cosProperties.getSecretKey());
config.put("durationSeconds", 1800); // 设置可使用事件1800秒 -> 30分钟
config.put("bucket", cosProperties.getBucketName()); // 存储桶名
config.put("region", cosProperties.getRegion()); // 地区
// policy的resource => 前缀
// 只允许访问: [avatar/*]
config.put("allowPrefixes", new String[] {
cosProperties.getAvatarPrefix()
});
// 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。
// 简单上传、表单上传和分片上传需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
config.put("allowActions", new String[] {
"name/cos:PutObject",// 简单上传
"name/cos:PostObject",// 表单上传、小程序上传
"name/cos:GetBucket", // 允许获取桶的对象列表
// 分片上传
"name/cos:InitiateMultipartUpload",
"name/cos:ListMultipartUploads",
"name/cos:ListParts",
"name/cos:UploadPart",
"name/cos:CompleteMultipartUpload"
});
//成功返回临时密钥信息,如下打印密钥信息
credential = CosStsClient.getCredential(config);
} catch (Exception e) {
//失败抛出异常
e.printStackTrace();
throw new IllegalArgumentException("no valid secret !");
}
return Result.success(credential);
https://cloud.tencent.com/document/product/436/31923
allowPrefixes
对应 policy的resource(原本是allowPrefix, 从源码中可以得出)
allowActions
对应policy的actionpolicy更多了解:
2. 写完java后台就该写前端小程序了
cos.ts
// cos.ts
const COS = require('cos-wx-sdk-v5');
var cos = new COS({
getAuthorization: function (options: any, callback: any) {
console.log(options);
wx.request({
url: 'http://127.0.0.1:8080/qc/key',
data: {
},
dataType: 'json',
success: function (result: any) {
var data = result.data.data;
console.log(data);
var credentials = data && data.credentials;
if (!data || !credentials) return console.error('credentials invalid');
callback({
TmpSecretId: credentials.tmpSecretId,
TmpSecretKey: credentials.tmpSecretKey,
XCosSecurityToken: credentials.sessionToken,
// 建议返回服务器时间作为签名的开始时间,避免用户浏览器本地时间偏差过大导致签名错误
StartTime: data.startTime, // 时间戳,单位秒,如:1580000000
ExpiredTime: data.expiredTime, // 时间戳,单位秒,如:1580000900
});
}
});
}
});
export {
cos
}
app.ts
:app文件
import { cos } from './COS/cos';
App<IAppOption>({
globalData: {
},
onLaunch() {
cos.getBucket({
Bucket: 'myblogspringboot-1300326898',
Region: 'ap-nanjing',
Prefix: 'avatar/', // 这里传入列出的myblogspringboot-1300326898/avatar下的所有文件
}, function (err: any, data: any) {
if (err) {
console.log(err);
return;
}
console.log(data, 2);
});
},
})
对于大华摄像头SDK实现人经过,动态报警功能,可以使用SDK提供的回调函数来获取报警信息。
1.首先,需要先编写一个类来实现SDK提供的回调函数,例如:
public class AlarmCallBack implements HCNetSDK.FMSGCallBack_V31 {
@Override
public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen,
Pointer pUser) {
switch (lCommand.intValue()) {
case HCNetSDK.COMM_ALARM_RULE:
HCNetSDK.NET_VCA_RULE_ALARM pRule = new HCNetSDK.NET_VCA_RULE_ALARM(pAlarmInfo);
//可以在这里获取报警信息进行处理
break;
//其他报警类型的处理
default:
break;
}
}
}
2.在需要开启监听的地方,创建AlarmCallBack对象并注册为SDK的回调函数,例如:
HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
if (!hCNetSDK.NET_DVR_Init()) {
//初始化SDK失败
return false;
}
//登录设备
//...
//开启报警监听
HCNetSDK.NET_DVR_SETUPALARM_PARAM setupAlarmParam = new HCNetSDK.NET_DVR_SETUPALARM_PARAM();
setupAlarmParam.byAlarmInfoType = 1; //低速网络下无法使用压缩版本的上传报警信息,需要使用纯IP方式上传,此处设置为1即可
setupAlarmParam.byLevel = 1; //报警信息分级,1表示普通级别
NativeLong lAlarmHandle = hCNetSDK.NET_DVR_SetupAlarmChan_V41(lUserID, setupAlarmParam);
if (lAlarmHandle.longValue() < 0) {
//开启监听失败
//...
}
//注册回调函数
AlarmCallBack alarmCallBack = new AlarmCallBack();
hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(alarmCallBack, null);
3.在AlarmCallBack类中的invoke方法中,可以根据报警类型进行处理,例如:
@Override
public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen,
Pointer pUser) {
switch (lCommand.intValue()) {
case HCNetSDK.COMM_ALARM_RULE:
HCNetSDK.NET_VCA_RULE_ALARM pRule = new HCNetSDK.NET_VCA_RULE_ALARM(pAlarmInfo);
//可以在这里获取报警信息进行处理
//例如获取人脸坐标
HCNetSDK.NET_VCA_RECT struRegion = pRule.struRegion;
int dwFacePicLen = pRule.dwFacePicLen;
Pointer pFacePicBuffer = pRule.pBuffer1;
//使用OpenCV等开源库处理图片数据
//...
break;
//其他报警类型的处理
default:
break;
}
}
需要注意的是,该回调函数是在SDK线程中执行的,如果需要更新UI等操作,需要使用Android的Handler等方式进行处理。