Ver Fonte

feat(video-center): 完善海康视频预览控制功能

- 支持主子码流切换、单窗口及批量抓图
- 增加声音、对讲和电子放大控制
- 优化多窗口状态管理、关闭清理及悬浮操作栏
Zimo há 1 semana atrás
pai
commit
711fdac6c2

+ 14 - 2
src/api/pms/hikvision/index.ts

@@ -20,6 +20,7 @@ export interface HikvisionCameraNode {
 }
 
 export type HikvisionTreeNode = HikvisionRegionNode | HikvisionCameraNode
+export type HikvisionStreamType = 0 | 1
 
 export const HikvisionApi = {
   getTreeNodes: (regionIndexCode: string): Promise<HikvisionTreeNode[]> => {
@@ -32,11 +33,22 @@ export const HikvisionApi = {
   /**
    * 获取监控点的 H5player 实时预览地址。
    *
-   * 后端接口待实现,约定 CommonResult.data 直接返回可供 JS_Play 使用的 URL 字符串
+   * streamType:0 为主码流,1 为子码流;CommonResult.data 返回可供 JS_Play 使用的 URL
    */
-  getPreviewUrl: (cameraIndexCode: string): Promise<string> => {
+  getPreviewUrl: (
+    cameraIndexCode: string,
+    streamType: HikvisionStreamType = 0
+  ): Promise<string> => {
     return request.get({
       url: '/vms/preview-url',
+      params: { cameraIndexCode, streamType }
+    })
+  },
+
+  /** 获取监控点的 H5player WSS 对讲地址。 */
+  getTalkUrl: (cameraIndexCode: string): Promise<string> => {
+    return request.get({
+      url: '/vms/talk-url',
       params: { cameraIndexCode }
     })
   }

+ 21 - 0
src/utils/hikvisionH5Player.ts

@@ -34,6 +34,8 @@ export interface HikvisionPlayerOptions {
 export interface HikvisionPlayerEvents {
   /** 取流、解码或播放器内部异常。 */
   pluginErrorHandler?: (windowIndex: number, errorCode: number, error: unknown) => void
+  /** 对讲采集、编码或连接异常。该回调不包含窗口下标,因为单实例仅支持一路对讲。 */
+  talkPluginErrorHandler?: (errorCode: number, error: unknown) => void
   /** 指定窗口首帧真正渲染完成,适合用于结束窗口 loading。 */
   firstFrameDisplay?: (windowIndex: number, width: number, height: number) => void
   /** 当前设备解码性能不足。 */
@@ -72,6 +74,25 @@ export interface HikvisionPlayerInstance {
   JS_Stop: (windowIndex?: number) => Promise<void>
   /** 停止当前实例中的全部实时预览。 */
   JS_StopRealPlayAll: () => Promise<void>
+  /** 抓取指定窗口的当前画面;不传 callback 时由 SDK 直接下载 JPEG 文件。 */
+  JS_CapturePicture: (
+    windowIndex: number,
+    fileName: string,
+    fileType: 'JPEG',
+    callback?: (imageData: string) => void
+  ) => Promise<void>
+  /** 开启指定窗口的声音;同一播放器实例同时只支持一路声音。 */
+  JS_OpenSound: (windowIndex?: number) => Promise<void>
+  /** 关闭指定窗口的声音。 */
+  JS_CloseSound: (windowIndex?: number) => Promise<void>
+  /** 使用监控点的 WSS 地址开启对讲;同一播放器实例同时只支持一路对讲。 */
+  JS_StartTalk: (talkUrl: string, options?: { token?: string }) => Promise<void>
+  /** 停止当前播放器实例正在进行的对讲。 */
+  JS_StopTalk: () => Promise<void>
+  /** 开启指定窗口的电子放大;开启后由 SDK 处理窗口内的框选放大交互。 */
+  JS_EnableZoom: (windowIndex?: number) => Promise<void>
+  /** 关闭指定窗口的电子放大并恢复原始画面。 */
+  JS_DisableZoom: (windowIndex?: number) => Promise<void>
   /** 调整分屏规格,参数 1~4 分别对应 1×1~4×4。 */
   JS_ArrangeWindow: (split: HikvisionSplitColumns) => Promise<void> | void
   /** 主动切换 SDK 内部选中的窗口。 */

Diff do ficheiro suprimidas por serem muito extensas
+ 788 - 38
src/views/pms/video_center/haikang/index.vue


Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff