Commit b5be4211d598ba1e537bfcac828001f062332506
Committed by
xp.Huang
1 parent
b22bbead
perf(src/packages/external/Informations): 修改摄像头支持gbt28181播放
Showing
3 changed files
with
43 additions
and
11 deletions
... | ... | @@ -2,7 +2,8 @@ import { defHttp } from "@/utils/external/http/axios"; |
2 | 2 | import { useGlobSetting } from '@/hooks/external/setting'; |
3 | 3 | enum Api { |
4 | 4 | OPEN_FLV = '/rtsp/openFlv', |
5 | - CLOSE_FLV = '/rtsp/closeFlv' | |
5 | + CLOSE_FLV = '/rtsp/closeFlv', | |
6 | + GET_VIDEO_CONTROL_START = '/video/control/start', | |
6 | 7 | } |
7 | 8 | |
8 | 9 | export const getOpenFlvPlayUrl = (url: string, browserId: string) => { |
... | ... | @@ -19,3 +20,17 @@ export const closeFlvPlay = (url: string, browserId: string) => { |
19 | 20 | } |
20 | 21 | }); |
21 | 22 | }; |
23 | + | |
24 | +//gbt28181,获取flv地址 | |
25 | +export const getVideoControlStart = ({ | |
26 | + deviceId, | |
27 | + channelId, | |
28 | +}: Record<'deviceId' | 'channelId', string>) => { | |
29 | + return defHttp.get<Recordable>( | |
30 | + { | |
31 | + url: `${Api.GET_VIDEO_CONTROL_START}/${deviceId}/${channelId}`, | |
32 | + timeout: 30 * 1000, | |
33 | + }, | |
34 | + {} | |
35 | + ); | |
36 | +}; | ... | ... |
... | ... | @@ -23,6 +23,14 @@ export interface videoListInterface { |
23 | 23 | label: string |
24 | 24 | value: string |
25 | 25 | sn: string |
26 | + channelId: string | |
27 | + params: GBT28181Params | |
28 | +} | |
29 | + | |
30 | +export interface GBT28181Params { | |
31 | + channelNo: string | |
32 | + deviceId: string | |
33 | + deviceName: string | |
26 | 34 | } |
27 | 35 | |
28 | 36 | export enum AccessMode { |
... | ... | @@ -37,7 +45,7 @@ export const option = { |
37 | 45 | poster: '', |
38 | 46 | sourceType: 'custom', |
39 | 47 | organization: '', |
40 | - videoId : '' | |
48 | + videoId: '' | |
41 | 49 | } |
42 | 50 | |
43 | 51 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
... | ... | @@ -61,6 +61,7 @@ import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/Ch |
61 | 61 | import { NTreeSelect } from 'naive-ui' |
62 | 62 | import { getOrganizationList, getVideoList, getVideoUrl } from '@/api/external/common/index' |
63 | 63 | import { TKUpload } from '@/components/external/Common/TKUpload' |
64 | +import { getVideoControlStart } from '@/api/external/flvPlay' | |
64 | 65 | |
65 | 66 | const props = defineProps({ |
66 | 67 | optionData: { |
... | ... | @@ -100,14 +101,14 @@ const getVideoLists = async (organizationId: string) => { |
100 | 101 | const res = await getVideoList({ organizationId }) |
101 | 102 | if (!res) return |
102 | 103 | videoOptions.value = res?.data?.map((item: videoListInterface) => { |
103 | - if(item.accessMode === AccessMode.GBT28181) return 0; | |
104 | 104 | return { |
105 | 105 | label: item.name, |
106 | - value: item.accessMode === AccessMode.Streaming ? item.id : item.videoUrl, | |
106 | + value: item.accessMode === AccessMode.Streaming ? item.id : item.accessMode === AccessMode.ManuallyEnter ? item.videoUrl : item?.params?.deviceId, | |
107 | 107 | id: item.id, |
108 | - accessMode: item.accessMode | |
109 | - } | |
110 | - }).filter(Boolean) | |
108 | + accessMode: item.accessMode, | |
109 | + channelId: item.accessMode === AccessMode.GBT28181 ? item?.params?.channelNo :'' | |
110 | + } | |
111 | + }) | |
111 | 112 | } |
112 | 113 | |
113 | 114 | const getVideoUrlById = async (id: string) => { |
... | ... | @@ -126,19 +127,27 @@ const handleChecked = (value: string) => { |
126 | 127 | } |
127 | 128 | } |
128 | 129 | |
129 | -const handleSelect = (_: string, e: videoListInterface) => { | |
130 | - const { accessMode, id, value } = e | |
131 | - //1表示,需要从服务端调取接口换取播放的地址,0则不需要 | |
130 | +const handleSelect = async (_: string, e: videoListInterface) => { | |
131 | + const { accessMode, id, value , channelId } = e | |
132 | + //流媒体,需要从服务端调取接口换取播放的地址 | |
132 | 133 | if (accessMode === AccessMode.Streaming) { |
133 | 134 | getVideoUrlById(id) |
134 | 135 | url.value = id |
135 | 136 | props.optionData.videoId = id |
137 | + } else if (accessMode === AccessMode.GBT28181) { | |
138 | + //gbt28181,需要调用接口获取flv播放地址 | |
139 | + if(!value) return | |
140 | + const { data: { flv } } = await getVideoControlStart({ | |
141 | + deviceId: value, | |
142 | + channelId | |
143 | + }) | |
144 | + props.optionData.dataset = flv || '' | |
136 | 145 | } else { |
137 | 146 | props.optionData.dataset = value as string |
138 | 147 | } |
139 | 148 | } |
140 | 149 | |
141 | -onMounted(async() => { | |
150 | +onMounted(async () => { | |
142 | 151 | if (props.optionData.sourceType === sourceTypeEnum.PLATFORM) { |
143 | 152 | getOriginationList() |
144 | 153 | if (props.optionData.organization) { | ... | ... |