2011-08-12 23 views
17

Usar el mismo video dos veces en la misma página parece forzar una recarga de medios innecesaria.¿Cómo evitar la repetición de la recarga de video HTML en la misma página?

Compara cargar un vídeo a cargar una imagen:

<img src="image.png"/> 
<img src="image.png"/> 
<video src="video.webm"></video> 
<video src="video.webm"></video> 

De acuerdo con la consola web Firefox 5, esta carga la imagen una vez, pero el video dos veces.

Entiendo por http://www.w3.org/TR/html5/video.html#dom-media-mediagroup que los autores de la especificación esperaban una sola recarga en ambos casos ("Varios elementos multimedia que hacen referencia al mismo recurso compartirán una única solicitud de red"), pero eso no me está pasando.

he tratado de jugar con los parámetros del servidor de caché (estoy usando web.py de vainilla), en vano, y sospecho que eso ladrando en el árbol equivocado. ¿Hay algo específico que debería estar mirando? ¿HTML meta elementos?

Tenga en cuenta que esto es lo contrario de los problemas comunes con tener múltiples fuentes para el mismo video. Aquí me preocupa tener varios elementos de video con la misma fuente jugando uno al lado del otro (por ejemplo, en diferentes momentos).

+1

problema interesante. ¿Estarás usando javascript para controlar ambos elementos de video? Me gustaría saber qué sucede si agrega dinámicamente el segundo elemento de video después de que el primer video haya terminado de cargarse. – BumbleB2na

+0

@ BumbleB2na Probé eso, '$ (" # hook "). Append (video_html) .append (video_html)' (donde video_html es un elemento de video) realmente hace cuatro solicitudes GET, dos de ellas toman mucho tiempo. –

+0

4 solicitudes GET .. yikes. Sí, se habla de un error en el almacenamiento en memoria caché de medios especiales para

Respuesta

1

Si comprueba el tamaño del vídeo descargado, son ambos de descargar el video completo?

En mis pruebas, la mayoría de los navegadores descargan un pequeño trozo (suficiente para mostrar el pulgar) y luego el video completo cuando sea necesario, así que me pregunto si está contando eso como dos descargas completas, cuando en realidad es solo una descarga completa y una parcial.

Hice algunas pruebas en junio con la ayuda de Bruce Lawson y descubrimos que algunos navegadores realizan incluso más cargas sobre los dos que he descrito anteriormente.

HTML 5 Video In Real Life (Tests)

0

Se podría, por supuesto, poner los videos en miniaturas y hacer que se cargan cuando alguien hace clic en ellos, podría ser útil si no puede encontrar otra cosa.

0

Suena como esto es un error en el navegador que está utilizando, ya que está al parecer no se adhiere a la especificación W3C HTML 5. Le recomendaría que presente un informe de errores para los desarrolladores y pruebas de ese navegador para ver cómo se compara este comportamiento con otros navegadores.

1

Si está utilizando HTML 5, entonces es mejor que se puede ir con lienzo. Cargará el video una vez.

1

Este trabajo:

<video id="video" class="videohtml5" width="720" height="500" controls="controls" preload="auto" poster=""> 
     <source src="path(1)" /> 
     <source src="path(2)" /> 
     <source src="path(3)" /> 
</video> 
+0

Use el formato de código para el código (Ctrl + K) :) –

1

creo que la gente está malinterpretando la especificación aquí.

Si nos fijamos en el ejemplo de la especificación, se habla específicamente de un solo recurso (archivo) que contiene varias pistas. Los dos elementos de video contienen una referencia al mismo archivo, pero diferentes pistas dentro de ese archivo. Las dos pistas se reproducen sincronizadas por medio de un grupo de medios.

Si tiene dos etiquetas de vídeo que hacen referencia al mismo archivo con la misma pista, yo no esperaría que jueguen en sincronización por defecto. Podría imaginar que al especificarlos en el mismo grupo de medios esto podría lograr eso y, por lo tanto, permitir que ambos elementos usen una única conexión con una sola secuencia de solicitudes.

Si los dos videos no se reproducirán sincronizados, no es razonable esperar que el navegador cargue los dos videos en un solo conjunto de solicitudes. Tenga en cuenta que este es un conjunto de solicitudes, un video puede generar muchas solicitudes a un servidor ya que una sesión de video o multimedia (pensar detener, pausar y reiniciar) puede ser significativamente más larga que la que un servidor o servidor desea mantener abierta.

Imagine si los dos elementos tenían controles diferentes. Pausa el primer video y deja que se reproduzca el segundo video. Pasan 30 minutos y reinicias el primer video. El navegador simplemente no va a almacenar en caché lo que podría equivaler a más de cien megabytes de contenido del servidor para permitirle reproducir el primer video sin hacer una nueva solicitud al servidor.

Si espera que se envíen dos partes discretas de contenido de transmisión a través de una única conexión mediante HTTP, entonces no creo que eso sea posible (bueno, actualmente implementado). Eso sería multiplexación, y la última vez que lo verifiqué, los servidores HTTP no tienen soporte para multiplexación. Tenga en cuenta que esto es diferente de una conexión "keep alive" en la que se sirven múltiples piezas de contenido en serie, lo que la multiplexación describe es el contenido de múltiples porciones en paralelo. La forma habitual de lograr esto es simplemente tener dos sockets abiertos, que es mucho más simple para el cliente y el servidor que tratar de demultiplexar una sola transmisión.

Cuestiones relacionadas