Estamos utilizando un FileStreamResult para proporcionar datos de vídeo a un reproductor de vídeo basado en Silverlight MediaElement:Cómo transmitir contenido parcial con ASP.NET MVC FileStreamResult
public ActionResult Preview(Guid id) {
return new FileStreamResult(
Services.AssetStore.GetStream(id, ContentType.Preview),
"application/octet-stream");
}
Por desgracia, el reproductor de vídeo Silverlight descarga el archivo de vídeo antes de que comience a jugar. Se espera este comportamiento ya que nuestra acción Preview
no admite la descarga de contenido parcial.
(nota al margen: si el archivo está alojado en un directorio virtual de IIS podemos iniciar la reproducción en cualquier ubicación del video mientras se está descargando. Sin embargo, por razones de seguridad y auditoría no podemos proporcionar un enlace de descarga directa. entonces esto no es una opción.)
¿Cómo podemos mejorar la acción del controlador para soportar contenido HTTP parcial?
Supongo que primero tenemos que informar al cliente que lo apoyamos (agregando un encabezado "Aceptar rangos: bytes" a una solicitud HEAD), entonces tenemos que evaluar el encabezado HTTP "Rango" y transmitir el solicitado rango de archivos con un código de respuesta de 206. ¿Funcionará eso con ASP.NET MVC hospedado en IIS6? ¿Ya hay algún código disponible?
Véase también:
- http://en.wikipedia.org/wiki/List_of_HTTP_headers
- http://blogs.msdn.com/anilkumargupta/archive/2009/04/29/downloadprogress-downloadprogressoffset-and-bufferprogress-of-the-mediaelement.aspx
- http://benramsey.com/archives/206-partial-content-and-range-requests/