Estoy intentando servir archivos de video desde ASP.NET MVC a clientes de iPhone. El video está formateado correctamente, y si lo tengo en un directorio web de acceso público funciona bien.Servir archivo de video a iPhone desde ASP.NET MVC2
El problema principal de lo que he leído es que el iPhone requiere que tengas un entorno de descarga listo para reanudar que te permite filtrar tus rangos de bytes a través de encabezados HTTP. Supongo que esto es para que los usuarios puedan saltar hacia adelante a través de los videos.
Al servir archivos con MVC, estos encabezados no existen. Intenté emularlo, pero sin suerte. Tenemos IIS6 aquí y no puedo hacer muchas manipulaciones de encabezado. ASP.NET se quejará a mí diciendo "Esta operación requiere modo canalización integrada de IIS."
La actualización no es una opción, y no se me permite mover los archivos a un recurso compartido de web público. Me siento limitado por nuestro entorno, pero estoy buscando soluciones, no obstante.
Aquí hay un código de ejemplo de lo que estoy tratando de hacer en fin ...
public ActionResult Mobile(string guid = "x")
{
guid = Path.GetFileNameWithoutExtension(guid);
apMedia media = DB.apMedia_GetMediaByFilename(guid);
string mediaPath = Path.Combine(Transcode.Swap_MobileDirectory, guid + ".m4v");
if (!Directory.Exists(Transcode.Swap_MobileDirectory)) //Make sure it's there...
Directory.CreateDirectory(Transcode.Swap_MobileDirectory);
if(System.IO.File.Exists(mediaPath))
return base.File(mediaPath, "video/x-m4v");
return Redirect("~/Error/404");
}
Sé que tengo que hacer algo como esto, sin embargo soy incapaz de hacerlo en. NET MVC. http://dotnetslackers.com/articles/aspnet/Range-Specific-Requests-in-ASP-NET.aspx
Aquí es un ejemplo de un encabezado de respuesta HTTP que funciona:
Date Mon, 08 Nov 2010 17:02:38 GMT
Server Apache
Last-Modified Mon, 08 Nov 2010 17:02:13 GMT
Etag "14e78b2-295eff-4cd82d15"
Accept-Ranges bytes
Content-Length 2711295
Content-Range bytes 0-2711294/2711295
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type text/plain
Y aquí es un ejemplo de uno que no lo hace (esto es de .NET)
Server ASP.NET Development Server/10.0.0.0
Date Mon, 08 Nov 2010 18:26:17 GMT
X-AspNet-Version 4.0.30319
X-AspNetMvc-Version 2.0
Content-Range bytes 0-2711294/2711295
Cache-Control private
Content-Type video/x-m4v
Content-Length 2711295
Connection Close
Cualquier ideas? Gracias.
Gracias por toda su increíble ayuda. Voy a probar esto en la mañana! – jocull
Usted patea el culo, hombre, esto funciona como debería. Para la referencia de todos, vi los encabezados de solicitud de iPhone mientras transmitía el video. Hace que muchas solicitudes posteriores soliciten rangos de bytes pequeños y específicos a medida que avanza a través del video. Supongo que los une todos juntos sobre la marcha. Gracias por toda su ayuda Erik. – jocull
Además, olvidé mencionar esto, pero tuve que cambiar "clase pública FileStreamResult: FileStreamResult" de nuevo a "publicResultationRange class class: FileStreamResult". ¡No me gustó que extendiera una clase con el mismo nombre! Solo un pequeño problema para su edición. – jocull