将多个缩略图精灵与 Video.js 一起使用

2024-02-09

我正在尝试使用Video.js 缩略图 https://github.com/brightcove/videojs-thumbnails将鼠标悬停在我的 Video.js 播放器轨迹栏上时显示搜索预览缩略图。我使用 ffmpeg 将视频中的缩略图提取到精灵表中。每个精灵表都包含一定数量的缩略图,当缩略图提取过程中缩略图被填满时,就会创建一个新的精灵文件。

在我的视频播放器页面上,我使用 JavaScript 创建一个对象以加载到缩略图()函数中。如果我想要每五秒一次的缩略图,我的对象可能看起来像这样:

th_object = {
  0: {
     src: 'source001.jpg',
     style: {
       left: '-40px',
       width: '4800px',
       height: '45px',
       clip: 'rect(0, 80px, 45px, 0)'
     }
  },
  5: {
     style: {
       left: '-120px',
       clip: 'rect(0, 160px, 45px, 80px)'
     }
  },
  ... 
}

当需要更改精灵源时(例如大约 60 秒的视频),我使用相同的对象:

  ...
  60: {
    src: 'source002.jpg',
    style: {
      left: '-40px',
      width: '4800px',
      height: '45px',
      clip: 'rect(0, 80px, 45px, 0)'
    }
  },
  ...

然后我调用视频播放器的缩略图()函数(此处称为“视频”):

video.thumbnails(th_object);

因此,它所做的就是在我的页面中为缩略图创建一个占位符,加载源图像并对其进行偏移,裁剪精灵中不需要显示的部分。但页面中只创建了一个占位符。例如,我的 HTML 的摘录可能如下所示:

<div class="vjs-thumbnail-holder" style="left: 157px;">
  <img src="/storage/source001.jpg" class="vjs-thumbnail" style="left: -680px; width: 4800px; height: 45px; clip: rect(0px 720px 45px 640px); visibility: visible;">
</div>

当我将鼠标移过进度条时,值会更新,我的源最终也会改变。我并不完全确定这两个图像都已加载到页面上,因为当我检查页面元素时,在任何给定时间都只有一个可见。

当我将鼠标悬停在应加载非第一个精灵表作为缩略图源的位置时,源似乎卡住了。因此,如果我将鼠标移回应加载第一个精灵表的位置,则不会,并且视频中该点会显示错误的精灵。

我的第一个想法是我的精灵表源需要不同的 HTML 元素,但我是 Web 开发的新手,因此以这种方式修改 Video.js 缩略图代码对我来说可能不可行。任何有关此的帮助将不胜感激。如果您对其他包含搜索预览缩略图显示的播放器有任何建议或更好的方法来实现此目的,我们也将不胜感激。


在使用缩略图代码一段时间后,我发现了一种获得我需要的结果的方法。更新缩略图的 img src 的代码部分如下所示:

  // apply updated styles to the thumbnail if necessary
  mouseTime = Math.floor(event.offsetX / progressControl.width() * duration);
  for (time in settings) {
    if (mouseTime > time) {
      active = Math.max(active, time);
    }
  }
  setting = settings[active];
  if (setting.src && img.src != setting.src) {
    img.src = setting.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }

本质上,我需要根据当前 mouseTime 所需的源来检查当前的 img src。所以我添加了一个额外的检查,如下所示:

  var x = Math.floor(mouseTime / 300);
  x = x * 300;

  var sourceNeeded = settings[x];

  if (setting.src && (img.src != setting.src)) {

    img.src = setting.src;               
  }
  if (sourceNeeded.src && (img.src != sourceNeeded.src)) {               

    img.src = sourceNeeded.src;
  }
  if (setting.style && img.style != setting.style) {
    extend(img.style, setting.style);
  }

上面硬编码的 300 是因为我的精灵表包含 300 秒的缩略图。 (请注意,在我原来的帖子的示例中,我使用了 60。)x 变量确定 th_object 中正确源位置的索引,如果它与当前的 img src 不匹配,我会更新它。这将允许根据需要从一个 img src 正确转换到另一个 img src。

希望这对将来遇到类似情况的人有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个缩略图精灵与 Video.js 一起使用 的相关文章

  • jqGrid如何将额外的类应用于标题列

    我想在特定列上应用一个额外的类 我知道通过在 colModel 中指定这一点对于行是可能的 但这些类仅应用于 结果行 中的列 而不应用于标题 我想要达到的是通过简单的类名隐藏较小视口的特定列 与 Twitter Bootstrap 一起使用
  • 如何解决输入字段上的错误行高?

    如何为具有固定高度的输入字段提供其所包含文本的跨浏览器垂直对齐方式 截至目前看来line height是我最好的选择 但是 在 Chrome 或 Safari 等 webkit 浏览器上 复制 粘贴时光标会跳至顶部对齐 我注意到 WordP
  • border-radius 在 safari 下失败(丑陋的剪辑)

    有人知道 Safari 中以下 错误 的解决方法吗 当我使用border radius在 CSS3 中创建圆角边框 它在 Safari FF 等上工作得很好 但是 当边框颜色是背景颜色时 您可以看到容器背景与边框重叠 你可以在这里尝试一下
  • $index 中的 AngularJS 数字

    举例来说 我有以下代码 伪 div index div 结果将是 1 2 3 4 5 6 我怎样才能改变上面的代码以便打印索引 001 002 003 004 005 006 以便索引打印为 3 位数字 您可以使用过滤器轻松完成此操作 首先
  • 如何在CSS网格系统中偏移div列

    有谁知道抵消前两个div位于侧行且具有类的 scol 3 12偏移量为offset 6 12 and offset 9 12位于我的网格系统的右侧jsFiddle http jsfiddle net c6R6t CSS body font
  • Gecko/Firefox 对 HTML5 通知的支持

    我想知道是否有任何内置支持HTML5 通知到目前为止 Gecko 浏览器有哪些功能 也许有一些隐藏的开发人员 我知道 WebKitwindow webkitNotifications效果很好 那么 有 Firefox 实现吗 Update
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • 头部带有脚本的 Nodejs EJS 部分

    我正在使用 EJS 从 Nodejs 服务器渲染和服务器 HTML 页面 我包含的一些部分在头部引用了脚本和样式表 但这会导致客户端对同一文件发出多个请求 例如 如果父视图也包含该文件 例如
  • 如何判断CKEditor是否已加载?

    如何确定 CKEditor 是否已加载 我查看了API文档 但只能找到loaded事件 我想检查 CKEditor 是否已加载 因为如果我第二次加载它 我的文本区域就会消失 The loaded活动对我不起作用 instanceReady
  • 如何从 JavaScript 中的 URL 中提取主机?

    捕获域直到结束字符 我需要一个捕获的正则表达式example com在所有这些中 example com 3000 example com pass gas example com example com 如果您确实有有效的 URL 那么这
  • 如何在GEB中选择内部元素的文本?

    我有以下场景 div ul class select2 results style width 400px li class select2 results dept 0 select2 result select2 result sele
  • 解析器阻塞与渲染阻塞

    我一直在阅读有关优化网络性能的 Google 开发人员文档 我对那里使用的术语有点困惑 CSS 和 JavaScript 文件都会阻止 DOM 构建 但是 CSS 被称为渲染阻塞 而 JavaScript 被称为解析器阻塞 解析器阻塞 和
  • 添加 sigma.js 导航按钮

    我是 javascript 和 sigma js 的新手 我试图让导航按钮在画布中向上 向下 向左 向右滚动 就像发现的那样here http jcml fr jacomyal osdc2012 demo 到目前为止 我有一个简单的例子 我
  • 为什么 useState 会导致组件在每次更新时渲染两次?

    我这里有一段简单的代码 import React useState from react import styles css export default function App const number setNumber useSta
  • CSS:100% 宽度和背景?

    在我的页面中 有 2 3 个部分的宽度和背景为 100 当我全屏打开它时 一切正常 但当屏幕小于 960px 本节内容的宽度 时 背景图像不是整个页面 右侧的瞬间隐藏在没有背景的地方 它是白色的 你可以在这里明白我的意思 http mico
  • 加密 Chrome 扩展程序?

    无论如何 要加密 Chrome 扩展程序 以免暴露源代码 您可以使用混淆器隐藏您的代码 市场上有很多可用的 像Google Closure编译器这样的工具很少 而且市场上有很多在线javascript ofuscators 你可以使用任何一
  • CSS word-wrap:break-word不会包装标签,除非你将它包装在div中并在那里添加规则

    为什么CSS统治 a word wrap break word with div a href verylongurlherewithnospaces a div 不换行并导致窗口显示滚动条 而 div word wrap break wo
  • 在 Safari for Lion (OS X 10.7) 中设置滚动条颜色

    Lion 中的新滚动条似乎会根据 body 元素的背景颜色调整 Safari 中的颜色 有没有办法手动设置滚动条是深色还是浅色 我知道有 webkit CSS 选项来设置滚动条的样式 这实际上早于新的 Lion 滚动条 我使用该方法的唯一问
  • jQuery() 与 jQuery.parseHtml() 空格语法错误

    我有一行 javascript 导致 jQuery 中出现语法错误 document find Container replaceWith data find Content 代码本身如果相当无害的话 它所做的只是从 ajax 调用获取响应
  • 根据对象内的值将对象数组分成两部分

    我一直在尝试 并努力 弄清楚如何根据键值对拆分对象数组 长话短说 我有一个火车正在停靠的车站列表 需要将之前的停靠点和未来的停靠点分开 我正在使用的数据如下所示 station code SOC station name Southend

随机推荐