gpt4 book ai didi

javascript - 在 Video.js Thumbnails 中使用多个缩略图 Sprite

转载 作者:行者123 更新时间:2023-11-28 18:09:55 24 4
gpt4 key购买 nike

我正在尝试使用 Video.js Thumbnails将鼠标悬停在我的 Video.js 播放器轨迹栏上时显示搜索预览缩略图。我使用 ffmpeg 将视频中的缩略图提取到 Sprite 表中。每个 sprite 表包含一定数量的缩略图,当缩略图提取过程中一个被填满时,将创建一个新的 sprite 文件。

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

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)'
}
},
...
}

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

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

然后我为我的视频播放器(这里称为“视频”)调用 thumbnails() 函数:

video.thumbnails(th_object);

因此,它所做的是在我的页面中为缩略图创建一个占位符并加载源图像并对其进行偏移,裁剪不需要显示的 Sprite 部分。但是页面中只创建了一个占位符。例如,我的 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>

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

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

我的第一个想法是我的 sprite 表源需要不同的 HTML 元素,但我是网络开发新手,因此以这种方式修改 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 是因为我的 sprite 表包含 300 秒的缩略图。 (请注意,在我原来的帖子的示例中,我使用了 60。)x 变量确定 th_object 中正确源位置的索引,如果它与当前 img src 不匹配,我将更新它。这将允许根据需要从一个 img src 正确过渡到另一个。

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

关于javascript - 在 Video.js Thumbnails 中使用多个缩略图 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18882356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com