|
|
|
@ -1,13 +1,21 @@
|
|
|
|
|
import { createConnection, client, servicesTopic, destroyConnection } from './src/mqtt';
|
|
|
|
|
import { airport, uav, liveInfo, buildGUID } from './src/config';
|
|
|
|
|
import { airport, uav, liveInfo, buildGUID, base64ByURL } from './src/config';
|
|
|
|
|
import { GetUavPageByDocksn } from '@/api/demo/projecthome';
|
|
|
|
|
import { getVerifyToken, getDroneDockflightInfos } from '@/api/workmanagement/droneDock';
|
|
|
|
|
import {
|
|
|
|
|
getVerifyToken,
|
|
|
|
|
getDroneDockflightInfos,
|
|
|
|
|
getTaskPicList,
|
|
|
|
|
getTaskVideoList,
|
|
|
|
|
} from '@/api/workmanagement/droneDock';
|
|
|
|
|
import TCPlayer from 'tcplayer.js';
|
|
|
|
|
import { useMessage } from '@/hooks/web/useMessage';
|
|
|
|
|
|
|
|
|
|
const { createMessage } = useMessage();
|
|
|
|
|
const bid = buildGUID();
|
|
|
|
|
let video_id;
|
|
|
|
|
let sn;
|
|
|
|
|
let live_url;
|
|
|
|
|
let video_time;
|
|
|
|
|
|
|
|
|
|
class LiveStreamPlugin {
|
|
|
|
|
constructor() {
|
|
|
|
@ -52,13 +60,11 @@ class LiveStreamPlugin {
|
|
|
|
|
console.log('LiveStreamPlugin startLiveStreamCall', serialNum, deviceType);
|
|
|
|
|
sn = serialNum;
|
|
|
|
|
createConnection('mqtt_' + serialNum);
|
|
|
|
|
video_id =
|
|
|
|
|
deviceType == 1
|
|
|
|
|
? serialNum + '/' + airport.camera_index + '/' + airport.video_index
|
|
|
|
|
: serialNum + '/' + uav.camera_index + '/' + uav.video_index;
|
|
|
|
|
|
|
|
|
|
// const liveUrl = liveInfo.rtmp + serialNum;
|
|
|
|
|
let querys;
|
|
|
|
|
if (deviceType == 1) {
|
|
|
|
|
video_id = serialNum + '/' + airport.camera_index + '/' + airport.video_index;
|
|
|
|
|
querys = {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'live_start_push',
|
|
|
|
@ -82,6 +88,7 @@ class LiveStreamPlugin {
|
|
|
|
|
await GetUavPageByDocksn(params).then((res) => {
|
|
|
|
|
console.log('GetUavPageByDocksn', res);
|
|
|
|
|
if (res.items.length > 0) {
|
|
|
|
|
video_id = res.items[0].sn + '/' + uav.camera_index + '/' + uav.video_index;
|
|
|
|
|
querys = {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'live_start_push',
|
|
|
|
@ -138,19 +145,63 @@ class LiveStreamPlugin {
|
|
|
|
|
* zpkzxx:照片扩展信息
|
|
|
|
|
*/
|
|
|
|
|
console.log('LiveStreamPlugin takePicture', callback);
|
|
|
|
|
const querys = {
|
|
|
|
|
servicesTopic(sn, {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'camera_photo_take',
|
|
|
|
|
method: 'camera_mode_switch',
|
|
|
|
|
tid: buildGUID(),
|
|
|
|
|
timestamp: new Date().getTime(),
|
|
|
|
|
data: {
|
|
|
|
|
camera_mode: 0,
|
|
|
|
|
payload_index: uav.camera_index,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
console.log(querys);
|
|
|
|
|
servicesTopic(sn, querys);
|
|
|
|
|
const data = {};
|
|
|
|
|
callback(data);
|
|
|
|
|
});
|
|
|
|
|
const time = new Date().getTime();
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
const querys = {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'camera_photo_take',
|
|
|
|
|
tid: buildGUID(),
|
|
|
|
|
timestamp: time,
|
|
|
|
|
data: {
|
|
|
|
|
payload_index: uav.camera_index,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
console.log(querys);
|
|
|
|
|
servicesTopic(sn, querys);
|
|
|
|
|
client.subscribe('thing/product/' + sn + '/events', { qos: 2 }, () => {});
|
|
|
|
|
}, 1000);
|
|
|
|
|
// 接收消息
|
|
|
|
|
let id = '';
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
client.on('message', async (topic, message) => {
|
|
|
|
|
const rs = JSON.parse(message);
|
|
|
|
|
if (
|
|
|
|
|
rs.method == 'flighttask_progress' &&
|
|
|
|
|
rs.data.output.status == 'in_progress' &&
|
|
|
|
|
id == ''
|
|
|
|
|
) {
|
|
|
|
|
id = rs.data.output.ext.flight_id;
|
|
|
|
|
createMessage.info('正在获取数据,预计需要一分钟,请稍后');
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
getTaskPicList({
|
|
|
|
|
flightId: id,
|
|
|
|
|
timestamp: time,
|
|
|
|
|
}).then(async (res) => {
|
|
|
|
|
if (res) {
|
|
|
|
|
await base64ByURL(res.pictureLink).then((urlres) => {
|
|
|
|
|
let { blob } = urlres;
|
|
|
|
|
res.imgBlob = blob;
|
|
|
|
|
});
|
|
|
|
|
createMessage.success('获取数据成功');
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error('获取数据失败,请稍后重试');
|
|
|
|
|
}
|
|
|
|
|
resolve(callback(res));
|
|
|
|
|
});
|
|
|
|
|
}, 50000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
startVideoRecording() {
|
|
|
|
|
/**
|
|
|
|
@ -168,13 +219,26 @@ class LiveStreamPlugin {
|
|
|
|
|
});
|
|
|
|
|
servicesTopic(sn, {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'camera_recording_start',
|
|
|
|
|
method: 'camera_mode_switch',
|
|
|
|
|
tid: buildGUID(),
|
|
|
|
|
timestamp: new Date().getTime(),
|
|
|
|
|
data: {
|
|
|
|
|
camera_mode: 1,
|
|
|
|
|
payload_index: uav.camera_index,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
video_time = new Date().getTime();
|
|
|
|
|
servicesTopic(sn, {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'camera_recording_start',
|
|
|
|
|
tid: buildGUID(),
|
|
|
|
|
timestamp: video_time,
|
|
|
|
|
data: {
|
|
|
|
|
payload_index: uav.camera_index,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}, 1000);
|
|
|
|
|
}
|
|
|
|
|
endVideoRecording(callback: Function) {
|
|
|
|
|
/**
|
|
|
|
@ -184,17 +248,52 @@ class LiveStreamPlugin {
|
|
|
|
|
* true/false;
|
|
|
|
|
*/
|
|
|
|
|
console.log('LiveStreamPlugin endVideoRecording', callback);
|
|
|
|
|
const time = new Date().getTime();
|
|
|
|
|
|
|
|
|
|
servicesTopic(sn, {
|
|
|
|
|
bid: bid,
|
|
|
|
|
method: 'camera_recording_stop',
|
|
|
|
|
tid: buildGUID(),
|
|
|
|
|
timestamp: new Date().getTime(),
|
|
|
|
|
timestamp: time,
|
|
|
|
|
data: {
|
|
|
|
|
payload_index: uav.camera_index,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
const data = {};
|
|
|
|
|
callback(data);
|
|
|
|
|
client.subscribe('thing/product/' + sn + '/events', { qos: 2 }, () => {});
|
|
|
|
|
// 接收消息
|
|
|
|
|
let id = '';
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
client.on('message', async (topic, message) => {
|
|
|
|
|
const rs = JSON.parse(message);
|
|
|
|
|
if (
|
|
|
|
|
rs.method == 'flighttask_progress' &&
|
|
|
|
|
rs.data.output.status == 'in_progress' &&
|
|
|
|
|
id == ''
|
|
|
|
|
) {
|
|
|
|
|
id = rs.data.output.ext.flight_id;
|
|
|
|
|
createMessage.info('正在获取数据,预计需要五分钟,请稍后');
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
getTaskVideoList({
|
|
|
|
|
flightId: id,
|
|
|
|
|
timestamp: video_time,
|
|
|
|
|
}).then(async (res) => {
|
|
|
|
|
if (res) {
|
|
|
|
|
await base64ByURL(res.videoLink).then((urlres) => {
|
|
|
|
|
let { blob } = urlres;
|
|
|
|
|
console.log(blob);
|
|
|
|
|
res.videoBlob = blob;
|
|
|
|
|
console.log(res);
|
|
|
|
|
});
|
|
|
|
|
createMessage.success('获取数据成功');
|
|
|
|
|
} else {
|
|
|
|
|
createMessage.error('获取数据失败,请稍后重试');
|
|
|
|
|
}
|
|
|
|
|
resolve(callback(res));
|
|
|
|
|
});
|
|
|
|
|
}, 300000);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
disposeSDK() {
|
|
|
|
|
/**
|
|
|
|
|