【发布时间】:2016-09-12 08:31:15
【问题描述】:
我正在尝试为我的简单视频播放器实现 Youtube 的缩略图预览功能。这是它的快照:
好处是:一旦播放器从 HTTP 服务器获取所有缩略图预览,它就可以顺利运行。
不好的是:获取所有缩略图预览需要大量时间(20-30 秒)。 (对于 14 分钟 (~110 MB) 的视频(.mp4 文件),大约有 550 个缩略图预览 (160x120))
我正在做的是:当用户开始播放视频时,我将向服务器发出“total_thumbnails”HTTP 请求以获取所有视频。
另请注意:
- 我将在异步任务中执行多个 HTTP 请求。
- 时尚不做,求个求,等下载 完成,然后提出另一个请求。
- 我会盲目地发出“total_thumbnails”HTTP请求,所以所有的请求都得到 在管道中排队,稍后并行接收响应。
额外细节:一个 HTTP (lighttpd) 服务器将运行,一旦用户从列表中选择要播放的 video.mp4,我的播放器就会从中获取所有缩略图。此外,播放器将使用同一服务器通过 HTTP 流获取 video.mp4。
问题是:当我开始播放视频,然后我快速搜索时,我最终看到了这个(白色缩略图是默认的,当映射到那个时间的缩略图是尚未从服务器获取):
问题是:我如何有效地获取所有(或部分)缩略图预览,以便用户(大部分时间)能够获得正确及时映射的缩略图的体验?
视频一开始我就看过youtube的视频(很快),播放器能够显示所有及时的右侧缩略图(无论您将拇指拖到最后一分钟还是将鼠标悬停在栏的最后一分钟,几乎每次您将看到正确映射的缩略图)。
他们是在同时下载所有缩略图,还是下载压缩的缩略图预览系列或其他一些智能的东西?
有没有人解决过这个问题?
【问题讨论】:
-
因此 14 分钟 á 60 秒和 550 个缩略图大约每 (14 * 60) / 550 ≈ 1.53 秒生成一个缩略图。是否将间隔时间延长到 5 秒?
-
这里 1.53 秒(你计算出来的)是从播放器向服务器发出 http 请求直到我们收到请求的缩略图图像的时间。我们无法控制它,这里所用的时间将取决于 http 握手 +从服务器下载图像的时间。
-
哦,好的。但问题仍然存在:你真的需要那么多缩略图吗?如果您仅每 120 (PAL) 或 150 (NTSC) 帧创建一个缩略图,您将大大减少数据量,不是吗?
-
哦,我知道了。实际上,我们试过这个,问题是用户体验非常糟糕。差到什么程度?当用户完成搜索时,播放器将搜索到最近的前一个 I 帧,这可能与向用户显示的缩略图预览不对应(因为预览间隔 5 秒,而 I 帧间隔 1-1.5 秒)。当视频很短(最长 30 分钟)时,这种体验变得很重要。对于大型纪录片或电影,我觉得 5 秒或更长的时间间隔会起作用
-
嗯,我明白了。那么,一个不固定的利率呢?毕竟,用户可以寻找的地方只有这么多。因此,如果您将视频中的帧数除以用户可以寻找的点数,那么无论实际视频长度如何,您最终都应该得到恒定数量的缩略图。话虽如此,我真的相信减少数据量是解决这里问题的关键。
标签: performance http thumbnails processing-efficiency video-thumbnails