将视频的单帧作为图像(有效地)提供给用户

时间:2014-07-23 05:32:09

标签: javascript html5 video canvas ffmpeg

问题:

我的服务器上有多个60分钟的视频(共享主机)。我需要立即有效地向用户提供这些视频中的任何一个视频的单帧。预期的最大负载大约是每分钟100个请求。

备注:

  • 我正在使用共享托管服务,因此FFmpeg是不可能的(无论如何,FFmpeg的效率是否达到每分钟100次?)。
  • 我不想在我的服务器上存储数十万张图像(我的inode是有限的)。

可能的解决方案:

  • 将视频加载到客户端,然后根据this article提取框架并​​将其绘制到画布上。虽然我不希望用户只需要下载整个视频来获取一个帧(他们是否必须这样做?)。
  • 使用一些高效的服务器端库来有效地提取框架,然后将其提供给用户。
  • ???

1 个答案:

答案 0 :(得分:0)

我相信你的问题的答案是“在资源有限的情况下这是不可能的”

要“实时”执行此操作,服务器或客户端必须加载&筛选视频并找到所需的时间停止和帧。

鉴于“即时”要求,这似乎不可能 - 并且任何实时搜索都不会有效。

如何从每个视频中提取每秒1帧(60 * 60 =每个视频3600帧)。

然后保存这些提取的帧并将保存的静止图像的子集提供给客户端?

如果每个视频3600个静止图像对于服务器存储来说太重,那么每3或5秒保存1帧以使存储容忍。每分钟5帧,您的存储要求降至每60分钟视频720张图像。并且您可以将图像存储为.jpg以节省更多存储空间和交付时间。

用户可以“浏览”静止图像的一部分,直到找到所需的时间范围。在找到所需的时间范围后,您可以花费更多昂贵的服务器资源,在所选时间范围内提供帧。这个想法是通过仅在用户给出确切的感兴趣的时间范围时通过执行昂贵的服务来节省资源。