Vue 3 对接保利威云点播播放器实践

首先,需要在项目中引入保利威的云点播播放器脚本。这个播放器的脚本可以从保利威的官网获取。我们将使用 Vue 3 的 onMountedonBeforeUnmount 这些生命周期函数来加载和卸载播放器。

实现步骤

1. 加载保利威播放器脚本

由于保利威的播放器脚本是异步加载的,我们需要动态创建一个 <script> 标签并在页面加载时插入到 document.body 中。脚本加载完毕后,我们通过回调函数初始化播放器。

const vodPlayerJs = "https://player.polyv.net/resp/vod-player/latest/player.js";
let player = null;const loadPlayerScript = (callback) => {if (!window.polyvPlayer) {const myScript = document.createElement("script");myScript.setAttribute("src", vodPlayerJs);myScript.onload = callback;document.body.appendChild(myScript);} else {callback();}
};
2. 获取视频密钥并初始化播放器

保利威的视频播放需要一个 token(视频密钥),这通常是通过后端 API 获取的。在 onMounted 生命周期钩子中,我们调用后端接口获取视频的密钥,并在获取到密钥后,加载保利威播放器脚本并初始化播放器。

const getdataCurrent = () => {123().123({videoId:123,user_id:123,}).then((data) => {if (data.data.token) {playsafe.value = data.data.token;loadPlayerScript(loadPlayer);}});
};
3. 初始化播放器

一旦播放器脚本加载完毕,我们使用 window.polyvPlayer 来初始化播放器。播放器的配置项包含 vid(视频 ID)、playsafe(视频密钥)以及其他播放器设置。我们还添加了事件监听器来获取视频播放进度,并在合适的时机向后端提交播放进度数据。

const loadPlayer = () => {const polyvPlayer = window.polyvPlayer;
player = polyvPlayer({wrap: "#player", // 播放器容器的选择器,指定播放器渲染的 DOM 元素width: "100%",   // 播放器的宽度,可以是像素值或百分比height: 450,     // 播放器的高度,可以是像素值或百分比speed: false,    // 是否启用播放速度控制,默认为 false 表示不启用ban_skin_progress: true, // 是否禁用皮肤进度条,默认为 false 表示不禁用,true 表示禁用ban_seek: "on",  // 是否禁用拖动进度条,默认为 "off" 表示不禁用,"on" 表示禁用ban_seek_by_limit_time: "on", // 是否限制拖动进度条的时间范围,默认为 "off" 表示不限制,"on" 表示限制vid: vid.value,  // 视频 ID,用于指定要播放的视频playsafe: playsafe.value, // 播放安全令牌,用于验证播放权限
});// 监听播放器初始化完成player.on("s2j_onPlayerInitOver", () => {console.log("播放器初始化完成");// 获取视频总时长const duration = player.j2s_getDuration();console.log("视频总时长:", duration);// 跳转到初始播放位置player.j2s_seekVideo(view_time.value);// 获取当前播放时间const currentTime = player.j2s_getCurrentTime();console.log("当前播放时间:", currentTime);});// 监听播放进度更新player.on("timeupdate", () => {const currentTime = player.j2s_getCurrentTime();emit("getCurrentTime", currentTime);});
};
4. 视频切换与销毁

在某些场景下,我们可能需要动态切换播放的视频。这可以通过 player.changeVid 来实现,我们在代码中提供了一个 setdataCurrent 方法来切换视频 ID。

当组件销毁时(onBeforeUnmount),我们还需要确保播放器被正确销毁,以避免内存泄漏。

const setdataCurrent = () => {console.log(vid.value, ";;;;");const option = {vid: "88083abbf5bcf1356e05d39666be527a_8",};player.changeVid(option); // 切换下一个视频
};onBeforeUnmount(() => {if (player) {player.destroy();}
});

5. 处理视频播放进度

播放器提供了 timeupdate 事件来监听播放进度的更新。我们可以通过 player.j2s_getCurrentTime() 获取当前播放的时间点,并将其通过 emit 向父组件发送,或提交给后端以保存用户的学习进度。

player.on("timeupdate", async () => {const currentTime = player.j2s_getCurrentTime();emit("getCurrentTime", currentTime);});

使用该组件:

      <Video:vid="vid"  //视频id:view_time="view_time" //回显观看进度@getCurrentTime="getCurrentTime" //获取观看进度></Video>

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

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

相关文章

数据结构:堆的应用

堆排序 假定有一组数据极多的数&#xff0c;让我们进行排序&#xff0c;那我们很容易想到一种经典的排序方法&#xff0c;冒泡排序&#xff0c;我们对冒泡排序的时间复杂度进行分析&#xff1a; 显然&#xff0c;冒泡排序的时间复杂度是O&#xff08;n^2&#xff09;,当数据量…

软考(中级-软件设计师)计算机系统篇(1024)

#1024程序员节|正文# 六、树和二叉树 6.1 树的基本概念 描述结果结点的度子结点的个数树的度最大结点的度叶子结点没有子结点的结点内部结点除根结点和叶子结点外的结点父节点有子结点的结点子节点有父结点的结点兄弟节点有同一个父结点的结点层次4层 6.2 二叉树的基本概念…

【Javaee】网络原理—TCP协议的核心机制

前言 TCP/IP五层协议是互联网中的主流模型&#xff0c;为网络通信提供了一个稳固的框架。 主要包含了应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层。 本篇主要介绍传输层的TCP协议的核心机制 一. 确认应答&#xff08;ack&#xf…

线程本地变量-ThreadLocal

一、ThreadLocal简介 ThreadLocal叫做线程变量&#xff0c;意思是ThreadLocal中填充的变量属于当前线程&#xff0c;该变量对其他线程而言是隔离的&#xff0c;也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本&#xff0c;那么每个线程可…

量子纠错--shor‘s 码

定理1 (量子纠错的条件) C是一组量子编码&#xff0c;P是映射到C上的投影算子。假设是一个算子元素描述的量子操作&#xff0c;那么基于量子编码C&#xff0c;存在一个能对抗描述的噪声的纠错操作R的充要条件是 对某个复元素厄米矩阵成立。 将算子元素称为导致的错误。如果这样…

[C++进阶数据结构]红黑树(半成品)

我们讲完了AVL树,它追求绝对平衡&#xff0c;从而导致插入和删除性能较差。今天我们来讲讲&#xff0c;红黑树&#xff0c;它是另一种平衡二叉搜索树&#xff0c;它追求相对平衡&#xff0c;使得增删查改的性能都极佳&#xff0c;时间复杂度皆为O(log2N)。 一、红黑树的概念 …

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全&#xff08;三) &#xff08;columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性&#xff09; 本文目录&#xff1a; 一、columns属性&#xff08;设置元素的列宽和列数&#xff09; 二、filter属性&#xff08;调整图像、背景和边…

Ribbon客户端负载均衡策略测试及其改进

文章目录 一、目的概述二、验证步骤1、源码下载2、导入IDE3、运行前修改配置4、策略说明5、修改策略 三、最终结论四、改进措施1. 思路分析2. 核心代码3. 测试页面 一、目的概述 为了验证Ribbon客户端负载均衡策略在负载节点失效的情况下&#xff0c;是否具有故障转移的功能&a…

【逆向基础】十七、PE文件格式(二)

一、简介 本篇章主要PE文件组成部分中使用的结构体&#xff1b;根据结构体的成员变量去了解各个字节的含义。&#xff08;ps:我们依旧以”cmd.exe“为例展开解析&#xff1b;) 二、DOS Header 1、结构体&#xff1a;IMAGE_DOS_HEADER IMAGE_DOS_HEADER结构体的背景是为了兼…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip&#xff0c;作为一款开源且功能强大的文件压缩工具&#xff0c;凭借其高压缩率、支持多种格式以及免费使用的特点&#xff0c;赢得了广大用户的青睐。然而&#xff0c;出于保护文件内容安全的考虑&#xff0c…

基于NVIDIA NIM平台—生成属于自己的DIY食谱

目录 一、介绍NVIDIA NIM平台 二、生成DIY食谱Demo 三、小结 一、介绍NVIDIA NIM平台 NVIDIA NIM&#xff08;Nvidia Inference Microservices&#xff09;平台是NVIDIA推出的一个微服务套件&#xff0c;旨在加速生成式AI模型在云端、数据中心和工作站上的部署和使用。以下是…

怎么区分主谓宾I love you与主系表I am fine? 去掉宾语看句子完整性 主系表结构则侧重于描述主语的状态、特征或性质

主谓宾与主系表是英语句子结构中的两种基本类型&#xff0c;它们在关注点、动词分类以及句子完整性方面有所区别。具体分析如下&#xff1a; 关注点 主谓宾I love you&#xff1a;主谓宾结构主要关注动作和影响对象之间的关系[1]。这种结构强调的是动态和行为&#xff0c;通常描…

4K双模显示器7款评测报告

4K双模显示器7款评测报告 HKC G27H7Pro 4K双模显示器 ROG华硕 XG27UCG 4K双模显示器 雷神 ZU27F160L 4K双模显示器 泰坦军团 P275MV PLUS 4K双模显示器 外星人&#xff08;Alienware&#xff09;AW2725QF 4K双模显示器 SANC盛色 D73uPro 4K双模显示器 ANTGAMER蚂蚁电竞 …

MySql中表的约束

​ 本篇中将会介绍关于 MySql 数据库中的表的约束&#xff0c;关于表的约束其实约束的是表中的数据类型&#xff0c;因为有的数据类型很单一&#xff0c;需要我们添加一些额外的约束&#xff0c;才能更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性&#xf…

Notepad++通过自定义语言实现日志按照不同级别高亮

借助Notepad的自定义语言可以实现日志的按照不同级别的高亮&#xff1b; 参考&#xff1a; https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下&#xff1a; xml文件&#xff1a; <NotepadPlus><UserLang name"Ansibl…

leetCode算法题爬楼梯递归写法

题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2输出&#xff1a;2解释&#xff1a;有两种方法可以爬到楼顶。1. 1 阶 1 阶2. 2 阶 …

GPIO输入和输出

参考视频&#xff1a;2.1 [GPIO]4种输出模式_哔哩哔哩_bilibili 输出&#xff1a;通过写0或者写1&#xff0c;控制引脚输出低电压或高电压。 输入&#xff1a;通过读取引脚是0还是1&#xff0c;判断引脚输入的是高电压还是低电压。 输出 推挽开漏通用通用输出推挽通用输出开漏…

Asp.net Core MVC 动态路由

动态路由 asp.net core 3.0 就支持了 // 映射关系public class TranslationDatabase{private static Dictionary<string, Dictionary<string, string>> Translations new Dictionary<string, Dictionary<string, string>>{{"en", new Dictio…

yolo自动化项目实例解析(八)自建UI-键鼠录制回放

项目中关于键鼠的操作&#xff0c;不像我们之前自动化那样一步一步去定义的&#xff0c;而是用C写了一个记录键鼠的操作&#xff0c;通过回放的方法来实现的 一、通讯系统 1、创建websocket服务器 首先通过事件循环asyncio 和websockets&#xff0c;创建一个持久化的服务端进程…

通过页面添加国际化数据,实现vue的国际化

element ui 写在前面1. 原有的vue的国际化处理1.1 语言文件1.2 lang的index.js1.3 入口文件导入1.3 应用 2. 通过页面添加国际化数据2.1 做法2.2 lang的index.js文件修改2.3 需要注意的点 总结写在最后 写在前面 需求&#xff1a;在系统的国际化管理页面添加国际化数据&#x…