【问题标题】:Stream lots of screenshots from server从服务器流式传输大量屏幕截图
【发布时间】:2011-05-16 20:44:32
【问题描述】:

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

我以前从未做过这样的事情,也不知道如何解决这个问题。你会怎么做?

【问题讨论】:

    标签: python image video streaming


    【解决方案1】:

    快速简便的解决方案是

    1. 沿固定网格平铺屏幕
    2. 单独存储图块,由 strong hash 索引(以消除重复,即使在用户之间也是如此)
    3. 将整个屏幕存储为 tile 散列的二维数组
    4. 根据散列图块在浏览器中重建原始屏幕。

    从一个屏幕转到另一个屏幕,非常相似,只需加载几个图块,因此您可以进行压缩。

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

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

    Python 中的图像处理可以通过PIL 完成。

    【讨论】:

    • 有些事情告诉我,这不会“快速简单”地实施:) 但它确实很酷。 +1 如果没有其他人有更好的建议,将接受。
    • @Jesse:嗯,它很容易描述,并且不需要视频编解码器的知识。但我承认有很多极端情况需要考虑:)
    【解决方案2】:

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

    您可以提前计算差异并将它们存储到缓存或数据库中以便更快地访问(但会有很多数据),或者您可以即时计算。

    【讨论】:

    • 嘿,是的,我得到了这么多。它正在流式传输 1.5 GB,这是棘手的部分。
    猜你喜欢
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多