html5视频播放实现续播功能(视频自动续播)
文章摘要:视频自动续播功能通过记录播放进度,实现用户再次观看时从上次中断处继续播放。该功能利用JavaScript监听视频事件(timeupdate/pause),使用localStorage存储视频ID和播放时间(currentTime),并在页面加载时读取设置。核心代码包括:1)加载时读取存储时间并设置;2)播放过程中定期保存进度;3)处理暂停/页面关闭等事件确保最后进度保存。适用于教学培训等
视频自动续播功能,是指播放器默认会记录视频上次观看到的时间点,在同一浏览器中再次打开播放页面,会自动从上一次观看的时间点继续播放,实现流畅、不间断的观看体验,尤其适用于教学培训课程的观看场景。
<div id="player"></div>
<script src="//player.polyv.net/resp/vod-player/latest/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '88083abbf5bcf1356e05d39666be527a_8',
history_video_duration: 3, //默认时长超过5分钟的视频才会开启续播功能,可通过此参数修改,单位:分钟。
ban_history_time: 'off' //当值为'on'时会禁用续播功能
});
</script>
<div id="player"></div>
<script src="//player.polyv.net/resp/vod-player/latest/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '88083abbf5bcf1356e05d39666be527a_8',
history_video_duration: 3, //默认时长超过5分钟的视频才会开启续播功能,可通过此参数修改,单位:分钟。
ban_history_time: 'off' //当值为'on'时会禁用续播功能
});
</script>
以下为视频自动续播的截图:

视频自动续播(视频从上一次中断的时间点03:50,自动续播)

视频自动续播(视频从上一次中断的时间点05:15,自动续播)
演示:https://tony.89525.com/continue-playing.php
https://tony.89525.com/continue-playing.php
实现思路概述
-
记录时间: 监听视频的特定事件(如
timeupdate或pause),获取当前的currentTime。 -
存储时间: 使用
localStorage(或sessionStorage)将视频ID和对应的播放时间保存到浏览器。 -
读取时间: 在页面加载和视频准备播放时,从存储中读取上次保存的时间。
-
设置时间: 将读取到的时间值赋给视频的
currentTime属性。
const video = document.getElementById('myVideo');
// ⚠️ 建议使用视频的唯一标识(例如:文件路径或自定义ID)作为 localStorage 的键
// 为了简化示例,我们直接使用视频元素的ID。
const videoId = 'myVideo';
const storageKey = `video_playback_time_${videoId}`;
// --- 1. 读取并设置播放时间(页面加载时) ---
function loadPlaybackTime() {
const storedTime = localStorage.getItem(storageKey);
if (storedTime) {
// 确保视频元数据加载完成后再设置 currentTime
video.addEventListener('loadedmetadata', function() {
// 将存储的时间(字符串)转换回浮点数并设置
video.currentTime = parseFloat(storedTime);
console.log(`已加载上次播放时间: ${storedTime} 秒`);
// 可选:设置 muted 为 true 并尝试播放,以绕过浏览器自动播放限制
// video.muted = true;
// video.play().catch(e => console.log('自动播放失败:', e));
}, { once: true }); // 确保只执行一次
} else {
console.log('未找到上次播放记录。');
}
}
// --- 2. 实时记录播放时间(播放/暂停时) ---
function savePlaybackTime() {
// 检查视频是否已播放
if (video.currentTime > 0) {
// 将当前的播放时间保存为字符串
// 使用 toFixed(1) 保留一位小数以减少存储开销,精确度足够
const currentTime = video.currentTime.toFixed(1);
localStorage.setItem(storageKey, currentTime);
// console.log(`已保存当前播放时间: ${currentTime} 秒`); // 实时记录可能会过于频繁
}
}
// --- 3. 绑定事件监听器 ---
// 在视频播放时,定期(例如每 5 秒)记录一次时间,避免过于频繁的存储操作。
// 使用 timeupdate 事件,并结合一个计时器来控制频率。
let saveTimer = null;
video.addEventListener('timeupdate', function() {
if (saveTimer === null) {
saveTimer = setTimeout(() => {
savePlaybackTime();
saveTimer = null; // 重置计时器,等待下次触发
}, 5000); // 间隔 5 秒保存一次
}
});
// 在视频暂停、结束或用户关闭页面时也保存一次,确保记录了最后的时间点。
video.addEventListener('pause', savePlaybackTime);
// 监听页面卸载事件,在用户关闭或跳转页面前保存最后的时间
window.addEventListener('beforeunload', savePlaybackTime);
// 视频播放完毕时,可以清除记录,以便下次从头开始
video.addEventListener('ended', function() {
localStorage.removeItem(storageKey);
console.log('视频播放完毕,已清除记录。');
});
// 启动:加载上次的播放时间
loadPlaybackTime();
[ 视频安全 ] 相关原创文章
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)