anxiao_web/pages/cmddispatch/js/sosVideoAndAudio.js

211 lines
7.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { layuiObj, loginInfo } from "./index.js";
import { serverIp } from "../../../public/js/url.js";
var sosSdk = null;
//当前sos设备告警列表
var currentSosAlarmTask = {};
var sosInitState=false;//监测sos初始化是否成功。
function connectMapInit(){
if(sosInitState==false){
//加载地图
sosInitState=true;
}
}
function initSosSdk() {
//内网情况就不用连接了。
if(serverIp!="43.15.198.61"){
sosSdk = new SOS.SDK({
Account: loginInfo["user_name"],// 这里填写account
Password: "123456",// 这里填写password
});
try {
//sdk初始化会有一个过程包括与初始化自己本身与服务器交互等过程需要等待
sosSdk.init().then(() => {
// 初始化成功这里成功之后也会通过sdk.addEventListener(SOS.EVENT.SDK_STATE)的消息通知到)
console.log('SDK启动成功版本号', sosSdk.version());
//加载地图
connectMapInit();
}).catch(error => {
console.error(error);
//加载地图
connectMapInit();
}).finally(()=>{
console.log("完成")
})
} catch (error) {
//加载地图
connectMapInit();
}
//SDK运行状态事件通知
sosSdk.addEventListener(SOS.EVENT.SDK_STATE, (event, code, description) => {
switch (event) {
case SOS.EVENT.SDK_STATE_CODE.WARN:
connectMapInit();
// 一般是网络原因与服务器连接断开会warn
layuiObj.layer.msg('sdk state: warn', description);
break;
case SOS.EVENT.SDK_STATE_CODE.ERROR:
if (code === SOS.ERROR_CODE.LOGIN_CONFLICT) {
// 账号在其他地方登录,这个需要处理下
layuiObj.layer.msg('你的账号已在其他地方登录');
// 这里一定要记得把sdk destroy掉不然会触发sdk的重连机制
sosSdk && sdk.destroy();
sosSdk = null;
}
//sos告警账号密码不存在
if(
code==6
||
code==1
||
code==9
){
//一般是网络原因与服务器连接断开会warn
//layuiObj.layer.msg('报警器登录失败');
//加载地图
connectMapInit();
}
break;
case SOS.EVENT.SDK_STATE_CODE.SUCCESS:
console.info('sdk state: success');
break;
default:
break;
}
})
//设备告警事件通知
sosSdk.addEventListener(SOS.EVENT.DEVICE_ALARM_STATE, (event, device, task, operator) => {
switch (event) {
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.RING:
var deviceId = device.Id;
if (!(deviceId in currentSosAlarmTask)) {
currentSosAlarmTask[deviceId] = task;
}
console.log('设备:', device.Id, device.Name, '正在告警TaskCode:' + task.TaskCode);
break;
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.ACCEPT:
// 本端sdk接警也会有这个通知需要判断出来是自己接的还是其他人接的
if (sosSdk.isMe(operator.SipNum)) {
console.log('设备:', device.Id, device.Name, '已经被我自己接警');
} else {
console.log('设备:', device.Id, device.Name, '已经被其他人接警');
}
break;
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.NOANSWER:
console.log('设备:', device.Id, device.Name, '无人接警');
break;
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.FINISHED:
console.log('设备:', device.Id, device.Name, '已完成接警');
break;
default:
break;
}
})
}
}
//开始接警
async function sosDeviceAlarmAccept(obj) {
var deviceid=obj["deviceId"];
try {
const disconnectedCallback = (SipNum) => {
// 开始接警之后,有设备(或自己)退出
console.warn(SipNum, '已退出接警', sosSdk && sosSdk.isMe(SipNum));
}
const stopCallback = () => {
console.warn('服务器结束接警');
}
if (deviceid in currentSosAlarmTask) {
var alarmTaskObject = currentSosAlarmTask[deviceid]
// 下面这个alarmTaskObject就是通过告警通知或者告警列表获取到的
const rsp = await sosSdk.deviceAlarmAccept(alarmTaskObject, {
AudioDomId: `sosAlarmAudio${deviceid}`,
// 非必填参数
OnDisconnected: disconnectedCallback,
OnStop: stopCallback,
});
} else {
openSosAlarmAudio(deviceid);
}
console.log('接警成功, expire(接警时间,单位秒):' );
} catch (error) {
console.log('接警失败', error);
}
}
//结束接警
async function sosDeviceAlarmDone(obj) {
var deviceid=obj["deviceId"];
try {
if (deviceid in currentSosAlarmTask) {
var alarmTaskObject = currentSosAlarmTask[deviceid];
const rsp = await sosSdk.deviceAlarmDone(alarmTaskObject);
delete currentSosAlarmTask[deviceid]
} else {
stopSosAlarmAudio(deviceid)
}
} catch (error) {
console.log('结束接警失败', error)
}
}
var currentAlarmSosAudio = {};
//开启报警的对讲
function openSosAlarmAudio(deviceid) {
if (sosSdk) {
let disconnectedCallback = (SipNum) => {
// 开始对讲之后,有设备或自己退出对讲
console.warn(SipNum, "已退出对讲", sosSdk && sosSdk.isMe(SipNum));
}
let stopCallback = () => {
// 开始对讲之后,服务器结束了对讲
console.warn("服务器结束对讲");
}
sosSdk.audioSpeakStart({
// 必填参数
DeviceId: parseInt(deviceid),
AudioDomId: `sosAlarmAudio${deviceid}`, // 要保证document.getElementById("html_audio_remote")非null你的audio标签一定要存在
// 非必填参数
Force: false,
OnDisconnected: disconnectedCallback,
OnStop: stopCallback,
}).then((ret) => {
currentAlarmSosAudio[deviceid] = ret.TaskCode
console.log("!!!!!!!!!!", ret);
}).catch((e) => {
console.log(e);
switch (e.code) {
case 2005:
break;
case 3551:
break;
case 3552:
break;
default:
break;
}
})
} else {
alert("对讲失败请先启动SDK")
}
}
// 结束对讲
function stopSosAlarmAudio(deviceid) {
if (sosSdk) {
if (deviceid in currentAlarmSosAudio) {
sosSdk.audioSpeakStop({
TaskCode: currentAlarmSosAudio[deviceid]
}).then(() => {
console.log("对讲停止成功");
}).catch((error) => {
console.error(error);
})
}
} else {
alert("对讲停止失败请先启动SDK")
}
}
export {
initSosSdk,
sosSdk,
sosDeviceAlarmAccept,
sosDeviceAlarmDone
}