image-20250607162712644

看进度条上的小窗口,你有没有想过,哔哩哔哩是如何在进度条上显示视频预览的? 这个功能非常有用,尤其是在播放长视频时。

如何才能实现?

实现这一点有三种方法。

  • 预先为视频生成 CSS sprites,并通过 API 获取
  • 预先为视频生成 WebVTT 文件,并通过 API 获取
  • 在播放器端实时取快照显示出来,这个过程需要客户端投入大量计算资源,在 web 浏览器中实时显示效果比前两者差,且略过。

CSS sprites

我们想象一个场景,进度条上每秒对应一个图片,那么就要将上百张甚至上千张图片打包,提供给客户端播放器,那要发出多少请求和消耗多少流量,不如将它们合并成一个文件发送,更节省内存和带宽。使用图片尺寸和位置信息来区分一张图片的各个 tile。

sprites,精灵图,也称为雪碧图,即一张图片由 n 个 tile 组合而成。

如下图所示,是一个 8*8 的矩阵,每个 tile 宽高是常见的 160*80,可以通过工具生成雪碧图。

image-20250607163254027

然后通过以下 css 来控制显示哪个,这会将 btn1 的元素背景图片的起点向左滑动 160px,将 btn2 的元素背景图片的起点向左滑动 320px,即分别显示第一行第二列 (1,2) 和第一行第三列 (1,3) 的图片。

.tool-btn {background: url(myfile.png)  top left no-repeat;display: inline-block;height: 80px;width: 160px;
}#btn1 {background-position: -160px 0px;
}#btn2 {background-position: -320px 0px;
}

WebVTT

Web 视频文本轨道 (WebVTT) 是提供特定文本 “提示” 的文本轨道。WebVTT API 主要用于显示与视频内容叠加的字幕,但它还有其他用途:提供章节信息以便于导航,以及提供需要与音频或视频内容时间对齐的通用元数据。

WebVTT 的 MIME 格式是 text/vtt

一个 WebVTT 文件(.vtt)包含一行或者多行的时间提示性内容(cue),如下所示:

WEBVTT00:00:00.000 --> 00:00:02.000
/vo4susu/sprites/sprite_01.webp#xywh=0,0,160,9000:00:02.000 --> 00:00:04.000
/vo4susu/sprites/sprite_01.webp#xywh=160,0,160,90

其组成结构

  • “WEBVTT” 固定关键词
  • 空白行,相当于两个连续的换行符
  • 任意数量的 cue

每个 cue 第一行以时间开始,表示字幕/缩略图显示的时间,如 00:00:00.000 --> 00:00:02.000 表示在视频前 2 秒都显示指定缩略图。

每个 cue 的第二行是缩略图的访问地址,如 /voolyab/sprites/sprite_01.webp#xywh=xywh=0,0,160,90 表示 /voolyab/sprites/sprite_01.webp 图片,xywh=xywh=0,0,160,90 是图片坐标信息

  • x 轴偏移 0px
  • y 轴偏移 0px
  • 宽 160
  • 高 90

即图片中的第一行第一列,在第二个 cue 中 xywh=160,0,160,90,即 x 轴偏移 160,偏移量第一个图片的宽度,跳过它即第一行第二列,以此类推。

生成雪碧图时,需要提供行列数和宽高。根据 xywh 四个参数,即可快速生成 webvtt。

EasyDSS 是怎么实现点播进度条预览的?

EasyDSS 采用 WEBVTT 的方案,提供进度条预览图。

如果你对具体实现很感兴趣,可以查看下一期文章了解更多。

点击查看 easydss 论坛

欢迎来到论坛一起讨论

参考

WebVTT API

Implementing image sprites in CSS

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

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

相关文章

prometheus监控kubernetes集群并使用 grafana展示数据

目录 Prometheus组成及架构 prometheus核心组件 1.Prometheus Server 2.Exporters 3.Alertmanager 4.Pushgateway 数据流程 在k8s中部署PrometheusGrafana钉钉告警邮件告警 将kube-Prometheus包下载后传入虚拟机 tar -xzv kube-promethus.zip cd 进入 ll 显示目录 …

K8s 实战:Pod 版本更新回滚 + 生命周期管控

一、版本更新与回滚实验背景本实验通过 Kubernetes 的 Deployment 资源演示应用的版本更新与回滚流程。Deployment 是 Kubernetes 中用于管理 Pod 和 ReplicaSet 的核心资源,支持滚动更新(避免服务中断)和版本回滚(应对更新故障&a…

静电服漏检率↓79%!陌讯多模态识别算法在智慧安检的实战解析

​原创声明​​:本文技术方案引自《陌讯视觉算法技术白皮书V3.1》,实测数据来自工业场景部署验证 一、行业痛点:静电防护失效的隐形风险 据《电子制造业安防报告2025》统计,精密电子车间因静电服穿戴不规范导致的次品率高达23%&a…

StarRocks不能启动 ,StarRocksFe节点不能启动问题 处理

StarRocks不能启动 ,StarRocksFe节点不能启动问题 处理 问题描述 mysql:[Warning] Using a passwordon the command line interface can be insecureERROR 2003 (HYa00): Can’t connect to MysoL server on ‘192.168.5.128:9030’(111)Error: failed to query fE…

麒麟系统播放图片 速度比较

pygame效果比opencv好,opencv有锯齿:import pygame import os import timedef show_image_sdl(image_path):"""使用SDL2快速显示图片"""# 初始化pygamepygame.init()# 获取屏幕信息info pygame.display.Info()screen_wid…

复杂场景横幅识别准确率↑91%!陌讯多模态融合算法在智慧园区的实战解析

一、行业痛点:园区违规横幅识别的三重挑战 据《2024智慧园区安防报告》(来源:CCSA TC10)统计: ​​强光干扰​​:玻璃幕墙反光导致文字识别错误率超50% ​​形变干扰​​:横幅褶皱、飘动造成关…

Mybatis Plus - 代码生成器简单使用

1.引入依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.12</version></dependency><dependency><groupId>com.baomidou</groupId><ar…

vue2腾讯地图点击地图获取地址经纬度web

注意&#xff1a;&#xff01;&#xff01;&#xff01;在做uniapp小程序导航功能时&#xff0c;拿到我们在后台管理设置的经纬度&#xff0c;根据经纬度去导航到店的时候&#xff0c;最好用腾讯地图来获取经纬度&#xff0c;uniapp小程序那边默认导航经纬度是腾讯系的&#xf…

7.6 残差网络

随着我们设计越来越深的网络&#xff0c;深刻理解 新添加的层如何提升神经网络的性能&#xff0c;变得至关重要。更重要的是设计网络的能力&#xff0c;在这种网络中&#xff0c;添加层会使网络更具有表达力&#xff0c;为了取得质的突破&#xff0c;需要一些数学基础。7.6.1 函…

建模工具Sparx EA的多视图协作教程

在传统建模工具中&#xff0c;功能繁杂、界面混乱、窗口频繁切换等问题长期困扰着架构师与开发人员&#xff0c;不仅拖慢设计节奏&#xff0c;更导致模型与文档严重脱节。企业架构与建模平台Sparx EA直面这些挑战&#xff0c;通过现代化的Ribbon界面与多视图协作机制&#xff0…

从聚类到集成,两种实用算法框架分享

一、K-means&#xff1a;让数据自己 “找组织”什么是聚类&#xff1f;聚类属于无监督学习的范畴 —— 简单说就是手里没有标签时&#xff0c;我们要把长得像的样本分到一组。比如给一堆用户数据&#xff0c;不需要提前知道 “高价值用户”“潜在用户” 这些标签&#xff0c;聚…

Elasticsearch:什么是神经网络?

神经网络定义 神经网络&#xff08;Neural networks&#xff09;是机器学习&#xff08;machine learning&#xff09;的一个子集&#xff0c;旨在模拟生物大脑的结构和功能。也称为人工神经网络 (artificial neural networks - ANNs)&#xff0c;神经网络由互连的节点或人工神…

XTDrone——无人机基于2D激光Lidar进行二维运动规划(细节提醒以及相关报错解决)

参考XTDrone文档&#xff1a; 二维激光SLAM&#xff08;HectorSLAM&#xff09; 语雀 二维运动规划 语雀 相关ROS依赖库&#xff1a; 本地基于的是20.04的ubuntu系统&#xff1a; sudo apt install -y ros-noetic-move-base \ ros-noetic-costmap-2d \ ros-noetic-dwa-l…

机器学习算法-朴素贝叶斯

朴素贝叶斯分类器就是根据贝叶斯公式计算结果进行分类的模型&#xff0c;“朴素”指事件之间相互独立无影响. 例 如&#xff1a;有如下数据集&#xff1a;Text CategoryA great game&#xff08;一个伟大的比赛&#xff09;Sports&#xff08;体育运动&#xff09;The e…

RoPE, 2D RoPE, 3D RoPE和复数

旋转位置编码是一种用于Transformer架构中的位置编码方法&#xff0c;从复数的角度来看&#xff0c;其主要利用了复数的乘法性质来实现位置编码&#xff0c;以下作为学习记录&#xff1a;1. 旋转位置编码1&#xff09;对于输入序列的每个位置的嵌入向量&#xff0c;将嵌入向量分…

Java静态代理与动态代理实战解析

Java静态代理 示例代码 接口&#xff1a; package com.ssg.aop.interfaces;public interface MathCalculator { // 加法public int add(int a, int b); }接口实现类&#xff1a; package com.ssg.aop.impl; import com.ssg.aop.interfaces.MathCalculator;public class Math…

如何排查服务器DNS解析失败的问题

服务器 DNS 解析失败会导致无法访问域名&#xff08;如 google.com&#xff09;&#xff0c;可能影响服务器的正常运行。以下是排查 DNS 解析失败问题的详细步骤&#xff0c;包括可能的原因、诊断方法和解决方案。1. 原因分析DNS 解析失败通常由以下原因引起&#xff1a;DNS 配…

音视频面试题集锦第 32 期

音视频学习群&#xff1a;https://gjzkeyframe.github.io/posts/wechat-group/ 音视频面试题集锦第 32 期&#xff1a; 1、请详细解释 H.264 编码中的熵编码方式&#xff08;CAVLC 和 CABAC&#xff09;&#xff0c;它们的区别和适用场景是什么&#xff1f;2、解释 H.264/H.2…

最大矩形+单调栈

题目&#xff1a;思考1&#xff1a; 利用柱形图最大矩形的思想对于矩阵的每一行看作是柱形图的地基对每一行&#xff08;认定为柱形图&#xff09;执行找最大矩形 实现&#xff1a; class Solution { public:int maximalRectangle(vector<vector<char>>& matri…

NewsNow搭建喂饭级教程

大家在自媒体写文章里遇到最难的问题便是查找题材了&#xff0c;随便选择的题材没多少人会去看&#xff0c;平台也不会给流量推送&#xff0c;所以&#xff0c;只有围绕热门题材去进行文章创作&#xff0c;才能得到平台的重点推送以及大家的关注&#xff01; 在做这个功能前&a…