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

ops/2024/10/25 16:23:12/

首先,需要在项目中引入保利威的云点播播放器脚本。这个播放器的脚本可以从保利威的官网获取。我们将使用 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.ppmy.cn/ops/128382.html

相关文章

MTCNN 人脸识别:从不同场景照片中获取登记照(2)优化

​ 对MTCNN 人脸识别&#xff1a;从不同场景照片中获取登记照&#xff08;1&#xff09;进行了优化&#xff1a; 优化修改说明 保持原始文件名处理&#xff1a; 删除了所有与重命名文件相关的代码&#xff0c;直接使用原始文件名进行处理和保存&#xff0c;确保支持中文文件名…

草地杂草数据集野外草地数据集田间野草数据集YOLO格式VOC格式目标检测计算机视觉数据集

一、数据集概述 数据集名称&#xff1a;杂草图像数据集 数据集是一个包含野草种类的集合&#xff0c;其中每种野草都有详细的特征描述和标记。这些数据可以包括野草的图片、生长习性、叶片形状、颜色等特征。 1.1可能应用的领域 农业领域: 农业专家和农民可以利用这一数据集来…

docker 多架构接口数据交换

前言 docker 的仓库支持一个 tag 下多个架构镜像, 这是如何实现的呢? 抓包看看其数据交互流程 前提 错误处理 执行命令buildx报错: ERROR: Multi-platform build is not supported for the docker driver. Switch to a different driver, or turn on the containerd imag…

第 5 章 Kafka 消费者

5.1 Kafka 消费方式 5.2 Kafka 消费者工作流程 5.2.1 消费者总体工作流程 5.2.2 消费者组原理 5.2.3 消费者重要参数 5.3 消费者 API 5.3.1 独立消费者案例&#xff08;订阅主题&#xff09; package com.atguigu.kafka.consumer;import org.apache.kafka.clients.consume…

从零学习大模型(六)-----LoRA(上)

LoRA简介 LoRA&#xff08;Low-Rank Adaptation&#xff09;是一种参数高效的微调技术&#xff0c;旨在降低微调大规模预训练模型的存储和计算成本。**其核心思想是通过对模型的特定参数进行低秩分解&#xff0c;仅对少量附加参数进行训练&#xff0c;从而完成任务适应&#x…

证明在由特定矩阵生成的幺半子群中,存在收敛序列的子序列,其元素也能分别构成收敛序列

设 H H H是 G L 4 ( R ) GL_4(\mathbb{R}) GL4​(R)的由矩阵 ( 1 a 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ) , ( 1 0 0 0 0 1 b 0 0 0 1 0 0 0 0 1 ) , ( 1 0 0 0 0 1 0 0 0 0 1 c 0 0 0 1 ) \begin{pmatrix}1&a&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&…

Linux内核常见的网络丢包场景分析,零基础入门到精通,收藏这一篇就够了

摘要 一个数据包在网络中传输的过程中&#xff0c;是没法保证一定能被目的机接收到的。其中有各种各样的丢包原因&#xff0c;今天来学习一下数据包经过 linux 内核时常见的丢包场景。 1 收发包处理流程 有必要再回顾下 linux 内核的收发包处理流程&#xff0c;才能更好的认清…

pytorch nn.NLLLoss和nn.CrossEntropyLoss函数区别

nn.CrossEntropyLoss(交叉熵损失函数) 和nn.NLLLoss (负对数似然损失函数)的区别 输入格式&#xff1a; nn.CrossEntropyLoss&#xff1a;直接接受未归一化的 logits 作为输入&#xff0c;并在内部自动应用 log_softmax 来计算对数概率。nn.NLLLoss&#xff1a;接受对数概率&a…