2011-05-16 56 views
6

假設我有這個工具每隔10秒拍攝一次用戶桌面的屏幕截圖,並將這些圖像上傳到服務器。 24小時後圖像從服務器上刪除。我想讓用戶在瀏覽器中查看這些截圖。假設每張圖片都是300K,並且在24小時內上傳了5000張 - 這是1.5 GB的數據。這些都是PNG圖像,並且通常一個截圖與前一截圖沒有什麼不同,所以我想我可以壓縮它們 - 但我不確定這會如何工作。我想讓用戶在瀏覽器中查看這些圖像。我想在圖像下方有一個滑塊,以便用戶可以在24小時內跳到任何點。我想YouTube播放器會是理想的。用戶可以跳轉,數據流式傳輸等。圖像質量很重要,因爲用戶需要能夠閱讀屏幕截圖中的文本。我更喜歡Python解決方案。從服務器流大量的屏幕截圖

我從來沒有做過這樣的事情,我不知道如何解決這個問題。你會怎麼做?

回答

5

快速&容易的解決方案是

  1. 瓦片向上沿着固定網格屏幕
  2. 存儲瓦片分別由strong hash(消除重複,即使在用戶之間)
  3. 存儲索引整個屏幕作爲二維陣列的散列圖片
  4. 在散列圖片中重新構建瀏覽器中的原始屏幕。

從一個屏幕到另一個屏幕非常相似,只需要加載幾個區塊,所以就是壓縮。

實施一個簡單的引用計數方案,以再次刪除瓷磚。您甚至可能希望在用戶之間共享屏幕部件以進一步減少存儲空間。

試驗各種瓷磚尺寸,找出哪個效果最好;這可能取決於屏幕分辨率,用戶活動和用於存儲元素的圖形格式。

Python中的圖像處理可以使用PIL完成。

+0

有些東西告訴我,這不會「快速和容易」實現:)但它確實很酷。 +1如果沒有其他人有更好的建議,我們會接受。 – 2011-05-16 21:10:31

+0

@Jesse:好吧,這很容易描述,它不需要視頻編解碼器的知識。但我承認有很多角落案例需要考慮:) – 2011-05-16 21:19:48

1

如果用戶當前圖像K和要加載圖像H,假設截圖將大致相同,你可以發送H和K.

之間的delta diff您可以提前計算的diff並將它們存儲到緩存或數據庫中以便更快地訪問(但會有大量數據),或者您可以即時計算它。

+1

呃,是的,我得到了那麼多。它將流媒體1.5 GB這是棘手的部分。 – 2011-05-16 21:12:00