从服务器流式传输大量屏幕截图

时间:2011-05-16 20:44:33

标签: python image video streaming

假设我有这个工具每10秒钟截取用户桌面的截图并将图像上传到服务器。 24小时后将从服务器中删除图像。我想允许用户在他们的浏览器中查看这些屏幕截图。因此,假设每个图像都是300K,并且在24小时内上传了5000个图像 - 这是1.5 GB的数据。这些是png图像,通常一个屏幕截图与前一个屏幕截图没有什么不同,所以我想我可以很好地压缩它们 - 但我不确定它是如何工作的。我想允许用户在他们的浏览器中查看这些图像。我想在图像下面有一个滑块,这样用户就可以跳到24小时内的任何一点。我想像YouTube播放器这样的东西是理想的。用户可以跳转并且数据流式传输等。图像质量很重要,因为用户需要能够读取屏幕截图中的文本。我更喜欢Python解决方案。

我之前从未做过这样的事情,也不确定如何处理这个问题。你会做什么?

2 个答案:

答案 0 :(得分:5)

快速&简单的解决方案就是

  1. 沿固定网格平铺屏幕
  2. 单独存储图块,由strong hash索引(以消除重复,甚至在用户之间)
  3. 将整个屏幕存储为二维瓷砖哈希数组
  4. 从散列图块重建浏览器中的原始屏幕。
  5. 从一个屏幕到另一个屏幕,非常相似,只需要加载几个图块,所以这就是你的压缩。

    实施简单的引用计数方案再次删除图块。您甚至可能希望在用户之间共享屏幕部分以进一步减少存储空间。

    尝试各种瓷砖尺寸,找出哪种效果最佳;这可能取决于屏幕分辨率,用户活动和用于存储元素的图形格式。

    Python中的图像处理可以使用PIL完成。

答案 1 :(得分:1)

如果用户当前位于图像K并且想要加载图像H,假设屏幕截图大致相同,则可以在H和K之间发送delta diff

您可以提前计算差异并将其存储到缓存或数据库中以便更快地访问(但会有大量数据),或者您可以动态计算它。