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,7 +2,8 @@ import { defHttp } from "@/utils/external/http/axios";
2 import { useGlobSetting } from '@/hooks/external/setting'; 2 import { useGlobSetting } from '@/hooks/external/setting';
3 enum Api { 3 enum Api {
4 OPEN_FLV = '/rtsp/openFlv', 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 export const getOpenFlvPlayUrl = (url: string, browserId: string) => { 9 export const getOpenFlvPlayUrl = (url: string, browserId: string) => {
@@ -19,3 +20,17 @@ export const closeFlvPlay = (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,6 +23,14 @@ export interface videoListInterface {
23 label: string 23 label: string
24 value: string 24 value: string
25 sn: string 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 export enum AccessMode { 36 export enum AccessMode {
@@ -37,7 +45,7 @@ export const option = { @@ -37,7 +45,7 @@ export const option = {
37 poster: '', 45 poster: '',
38 sourceType: 'custom', 46 sourceType: 'custom',
39 organization: '', 47 organization: '',
40 - videoId : '' 48 + videoId: ''
41 } 49 }
42 50
43 export default class Config extends PublicConfigClass implements CreateComponentType { 51 export default class Config extends PublicConfigClass implements CreateComponentType {
@@ -61,6 +61,7 @@ import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/Ch @@ -61,6 +61,7 @@ import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/Ch
61 import { NTreeSelect } from 'naive-ui' 61 import { NTreeSelect } from 'naive-ui'
62 import { getOrganizationList, getVideoList, getVideoUrl } from '@/api/external/common/index' 62 import { getOrganizationList, getVideoList, getVideoUrl } from '@/api/external/common/index'
63 import { TKUpload } from '@/components/external/Common/TKUpload' 63 import { TKUpload } from '@/components/external/Common/TKUpload'
  64 +import { getVideoControlStart } from '@/api/external/flvPlay'
64 65
65 const props = defineProps({ 66 const props = defineProps({
66 optionData: { 67 optionData: {
@@ -100,14 +101,14 @@ const getVideoLists = async (organizationId: string) => { @@ -100,14 +101,14 @@ const getVideoLists = async (organizationId: string) => {
100 const res = await getVideoList({ organizationId }) 101 const res = await getVideoList({ organizationId })
101 if (!res) return 102 if (!res) return
102 videoOptions.value = res?.data?.map((item: videoListInterface) => { 103 videoOptions.value = res?.data?.map((item: videoListInterface) => {
103 - if(item.accessMode === AccessMode.GBT28181) return 0;  
104 return { 104 return {
105 label: item.name, 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 id: item.id, 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 const getVideoUrlById = async (id: string) => { 114 const getVideoUrlById = async (id: string) => {
@@ -126,19 +127,27 @@ const handleChecked = (value: 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 if (accessMode === AccessMode.Streaming) { 133 if (accessMode === AccessMode.Streaming) {
133 getVideoUrlById(id) 134 getVideoUrlById(id)
134 url.value = id 135 url.value = id
135 props.optionData.videoId = id 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 } else { 145 } else {
137 props.optionData.dataset = value as string 146 props.optionData.dataset = value as string
138 } 147 }
139 } 148 }
140 149
141 -onMounted(async() => { 150 +onMounted(async () => {
142 if (props.optionData.sourceType === sourceTypeEnum.PLATFORM) { 151 if (props.optionData.sourceType === sourceTypeEnum.PLATFORM) {
143 getOriginationList() 152 getOriginationList()
144 if (props.optionData.organization) { 153 if (props.optionData.organization) {