vue2使用ezuikit-js播放萤石视频

需求:需要在大屏上播放萤石视频,用到官方的ezuikit-js插件实现,并实现视频播放切换功能。有个问题至今没有解决,就是萤石视频的宽高是固定的,不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。

1.下载ezuikit-js

我在这下载的是0.7.2版本,最新版已经到8+,但是下载后运行报错了,可能不适配vue2,稳点就下载这个版本就行

ezuikit-js - npm

npm install ezuikit-js@0.7.2 --save

 2.效果如下

token和url都是官网拷贝的,所以播放不了,项目中改为有效果的token即可

3.主要代码讲解

首先肯定是引入

我们使用第二种引入即可

// >= v8.1.2  ESM
import { EZUIKitPlayer } from "ezuikit-js";// < v8.1.2
import EZUIKit from "ezuikit-js";

主要方法:

  1. player.play();播放

  2. player.stop();停止播放

  3. player.openSound();停止声音

  4. player.closeSound();关闭声音

  5. player.fullScreen();全屏

  6. player.cancelFullScreen();关闭全屏

  7. player.destroy()销毁视频

  8. player.changePlayUrl({})切换视频

视频播放主要就是如下代码,env一般不设置, template: 'pcLive',可以设置视频最底部的操作栏,this.$refs.videoContainer就是获取父级的盒子的宽高之后每次刷新页面都根据父级的宽高设置视频的宽高

        <div class="video-box" ref="videoContainer"><div id="video-container"></div></div>init() {if (player) {this.destroy();}const findItms = this.videos.find((item) => item.id === this.videoSelect);const container = this.$refs.videoContainer;console.log(container.clientWidth, container.clientHeight, '最大值和最小值');player = new EZUIKit.EZUIKitPlayer({id: 'video-container', // 视频容器IDaccessToken: findItms.accessToken,url: findItms.address,// simple: 极简版; pcLive: pc直播; pcRec: pc回放; mobileLive: 移动端直播; mobileRec: 移动端回放;security: 安防版; voice: 语音版;template: 'pcLive',// plugin: ["talk"], // 加载插件,talk-对讲width: container.clientWidth,height: container.clientHeight,handleError: (error) => {console.error('handleError', error);},// language: "en", // zh | en// staticPath: "/ezuikit_static", // 如果想使用本地静态资源,请复制根目录下ezuikit_static 到当前目录下, 然后设置该值env: {// https://open.ys7.com/help/1772?h=domain// domain默认是 https://open.ys7.com, 如果是私有化部署或海外的环境,请配置对应的domain// The default domain is https://open.ys7.com If it is a private deployment or overseas (outside of China) environment, please configure the corresponding domaindomain: 'https://open.ys7.com'}});window.player = player;},.video-box {width: 30vw;height: 30vh;
}

3.1效果如下

3.2切换视频

只需要使用changePlayUrl方法之后传token和地址就可以了

       changeVideo(val) {console.log(val, '-----');let options = this.videos.find((item) => item.id == val);player.changePlayUrl({// minHeight: 100, // 视频最小高度,单位为pxaccessToken: options.accessToken, //accessToken 的值为你在莹石云平台监控地址的tokenurl: options.address}).then(() => {console.log('切换成功');});},

4.完整代码

<template><div class="hello-ezuikit-js"><el-selectstyle="margin: 30px 0px"v-model="videoSelect":teleported="false"popper-class="popperClass"placeholder="请选择"size="mini"@change="changeVideo"><el-option v-for="(item, index) in videos" :key="item.index" :label="item.name" :value="item.id"> </el-option></el-select><div class="video-box" ref="videoContainer"><div id="video-container"></div></div><div><button v-on:click="init">初始化视频</button><button v-on:click="stop">停止视频</button><button v-on:click="play">开始播放</button></div></div>
</template><script>
import EZUIKit from 'ezuikit-js';
var player = null;export default {name: 'HelloWorld',props: {msg: String},data() {return {videoSelect: 1,videos: [{id: 1,accessToken: 'at.3bvmj4ycamlgdwgw1ig1jruma0wpohl6-48zifyb39c-13t5am6-yukyi86mz',name: '视频11',address: 'ezopen://open.ys7.com/BD3957004/1.live'},{id: 2,name: '视频12',accessToken: 'at.1gskp9sk9b8pol288qw4f0ladj6ow00a-2obk8zrvgd-0icd73x',address: 'ezopen://open.ys7.com/BC7900686/1.hd.live'}]};},mounted: () => {console.group('mounted 组件挂载完毕状态===============》');},methods: {init() {if (player) {this.destroy();}const findItms = this.videos.find((item) => item.id === this.videoSelect);const container = this.$refs.videoContainer;console.log(container.clientWidth, container.clientHeight, '最大值和最小值');player = new EZUIKit.EZUIKitPlayer({id: 'video-container', // 视频容器IDaccessToken: findItms.accessToken,url: findItms.address,// simple: 极简版; pcLive: pc直播; pcRec: pc回放; mobileLive: 移动端直播; mobileRec: 移动端回放;security: 安防版; voice: 语音版;template: 'pcLive',// plugin: ["talk"], // 加载插件,talk-对讲width: container.clientWidth,height: container.clientHeight,handleError: (error) => {console.error('handleError', error);},// language: "en", // zh | en// staticPath: "/ezuikit_static", // 如果想使用本地静态资源,请复制根目录下ezuikit_static 到当前目录下, 然后设置该值env: {// https://open.ys7.com/help/1772?h=domain// domain默认是 https://open.ys7.com, 如果是私有化部署或海外的环境,请配置对应的domain// The default domain is https://open.ys7.com If it is a private deployment or overseas (outside of China) environment, please configure the corresponding domaindomain: 'https://open.ys7.com'}});window.player = player;},play() {var playPromise = player.play();playPromise.then((data) => {console.log('promise 获取 数据', data);});},stop() {var stopPromise = player.stop();stopPromise.then((data) => {console.log('promise 获取 数据', data);});},changeVideo(val) {console.log(val, '-----');let options = this.videos.find((item) => item.id == val);player.changePlayUrl({// minHeight: 100, // 视频最小高度,单位为pxaccessToken: options.accessToken, //accessToken 的值为你在莹石云平台监控地址的tokenurl: options.address}).then(() => {console.log('切换成功');});},destroy() {var destroyPromise = player.destroy();destroyPromise.then((data) => {console.log('promise 获取 数据', data);});player = null;}}
};
</script>
<style lang="scss" scoped>
.hello-ezuikit-js {height: 700px;width: 100%;
}
.video-box {width: 30vw;height: 30vh;
}
</style>

文章到此结束,希望对你有所帮助~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

爱普生TG-5510CA和TG-5510CB晶振成为服务器中的理想之选

在数字化时代&#xff0c;服务器作为数据存储、处理与传输的核心枢纽&#xff0c;其性能的优劣直接影响着整个信息系统的运行效率与稳定性。从企业内部的数据中心到云计算服务提供商的大规模集群&#xff0c;服务器需要应对海量数据的高速处理与频繁交互。而在服务器复杂精密的…

使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标

1.安装docker&#xff0c;docker-compose &#xff08;1&#xff09;安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22.2、部署dockertar xvf docker-20.10.19.tgz cp docker/* /usr/bin/vim /usr/lib/systemd/system/docker.service[Unit] Descript…

5. 蓝桥公园

题目描述 小明喜欢观景&#xff0c;于是今天他来到了蓝桥公园。 已知公园有 N 个景点&#xff0c;景点和景点之间一共有 M 条道路。小明有 Q 个观景计划&#xff0c;每个计划包含一个起点 stst 和一个终点 eded&#xff0c;表示他想从 stst 去到 eded。但是小明的体力有限&am…

虚幻基础:碰撞帧运算

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 碰撞碰撞盒线段检测 帧运算&#xff1a;每个程序流就是一帧的计算结果速度过快时(10000)&#xff0c;导致每帧移动过大(83)&#xff0c;从而导致碰撞盒错过而没有碰撞速度快的碰撞要用线段检测 碰撞 碰撞盒 线段检…

Qt 入门 3 之对话框 QDialog

Qt 入门 3 之对话框 QDialog 本文从以下几点分开讲述&#xff1a; - 对话框的基本原理介绍 - 两种不同类型的对话框 - 一个由多个窗口组成并且窗口间可以相互切换的程序 1.模态和非模态对话框 QDialog 类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者…

数据结构——哈希技术及链地址法

目录 一、哈希的定义 二、哈希冲突定义 三、构造哈希函数的方法 四、四种解决哈希冲突的方法 4.1 开放地址法 4.2 链地址法 4.3 再散列函数法 4.4 公共区溢出法 五、链地址法结构体设计 六、基本操作的实现 6.1 哈希函数 6.2 初始化 6.3 插入值 6.4 删除值 6.5 查…

算法思想之前缀和(二)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之前缀和(二) 发布时间&#xff1a;2025.4.11 隶属专栏&#xff1a;算法 目录 滑动窗口算法介绍核心思想大致步骤 例题和为 K 的子数组题目链接题目描述算法思路代码实现 和可被 K 整除的子数组题目链接题目…

开源的7B参数OCR视觉大模型:RolmOCR

1. 背景介绍 早些时候&#xff0c;Allen Institute for AI 发布了 olmOCR&#xff0c;这是一个基于 Qwen2-VL-7B 视觉语言模型&#xff08;VLM&#xff09;的开源工具&#xff0c;用于处理 PDF 和其他复杂文档的 OCR&#xff08;光学字符识别&#xff09;。开发团队对该工具的…

移动端六大语言速记:第14部分 - 数据库操作

移动端六大语言速记:第14部分 - 数据库操作 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在数据库操作方面的特性,帮助开发者理解和掌握各语言的数据库编程能力。 14. 数据库操作 14.1 SQL查询 各语言SQL查询实现方式对比: 特性Ja…

有哪些反爬机制可能会影响Python爬取视频?如何应对这些机制?

文章目录 前言常见反爬机制及影响1. IP 封禁2. 验证码3. 请求头验证4. 动态加载5. 加密与混淆6. 行为分析 应对方法1. 应对 IP 封禁2. 应对验证码3. 应对请求头验证4. 应对动态加载5. 应对加密与混淆6. 应对行为分析 前言 在使用 Python 爬取视频时&#xff0c;会遇到多种反爬…

ESP32开发入门:基于VSCode+PlatformIO环境搭建指南

前言 ESP32作为一款功能强大的物联网开发芯片&#xff0c;结合PlatformIO这一现代化嵌入式开发平台&#xff0c;可以大幅提升开发效率。本文将详细介绍如何在VSCode中搭建ESP32开发环境&#xff0c;并分享实用开发技巧。 一、环境安装&#xff08;Windows/macOS/Linux&#xf…

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战

DeepSeek&#xff1a;穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组&#xff08;人机协同创作&#xff09; 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示&#xff0c;百度搜索结果前10页中&#xff0c;61.7%的内容存在"伪专业化"现象——看似…

SQL 外键(Foreign Key)详细讲解

1. 什么是外键&#xff1f;​​ ​​定义​​&#xff1a;外键是数据库表中的一列&#xff08;或一组列&#xff09;&#xff0c;用于​​建立两个表之间的关联关系​​。外键的值必须匹配另一个表的主键&#xff08;Primary Key&#xff09;或唯一约束&#xff08;Unique Con…

5G中的DU和CU的作用

在5G网络架构中&#xff0c;CU&#xff08;Centralized Unit&#xff0c;集中单元&#xff09; 和 DU&#xff08;Distributed Unit&#xff0c;分布单元&#xff09; 是无线接入网&#xff08;RAN&#xff09;的重要组成部分&#xff0c;它们的分工和作用如下&#xff1a; 1.…

深度解析 n8n:强大的开源工作流自动化平台

在数字化时代&#xff0c;企业和个人面临着日益复杂的工作流程和多样化的应用工具&#xff0c;如何高效整合这些资源、实现工作流的自动化成为提升效率的关键。n8n 作为一款开源的工作流自动化平台&#xff0c;凭借其强大的功能、广泛的应用集成能力和灵活的部署方式&#xff0…

ruby超高级语法

以下是 Ruby 中一些 极度硬核 的语法和底层特性&#xff0c;涉及元编程的深渊、虚拟机原理、语法黑魔法等&#xff0c;适用于追求极限的 Ruby 开发者&#xff1a; 高级语法一 一、语法核弹级操作 1. 动态修改继承链 class A; def foo; "A"; end end class B; def …

flutter 获取通话记录和通讯录

Dart SDK version is 3.7.01 dependencies:flutter:sdk: flutterpermission_handler: ^11.0.1 # 权限管理flutter_contacts: ^1.1.92call_log: ^5.0.5cupertino_icons: ^1.0.8dev_dependencies:flutter_test:sdk: flutterflutter_lints: ^5.0.0 2 contact_and_calls_page.da…

bash脚本手动清空mysql表数据

文章目录 1、bash脚本手动清空mysql表数据 1、bash脚本手动清空mysql表数据 #!/bin/bash# 配置区域&#xff08;修改此处&#xff09; MYSQL_USER"root" MYSQL_PASSWORD"123456" MYSQL_HOST"localhost" DATABASES("hps-base:base_test_ite…

Spark Core编程

一文读懂Spark Core编程核心要点 最近在学习大数据处理框架Spark&#xff0c;今天来给大家分享一下Spark Core编程中非常重要的内容&#xff0c;包括RDD算子、累加器和广播变量&#xff0c;希望能帮助大家更好地理解和掌握Spark编程。先来说说RDD算子&#xff0c;它是Spark编程…

SDP(一)

SDP(Session Description Protocol)会话描述协议相关参数 Session Description Protocol Version (v): 0 --说明&#xff1a;SDP当前版本号 Owner/Creator, Session Id (o): - 20045 20045 IN IP4 192.168.0.0 --说明&#xff1a;发起者/创建者 会话ID&#xff0c;那么该I…