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

news2025/4/16 22:20:33

需求:需要在大屏上播放萤石视频,用到官方的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', // 视频容器ID
                accessToken: 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 domain
                    domain: '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, // 视频最小高度,单位为px
                    accessToken: options.accessToken, //accessToken 的值为你在莹石云平台监控地址的token
                    url: options.address
                })
                .then(() => {
                    console.log('切换成功');
                });
        },

4.完整代码

<template>
    <div class="hello-ezuikit-js">
        <el-select
            style="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', // 视频容器ID
                accessToken: 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 domain
                    domain: '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, // 视频最小高度,单位为px
                    accessToken: options.accessToken, //accessToken 的值为你在莹石云平台监控地址的token
                    url: 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.coloradmin.cn/o/2335271.html

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

相关文章

【笔试强训day19】

目录 第一题&#xff1a;小易的升级之路 描述 输入描述&#xff1a; 输出描述&#xff1a; 输入&#xff1a; 输出&#xff1a; 第二题&#xff1a;礼物的最大价值 描述 输入&#xff1a; 返回值&#xff1a; 备注&#xff1a; 第三题&#xff1a;对称之美 题目描述…

STM32电机库 电机控制特性

ST MC FW库提供FOC和六步法两种电机控制方式。这使得它能够驱动永磁同步电机 (PMSM) 和无刷直流电机 (BLDC)。FOC 更适合 PMSM,而六步法更适合 BLDC 电机。该固件可以驱动内嵌式PMSM 和标贴式PMSM。 ST Motor Control 固件库提供以下功能: FOC SVPWM 生成: 可配置的 PW…

【Linux】42.网络基础(2.4)

文章目录 2.3 TCP协议2.3.10 拥塞控制2.3.11 延迟应答2.3.12 捎带应答2.3.13 面向字节流2.3.14 粘包问题2.3.15 TCP异常情况2.3.16 TCP小结2.3.17 基于TCP应用层协议 2.3 TCP协议 2.3.10 拥塞控制 虽然TCP有了滑动窗口这个大杀器, 能够高效可靠的发送大量的数据. 但是如果在刚…

SPI接口DAC设备驱动与应用程序开发

本文章相关专栏往期内容&#xff0c;SPI子系统专栏&#xff1a; SPI通信协议与Linux设备驱动框架解析SPI传输与驱动框架的实现spidev.c&#xff1a;SPI设备驱动的核心实现逻辑 PCI/PCIe子系统专栏&#xff1a; 专栏地址&#xff1a;PCI/PCIe子系统PCIe设备MSI/MSI-X中断源码分析…

第十六届蓝桥杯大赛软件赛省赛 Python 大学 B 组 满分题解

题面链接Htlang/2025lqb_python_b 个人觉得今年这套题整体比往年要简单许多&#xff0c;但是G题想简单了出大问题&#xff0c;预估50101015120860&#xff0c;道阻且长&#xff0c;再接再厉 代码仅供学习参考&#xff0c;满分为赛后洛谷中的测评&#xff0c;蓝桥杯官方测评待…

旧版 VMware 虚拟机迁移至 KVM 平台-案例2

项目背景 需将一台旧版 VMware 虚拟机&#xff08;VMDK 格式&#xff09;迁移至 KVM 虚拟化平台&#xff0c;具体要求如下&#xff1a; 格式转换&#xff1a;将 VMDK 转换为 QCOW2 格式。磁盘扩容&#xff1a;将原 40GB 磁盘扩展至 60GB。密码重置&#xff1a;修改 aiden 用户…

若依代码生成器原理velocity模板引擎(自用)

1.源码分析 代码生成器:导入表结构(预览、编辑、删除、同步)、生成前后端代码 代码生成器表结构说明&#xff1a; 若依提供了两张核心表来存储导入的业务表信息&#xff1a; gen_table&#xff1a;存储业务表的基本信息 &#xff0c;它对应于配置代码基本信息和生成信息的页…

OpenCV直方图均衡化全面解析:从灰度到彩色图像的增强技术

目录 一、直方图均衡化基础&#xff1a;原理与核心思想 二、彩色图像的直方图均衡化&#xff1a;挑战与解决方案 三、进阶技巧与注意事项 四、应用场景与典型案 一、直方图均衡化基础&#xff1a;原理与核心思想 1. 直方图的本质与作用 直方图是图像像素强度分布的统计图表…

Web前端之Vue+Element实现表格动态复杂的合并行功能、localeCompare、forEach、table、push、sort、Map

MENU 效果图公共数据数据未排序时&#xff08;需要合并的行数据未处于相邻位置&#xff09;固定合并行方法&#xff08;写死&#xff09;动态合并行&#xff0c;行数计算方法当太合并行&#xff0c;合并方法方法&#xff08;函数&#xff09;执行 效果图 公共数据 Html <e…

【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup&#xff0c;目的是为了进一步提…

嵌入式进阶:如何选择合适的开发平台?

随着现代工业、物联网以及人工智能技术的迅速发展&#xff0c;嵌入式系统已经由简单的控制器向复杂的高性能系统迈进。从传统家电到智能机器人、从自动驾驶汽车到工业自动化&#xff0c;每一项应用都对嵌入式系统的响应速度、运行稳定性和能耗管理提出了更高要求。在这种背景下…

酶动力学参数预测,瓶颈识别……中科院深圳先进技术研究院罗小舟分享AI在酶领域的创新应用

蛋白质&#xff0c;作为生命的基石&#xff0c;在生命活动中发挥着关键作用&#xff0c;其结构和功能的研究&#xff0c;对创新药物研发、合成生物学、酶制剂生产等领域&#xff0c;有着极其重要的意义。但传统蛋白质设计面临诸多难题&#xff0c;蛋白质结构复杂&#xff0c;序…

kafka4.0浅尝辄止

最近工作中接触消息队列比较多&#xff0c;前几周又看到kafka4.0发布&#xff0c;故写一篇博客对消息队列做一个复盘。 目录 消息队列对比1. Apache Kafka 4.02. RabbitMQ3. RocketMQ4. ActiveMQ5. Apache Pulsar6. NSQ kafka4.0鲜明的新特性Java 版本要求升级API 更新与精简移…

数据库原理及应用mysql版陈业斌实验三

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 实验三多表查询 1.实验数据如下 student 表&#xff08;学生表&#…

OpenHarmony - 小型系统内核(LiteOS-A)(二)

OpenHarmony - 小型系统内核&#xff08;LiteOS-A&#xff09;&#xff08;二&#xff09; 三、基础内核 3.1、中断及异常处理 基本概念 中断是指出现需要时&#xff0c;CPU暂停执行当前程序&#xff0c;转而执行新程序的过程。即在程序运行过程中&#xff0c;出现了一个必须…

数字化引擎再升级:小匠物联十周年庆典与全链路创新实践

4月11日&#xff0c;浙江宁波的小匠物联十周年庆典拉开帷幕。本次活动以“拾阶而上&#xff0c;智创未来”为主题&#xff0c;从全员签到、心愿书写&#xff0c;到董事长致辞、切蛋糕及全体合影&#xff0c;每一个环节都精心设计&#xff0c;展现出企业在家用物联网领域的卓越技…

开发工具-jetbrains使用技巧

更详细的可以看 狂神说Java】JavaWeb入门到实战 p6 idea中maven的操作 可以设置怎么调试 然后还可以wsl、远程方式等运行 maven 这里的相当于cmd的操作 命令行去执行这些东西

HarmonyOS:页面滚动时标题悬浮、背景渐变

一、需求场景 进入到app首页或者分页列表首页时&#xff0c;随着页面滚动&#xff0c;分类tab要求固定悬浮在顶部。进入到app首页、者分页列表首页、商品详情页时&#xff0c;页面滚动时&#xff0c;顶部导航栏&#xff08;菜单、标题&#xff09;背景渐变。 二、相关技术知识点…

信息系统项目管理师-第十八章-项目绩效域

本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 本文章记录学习过程中,重要的知识点,是否为重点的依据,来源于官方教材和历年考题,持续更新共勉 在整个生命周期过程中,项目管理者需要始终坚持项目管理原则,通过涵盖 10 …

[NOIP 2003 普及组] 栈 Java

import java.io.*;public class Main {public static void main(String[] args) throws IOException {BufferedReader br new BufferedReader(new InputStreamReader(System.in));int n Integer.parseInt(br.readLine());int[] dp new int[n 1];dp[0] 1; // 空序列只有一种…