2012-05-06 13 views
10

Estoy configurando un UIWebView para mostrar el contenido de una cámara web a través de una URL que recupera un flujo MPJEG.UIWebView y keep-alive?

Descubrí que si quería cambiar a una cámara diferente, parecía más suave si no restablecía todo el contenido de UIWebView, sino que configuraba una función javascript en la página que cargué para reemplazarla el contenido de la imagen, así:

<img id='iImage' src='about:blank'> 
<script type='text/javascript'> 
function show(url) 
{ 
    iImage.src = url; 
} 
</script> 

Si no hice esto, cada vez que me pasa a una nueva dirección URL, el UIWebView se puso blanca por un segundo o dos hasta que el nuevo contenido estaba listo para ser visualizado , con el código anterior simplemente reemplaza los contenidos directamente, sin whiteout.

Sin embargo, si cambio de ida y vuelta entre dos videostreams, en algún momento me sale un error en el UIWebView, y por prueba y error me enteré de que esto sucede la 4ª vez que muestro el mismo videostream en el ver. Si trato de abrir 4 videostreams en las pestañas del navegador, el 4 se queda atascado en un ciclo de carga, hasta que cierro uno de los tres anteriores.

Esto me lleva a pensar que:

  1. La cámara en cuestión sólo puede servir 3 corrientes, al mismo tiempo
  2. Cambiar el atributo src en la etiqueta <img...> no cerrar la secuencia anterior

¿Se puede vincular esto con keepalive? ¿Podría el sistema de navegador webkit mantener vivas las transmisiones anteriores, a pesar de que he dejado de mostrarlas en la etiqueta <img...>?

Básicamente, para reproducir lo que puedo hacer esto:

  1. Configure el contenido de arriba en una llamada UIWebView
  2. esto 4 veces: wv.EvaluateJavascript("show(url)")

En la cuarta llamada, aparece un signo de interrogación azul en el medio.

¿Puede ser vivo el culpable? Y si es así, ¿puedo controlarlo?

+0

keep-alive se supone para permitir que el navegador para volver a utilizar una conexión para obtener el contenido adicional.Entonces, al cambiar la URL (supongo que para el mismo dominio pero la ruta diferente), la conexión anterior debe reutilizarse. Su problema parece que se abren nuevos sockets para cada url de imagen. Podría deberse a un error de WebKit con MJPEG. Intente reemplazar todo el elemento HTML de la imagen y vea si eso ayuda. –

+0

Sí, eso funciona, pero eso es explícitamente lo que quiero evitar. –

+0

¿Por qué es eso? Cambiar el elemento de la imagen no debe presentar el problema de que haya reemplazado todo el contenido de la vista web. –

Respuesta

5

Esto se debe a que WebKit no detiene la carga de un recurso de imagen, incluso si se cambia la fuente. Normalmente, esto no causa un problema para las imágenes, pero una imagen de transmisión interminable hará que nunca se suelte hasta que la página se vuelva a cargar.

Hay un error presentado contra Chromium que apunta a este problema. https://code.google.com/p/chromium/issues/detail?id=73395

Desde el hilo de comentarios, una solución es llamar al window.stop() antes de cambiar la imagen. Esto es lo mismo que hacer clic en detener en el navegador y hace que todos los recursos de carga se cancelen. Con suerte, el hecho de que esto no esté causando que la página se vuelva a cargar evitará su flash blanco.

que le daría el siguiente intentarlo:

<img id='iImage' src='about:blank'> 
<script type='text/javascript'> 
function show(url) 
{ 
    window.stop(); 
    iImage.src = url; 
} 
</script>