Commit b5be4211d598ba1e537bfcac828001f062332506

Authored by fengtao
Committed by xp.Huang
1 parent b22bbead

perf(src/packages/external/Informations): 修改摄像头支持gbt28181播放

... ... @@ -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) {
... ...