2009-10-28 24 views
5

Estoy tratando de transmitir video QuickTime a un iPhone desde una aplicación web ASP.NET usando un HttpHandler. Al alojar la aplicación web desde IIS 5.1 (Windows XP), el reproductor de video se abre y luego muestra el error "El servidor no está configurado correctamente". Sin embargo, al usar IIS 7.5 (Windows 7), el video se reproduce bien.Reproducir video Quicktime en iPhone usando HttpHandler e IIS 5.1

El entorno de producción ejecuta IIS 6.0 y tiene el mismo problema, cuando el intento de reproducir videos en el iPhone a través de Mobile Safari muestra el error anterior.

He comprobado los encabezados HTTP y que parecen ser prácticamente la misma entre los dos servidores (aparte de unos pocos, como el encabezado del servidor , que obviamente será diferente), excepto en que aparecen en orden diferente , aunque dudo que esto esté causando el problema.

De acuerdo con this thread en Google Groups, agregar el encabezado 'Aceptar rangos: bytes' puede ayudar, aunque esto no hizo ninguna diferencia para nosotros. También agregué el encabezado ETag, sin suerte.

El código de hecho responsable de enviar el archivo se ve algo como esto:

Context.Response.Buffer = true; 
Context.Response.ContentType = "video/x-m4v"; 

Context.Response.AppendHeader("Content-Disposition", "filename=\"Video.m4v\""); 
Context.Response.AppendHeader("Content-Length", "23456789"); 

Context.Response.AppendHeader("Accept-Ranges", "bytes"); 
Context.Response.AppendHeader("ETag", GetETag(path)); 

Context.Response.TransmitFile(path); 

El código anterior que transmite archivos parece estar funcionando correctamente y archivos de vídeo reproducir correctamente en todos los navegadores de escritorio y cuando se aloja desde IIS 7.5 en Windows 7. El problema solo es aparente cuando se intenta reproducir archivos de video en el iPhone utilizando Mobile Safari utilizando el código anterior con la aplicación web ASP.NET hospedada en IIS 5.1 o IIS 6.0.

¿Alguien más ha experimentado algo como esto y tiene alguna idea sobre lo que puedo hacer para que funcione?

+0

La sugerencia de Accept-Ranges me ayudó con un problema similar con ASP.NET MVC. – kim3er

Respuesta

2

¿Por qué configura Response.Buffer en true?

No puede simplemente agregar el encabezado "Aceptar rangos" a menos que también se asegure de que el servidor admita las solicitudes de rango HTTP. Si el reproductor cliente exige soporte para solicitudes de rango y el servidor se niega a manejarlas, parece lógico que la solicitud sea rechazada.

Puede intentar usar el Fiddler como un proxy inverso y ver si el iPhone hace una solicitud de rango. http://www.fiddler2.com/Fiddler/Help/ReverseProxy.asp

0

Use algo como Fiddler para exponer la respuesta HTTP exacta proveniente de los servidores. Fudge la cadena del agente de usuario del cliente para que coincida con el navegador del iPhone (o simplemente use Safari?) Y compare el resultado de IIS 5.1 y 7.5. Obviamente, los flujos de respuesta no son idénticos o estarían trabajando en ambos.

También podría usar NetMon, que es una gran herramienta ... y le permitiría probar con el iPhone.

Lo siento, no tengo una respuesta específica para usted, pero creo que tendrá que ensuciarse las manos con esta.

+0

Gracias por los consejos. El video realmente se reproduce bien en Safari en Windows, y también en Firefox cuando se usa la cadena de agente de usuario de iPhone, así que no creo que sea algo con esto. El problema parece ser que tiene más que ver con la forma en que IIS5/6 está transmitiendo los archivos, en comparación con IIS7, que no permite que el iPhone lo reproduzca. No he usado las herramientas de monitoreo de red mucho antes, pero revisaré NetMon/Wireshark y veré si pueden ayudar. – Mun

3

Después de algunas búsquedas, me encontré con el artículo Range-Specific Requests in ASP.NET que describe el problema exacto que estaba teniendo. La implementación de la clase RangeRequestHandlerBase de este sitio (con algunas modificaciones menores para encajar dentro de nuestra estructura de proyecto existente) parece haber resuelto el problema, y ​​la reproducción de video ahora funciona correctamente desde IIS5/6.

@Eric - He votado su respuesta como su comentario fue un empujoncito en la dirección correcta.Simplemente agregar el encabezado 'Aceptar rangos' no era suficiente (a pesar de trabajar en IIS7), y el controlador http necesitaba ser modificado para manejar solicitudes de rango y garantizar que se envían los datos correctos.

Cuestiones relacionadas