Commit 12e44f3e137e20a9574ad94264c29671c1281d06
Committed by
xp.Huang
1 parent
5a4cd84d
feat: 新增视频通道同步功能,联调通道同步接口完成和加上相关权限标识key
Showing
4 changed files
with
40 additions
and
7 deletions
@@ -21,6 +21,7 @@ enum CameraManagerApi { | @@ -21,6 +21,7 @@ enum CameraManagerApi { | ||
21 | STREAMING_PLAY_GET_URL = '/video/url', | 21 | STREAMING_PLAY_GET_URL = '/video/url', |
22 | VIDEO_CONTROL_STOP = '/video/control/stop/', | 22 | VIDEO_CONTROL_STOP = '/video/control/stop/', |
23 | CAMERA_ADDGPT_API_URL = '/video/add/gbt28181', | 23 | CAMERA_ADDGPT_API_URL = '/video/add/gbt28181', |
24 | + VIDEO_CONTROL_SYNC = '/video/control/sync/', | ||
24 | } | 25 | } |
25 | 26 | ||
26 | export const cameraPage = (params: CameraQueryParam) => { | 27 | export const cameraPage = (params: CameraQueryParam) => { |
@@ -144,3 +145,10 @@ export const createGPTPostApi = (data: Recordable) => { | @@ -144,3 +145,10 @@ export const createGPTPostApi = (data: Recordable) => { | ||
144 | data, | 145 | data, |
145 | }); | 146 | }); |
146 | }; | 147 | }; |
148 | + | ||
149 | +//云台控制 通道同步 | ||
150 | +export const syncVideoApiGet = (deviceId: string) => { | ||
151 | + return defHttp.get({ | ||
152 | + url: `${CameraManagerApi.VIDEO_CONTROL_SYNC}${deviceId}`, | ||
153 | + }); | ||
154 | +}; |
@@ -6,6 +6,13 @@ import { withInstall } from '/@/utils/index'; | @@ -6,6 +6,13 @@ import { withInstall } from '/@/utils/index'; | ||
6 | import VideoPlay from './video.vue'; | 6 | import VideoPlay from './video.vue'; |
7 | export const Video = withInstall(VideoPlay); | 7 | export const Video = withInstall(VideoPlay); |
8 | 8 | ||
9 | +//视频通道权限标识枚举 | ||
10 | +export enum GBT28181_DEVICE_PERMISSION_ENUM { | ||
11 | + PLAY_SYNC = 'api:yt:video:control:play', //视频点播/预览和摄像头通道同步 | ||
12 | + STOP = 'api:yt:video:control:stop', //停止点播 | ||
13 | + CONTROL = 'api:yt:video:control:control', //云台控制 | ||
14 | +} | ||
15 | + | ||
9 | enum ChannelStatusEnum { | 16 | enum ChannelStatusEnum { |
10 | ONLINE = 'ONLINE', | 17 | ONLINE = 'ONLINE', |
11 | } | 18 | } |
@@ -3,6 +3,11 @@ | @@ -3,6 +3,11 @@ | ||
3 | class="bg-neutral-100 dark:text-gray-300 dark:bg-dark-700 p-4" | 3 | class="bg-neutral-100 dark:text-gray-300 dark:bg-dark-700 p-4" |
4 | @register="registerTable" | 4 | @register="registerTable" |
5 | > | 5 | > |
6 | + <template #toolbar> | ||
7 | + <Authority :value="GBT28181_DEVICE_PERMISSION_ENUM.PLAY_SYNC"> | ||
8 | + <a-button type="primary" @click="handleSyncPlay">通道同步</a-button> | ||
9 | + </Authority> | ||
10 | + </template> | ||
6 | <template #hasAudio="{ record }"> | 11 | <template #hasAudio="{ record }"> |
7 | <Switch | 12 | <Switch |
8 | :checked="record.status === 1" | 13 | :checked="record.status === 1" |
@@ -17,25 +22,26 @@ | @@ -17,25 +22,26 @@ | ||
17 | :actions="[ | 22 | :actions="[ |
18 | { | 23 | { |
19 | label: '播放', | 24 | label: '播放', |
20 | - auth: 'api:yt:sceneLinkage:get', | 25 | + auth: GBT28181_DEVICE_PERMISSION_ENUM.PLAY_SYNC, |
21 | icon: 'ant-design:play-circle-outlined', | 26 | icon: 'ant-design:play-circle-outlined', |
22 | onClick: handlePlay.bind(null, record), | 27 | onClick: handlePlay.bind(null, record), |
23 | }, | 28 | }, |
24 | { | 29 | { |
25 | - label: '停止点播', | ||
26 | - auth: 'api:yt:sceneLinkage:get', | 30 | + label: '停止', |
31 | + auth: GBT28181_DEVICE_PERMISSION_ENUM.STOP, | ||
27 | icon: 'ant-design:pause-outlined', | 32 | icon: 'ant-design:pause-outlined', |
28 | onClick: handleStopPlay.bind(null, record), | 33 | onClick: handleStopPlay.bind(null, record), |
34 | + ifShow: !!record?.streamId, //通道号存在则显示停止点播按钮 | ||
29 | }, | 35 | }, |
30 | ]" | 36 | ]" |
31 | /> | 37 | /> |
32 | </template> | 38 | </template> |
33 | </BasicTable> | 39 | </BasicTable> |
34 | - <VideoModal @register="registerModal" /> | 40 | + <VideoModal @register="registerModal" @reloadTable="reload()" /> |
35 | </template> | 41 | </template> |
36 | 42 | ||
37 | <script lang="ts" setup> | 43 | <script lang="ts" setup> |
38 | - import { configColumns, searchFormSchema } from './config'; | 44 | + import { configColumns, searchFormSchema, GBT28181_DEVICE_PERMISSION_ENUM } from './config'; |
39 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; | 45 | import { BasicTable, useTable, TableAction } from '/@/components/Table'; |
40 | import { Switch } from 'ant-design-vue'; | 46 | import { Switch } from 'ant-design-vue'; |
41 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; | 47 | import { DeviceRecord } from '/@/api/device/model/deviceModel'; |
@@ -43,7 +49,8 @@ | @@ -43,7 +49,8 @@ | ||
43 | import { useModal } from '/@/components/Modal'; | 49 | import { useModal } from '/@/components/Modal'; |
44 | import { useMessage } from '/@/hooks/web/useMessage'; | 50 | import { useMessage } from '/@/hooks/web/useMessage'; |
45 | import { getVideoChannelList } from '/@/api/device/videoChannel'; | 51 | import { getVideoChannelList } from '/@/api/device/videoChannel'; |
46 | - import { stopOnDemandVideoApiGet } from '/@/api/camera/cameraManager'; | 52 | + import { stopOnDemandVideoApiGet, syncVideoApiGet } from '/@/api/camera/cameraManager'; |
53 | + import { Authority } from '/@/components/Authority'; | ||
47 | 54 | ||
48 | const props = defineProps<{ deviceDetail: DeviceRecord }>(); | 55 | const props = defineProps<{ deviceDetail: DeviceRecord }>(); |
49 | 56 | ||
@@ -96,7 +103,15 @@ | @@ -96,7 +103,15 @@ | ||
96 | if (!record) return; | 103 | if (!record) return; |
97 | const { deviceId, channelId } = record; | 104 | const { deviceId, channelId } = record; |
98 | if (await stopOnDemandVideoApiGet(deviceId, channelId)) { | 105 | if (await stopOnDemandVideoApiGet(deviceId, channelId)) { |
99 | - createMessage.success('已停止点播'); | 106 | + createMessage.success('已停止'); |
107 | + } | ||
108 | + }; | ||
109 | + | ||
110 | + //通道同步 | ||
111 | + const handleSyncPlay = async () => { | ||
112 | + if (await syncVideoApiGet(props.deviceDetail.tbDeviceId)) { | ||
113 | + createMessage.success('已同步'); | ||
114 | + reload(); | ||
100 | } | 115 | } |
101 | }; | 116 | }; |
102 | </script> | 117 | </script> |
@@ -36,6 +36,8 @@ | @@ -36,6 +36,8 @@ | ||
36 | import { AccessMode } from '/@/views/camera/manage/config.data'; | 36 | import { AccessMode } from '/@/views/camera/manage/config.data'; |
37 | import { getStreamingPlayUrl } from '/@/api/camera/cameraManager'; | 37 | import { getStreamingPlayUrl } from '/@/api/camera/cameraManager'; |
38 | 38 | ||
39 | + const emit = defineEmits(['reloadTable', 'register']); | ||
40 | + | ||
39 | const heightNum = ref(800); | 41 | const heightNum = ref(800); |
40 | const showVideo = ref(false); | 42 | const showVideo = ref(false); |
41 | 43 | ||
@@ -91,6 +93,7 @@ | @@ -91,6 +93,7 @@ | ||
91 | const handleCancel = () => { | 93 | const handleCancel = () => { |
92 | showVideo.value = false; | 94 | showVideo.value = false; |
93 | withToken.value = false; | 95 | withToken.value = false; |
96 | + emit('reloadTable'); | ||
94 | }; | 97 | }; |
95 | </script> | 98 | </script> |
96 | 99 |