2012-10-09 43 views
5

He creado un poco de un sitio de prueba. Estoy intentando implementar un video HTML5 para reproducir en un sitio que estoy desarrollando y quiero use jplayer para que vuelva a un archivo swf si el video html5 no es compatible.El cliente cierra la conexión al transmitir m4v de apache a Chrome con jplayer

http://dev.johnhunt.com.au/ es lo que tengo hasta ahora. Funciona bien si proporciono http://www.jplayer.org/video/m4v/Big_Buck_Bunny_Trailer_480x270_h264aac.m4v para el video, sin embargo, si lo albergo en mi propio servidor, simplemente nunca comienza a reproducirse.

El tipo de mime es definitivamente correcto, video/m4v. Charles Proxy dice:

Client closed connection before receiving entire response 

De hecho, aquí está toda la solicitud:

GET /Big_Buck_Bunny_Trailer_480x270_h264aac.m4v HTTP/1.1 
Host dev.johnhunt.com.au 
Cache-Control no-cache 
Accept-Encoding identity;q=1, *;q=0 
Pragma no-cache 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4 
Accept */* 
Referer http://dev.johnhunt.com.au/ 
Accept-Language en-US,en;q=0.8 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie __utma=120066461.1007786402.1349773481.1349773481.1349786970.2; __utmb=120066461.1.10.1349786970; __utmc=120066461; __utmz=120066461.1349773481.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) 
Range bytes=0- 

Y la respuesta:

Some binary data (maybe 3 or 4kbytes long) 

que se ve bien. Supongo que el 'cliente' es mi navegador Chrome. ¿Por qué se está rindiendo? ¿Cómo puedo arreglar esto? Me está volviendo loco ya que no puedo encontrar nada en google :(

Cuando utilizo el archivo M4V en jplayer.org esta es la solicitud:

GET /video/m4v/Big_Buck_Bunny_Trailer_480x270_h264aac.m4v HTTP/1.1 
Host www.jplayer.org 
Cache-Control no-cache 
Accept-Encoding identity;q=1, *;q=0 
Pragma no-cache 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.79 Safari/537.4 
Accept */* 
Referer http://dev.johnhunt.com.au/ 
Accept-Language en-US,en;q=0.8 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Cookie __utma=24821473.325705124.1349773077.1349773077.1349773077.1; __utmc=24821473; __utmz=24821473.1349773077.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided) 
Range bytes=0- 

Respuesta:

Lots of binary data (very long.. working) 

Saludos, John .

+0

Nota, preferiría no hacerlo usa jwplayer ya que no es de código abierto. –

+0

adicional: En Chrome en la pestaña a la red de herramientas dev consigo dos solicitudes para el archivo de vídeo, el primero tiene un estatus de pendiente, el segundo tiene un estatus de cancelado, tanto de tipo pendientes, pero el estado de cancelación es de color rojo. Ambos tamaños son 13bytes, el tiempo en el segundo es 551ms. –

Respuesta

8

Descubrí que cuando el navegador Chrome envía una solicitud "Rango: bytes = 0-", NO debe responder con una respuesta de "206 contenido parcial". Para que Chrome maneje los datos correctamente, debe enviar un encabezado "200 OK".

No sé si esto es correcto de acuerdo con las especificaciones, pero hace que Chrome funcione y no parece romper otros navegadores.

+1

Es cierto, el cromo no puede entregar los vídeos mientras que otros (Firefox y Safari) hacen perfectamente. –

+1

Hay una manera de cambiar este estado de respuesta de Apache en lugar de crear una aplicación para interceptar la corriente y cambiar el código de estado? –

+1

Wow gracias por la respuesta, yo estaba corriendo en exactamente el mismo que escribir mi propio servidor HTTP en android. ¡De vuelta 200 en lugar de 216 de hecho lo arregla! – Maks

0

puede ser un problema en su apache ... presumiblemente está utilizando Apache dada la etiqueta.

¿Ha agregado los tipos de mime a apache?

p. Ej.

AddType video/mp4 mp4

AddType de vídeo/MP4 M4V

también comprobar que gzip está desactivada para los medios de comunicación ... ya está comprimida ... y no gzip Jplayer. swf.

¿Puedes publicar tus configuraciones de apache? ¿Está utilizando cualquiera de los módulos de transmisión tales como this?

Saludos Robin

EDITAR

O y también es posible que desee aceptar oscila-bytes en Apache. Si miras de cerca los dos enlaces, estás atendiendo a 200 y están dando 206 datos parciales.

1

Tras haber funcionado en esto con Chrome, parece que es necesario asegurarse de que la cabecera Content-Range es fijado por el servidor en la respuesta.

De http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html:

ejemplos de valores de gama de especificaciones de bytes de contenido, en el supuesto de que la entidad contiene un total de 1234 bytes:

 
     . The first 500 bytes: 
     bytes 0-499/1234 
     . The second 500 bytes: 
     bytes 500-999/1234 
     . All except for the first 500 bytes: 
     bytes 500-1233/1234 
     . The last 500 bytes: 
     bytes 734-1233/1234 
Cuestiones relacionadas