2011-05-16 22 views
6

Digamos que tengo esta herramienta que toma una captura de pantalla del escritorio del usuario cada 10 segundos y carga las imágenes a un servidor. Las imágenes se eliminan del servidor después de 24 horas. Quiero permitir que el usuario vea estas capturas de pantalla en su navegador. Digamos que cada imagen es 300K y hay 5000 cargadas en un período de 24 horas, eso es 1.5 GB de datos. Estas son imágenes PNG, ya menudo una captura de pantalla no es tan diferente de la anterior, así que imagino que podría comprimirlas bastante bien, pero no estoy seguro de cómo funcionaría. Quiero permitir que el usuario vea estas imágenes en su navegador. Quiero un control deslizante debajo de las imágenes para que el usuario pueda saltar a cualquier punto en el período de 24 horas. Supongo que algo como el reproductor de YouTube sería ideal. Donde el usuario puede saltar y los datos se transmiten, etc. La calidad de la imagen es importante porque el usuario necesita poder leer el texto en las capturas de pantalla. Preferiría una solución de Python.Transmite muchas capturas de pantalla desde el servidor

Nunca he hecho algo como esto antes, y no estoy seguro de cómo abordar el problema. ¿Qué harías?

Respuesta

5

La solución rápida & fácil es

  1. baldosas de la pantalla a lo largo de una rejilla fija
  2. almacenar los azulejos por separado, indexada por una tienda strong hash (para eliminar duplicados, incluso entre los usuarios)
  3. toda la pantalla como una matriz bidimensional de hash de teselas
  4. reconstruye la pantalla original en el navegador de las teselas hash.

Pasar de una pantalla a otra, muy similar, sería una cuestión de cargar solo algunas fichas, por lo que está la compresión.

Implemente un esquema de recuento de referencia simple para eliminar las teselas de nuevo. Es posible que desee compartir partes de la pantalla entre usuarios para reducir aún más el almacenamiento.

Experimenta con varios tamaños de azulejos para saber cuál funciona mejor; esto puede depender de la resolución de la pantalla, la actividad del usuario y el formato de gráficos utilizado para almacenar los elementos.

El procesamiento de imágenes en Python se puede hacer con PIL.

+0

Algo me dice que no va a ser "rápido y fácil" de implementar :) Pero ciertamente es genial. +1 aceptará si nadie más tiene una mejor sugerencia. –

+0

@Jesse: bueno, es rápido y fácil de describir y no requiere conocimiento de códecs de video. Pero admito que hay muchos casos de esquina que considerar :) –

1

Si el usuario se encuentra actualmente en la imagen K y quieren cargar la imagen de H, suponiendo que las capturas de pantalla será prácticamente el mismo, sólo puede enviar el delta diff entre H y K.

Puede calcular los diferenciales por delante de hora y almacenarlos en un caché o base de datos para un acceso más rápido (pero habrá una gran cantidad de datos) o puede calcularlo sobre la marcha.

+1

Je, sí, tengo tanto. Está transmitiendo 1.5 GB esa es la parte difícil. –

Cuestiones relacionadas