vue3萤石云视频监控对接及语音对讲ezuikit-js

478 阅读2分钟

一、前言

本文只是简单分享最近的小demo。海康威视设备对接萤石云实现实时观看直播和语音对讲功能。



废话不多开始

二、实操

安装ezuikit-js

npm引入

npm install ezuikit-js

在vue里引用并初始化

我这里是提成了组件,大家可以按需食用

获取播放地址的接口可以参考官网: 获取播放地址

下面的视频初始化参数也可以访问官网: UiKit

<script setup lang="ts">
import { onMounted, onUnmounted } from 'vue'
import EZUIKit from 'ezuikit-js';
​
const props = defineProps({
  videoUrl: String,
  width: String,
  height: String,
}); 
// 生成一个唯一的 containerId
const containerId = ref(`video-container-${Math.random().toString(36).substr(2, 9)}`);
let video = ref({})
const getVideo = () => {
  return video.value
}
​
const autoVideo = () => {
  const accessToken = "your_actual_access_token_here"; // 替换为实际的访问令牌
  video.value = new EZUIKit.EZUIKitPlayer({
    autoplay: true,  // 默认播放
    //视频播放包裹元素
    id: containerId.value,
    //萤石token
    accessToken: accessToken,
    // ezopen://open.ys7.com/${设备序列号}/{通道号}.live
    url: props.videoUrl, // 播放地址
    template: "standard", // simple - 极简版;standard-标准版;security - 安防版(预览回放);voice-语音版;
    plugin: ['talk'], // 加载插件,talk-对讲
    // 视频下方底部控件
    footer: ["talk", "broadcast", "hd", "fullScreen"], // 如果template参数不为simple,该字段将被覆盖
    audio: 1, // 是否默认开启声音 0 - 关闭 1 - 开启
    width: props.width ? props.width : 770,
    height: props.height ? props.height : 500,
  });
}
​
onMounted(() => {
  autoVideo()
})
​
 onUnmounted(() => {
  video.value.stop()
  video.value.stopTalk()
})
// vue3父子通信
defineExpose({getVideo, video})
</script><template>
  <div class="video">
    <div :id="containerId"></div>
    <div style="display: flex; padding: 10px 0px;">
      <el-button type="success" @click="onStartTalk">
        <template #default="scope">
          <el-icon><Bell /></el-icon>
          <el-icon><Microphone /></el-icon>
          双向对讲
        </template>
      </el-button>
      <el-button type="success" @click="onStartTalkBAN">
        <template #default="scope">
          <el-icon><MuteNotification /></el-icon>
          <el-icon><Microphone /></el-icon>
          单向对讲
        </template>
      </el-button>
      <el-button type="warning" icon="Mute" @click="onStopTalk">关闭对讲</el-button>
    </div>
  </div>
</template>
<style lang="scss" scoped>
.video {
  width: 100%;
  height: 100%;
}
</style>

对讲功能

语音功能需设置:音频AAC 、通道传输协议需为tcp (ps:这个是萤石云客服一通交流的结果)

在实现这个功能前需要先确定自己的设备支不支持语音,可以访问 获取设备能力集 发送POST请求 support_talk 值是否为 1

萤石云官方直播插件带的对讲会关闭声音所以我就自己写了

/**
 * 开启对讲不关闭声音
 */
const onStartTalk = () => {
  setTimeout(() => {
    video.value.startTalk();
  }, 500);  // 延时500毫秒
}
​
/**
 * 开启对讲关闭声音
 */
 const onStartTalkBAN = () => {
  setTimeout(() => {
    video.value.closeSound();
    video.value.startTalk();
  }, 500);  // 延时500毫秒
}
​
/**
 * 关闭对讲
 */
const onStopTalk = () => {
  setTimeout(() => {
    video.value.stopTalk();
  }, 500);  // 延时500毫秒
}

具体可以查看**萤石云官方api文档**