2012-10-08 25 views
5

Estoy usando el código de este codeproject article para cargar un archivo de video MP4 al servidor SQL (varbinary (MAX)) y reproducirlo desde allí.Reproducción de un archivo de video desde un blob de servidor sql a través de ashx handler usando HTML5 Video Tag

Mi requisito es utilizar SQL Server específicamente en lugar de almacenar y recuperar videos del sistema de archivos.

Este es el código que estoy utilizando para reproducir el vídeo:

<video id='my_video_1' controls 
    width="640" height="264" 
    data-setup="{"controls":true, "preload":none}" > 
    <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' type='video/mp4'> 
</video> 

Si utilizo un archivo de vídeo física como fuente de vídeo, funciona. Sin embargo, el código anterior no funciona.

En "Internet Explorer" la etiqueta rinde un cuadro negro con una cruz roja

En "Chrome" los botones del reproductor son visibles, pero cuando hago clic en el botón de reproducción, se reproduce sin vídeo. Cuando hacemos clic derecho, se muestra la opción "Guardar video como ..." y el archivo descargado funciona bien con un reproductor multimedia de escritorio.

Por favor, ayúdenme con el código correcto.

+0

¿Las comillas dobles dentro del atributo data-setup pueden estar causando problemas? –

Respuesta

1

Pruebe su bloque de código <video> con una fuente de video estática. Una vez que se sabe que su marca es buena, pruebe el controlador, asegúrese de que sea codificando el video correctamente y entregando las confirmaciones correctas. Prueba con medios player..etc

<video id='my_video_1' controls width="640" height="264" 
    data-setup='{"controls":true, "preload":none}' > 
    <source src='<%# "VideoHandler.ashx?id=" + Eval("ID") %>' 
    type='video/mp4 codecs="avc1.42E01E, mp4a.40.2"'> 
</video> 


public void ProcessRequest (HttpContext context) 
{ 
    .... 
    context.Response.AppendHeader("Content-Type", "video/mp4");` 
    context.Response.AppendHeader("Accept-Ranges", "bytes"); 

    byte[] fileContents = GetYourBytesFromWhereEver(); 
    context.Response.OutputStream.Write(fileContents, 0, fileContents.Length); 
    context.Response.Flush(); 
    ..... 
} 
5

El HTML5 Video taje requiere soporte para Range Requests.

Cuando está sirviendo archivos estáticos, este soporte es provisto internamente por el servidor, pero en el caso de HttpHandler necesita proporcionar este soporte usted mismo. En general, esto significa el manejo de Range y If-Range cabeceras de petición y servir adecuada 206 Contenido parcial respuestas con Content-Range, Date y ETag o Content-Location cabeceras.

El artículo Range Requests in ASP.NET MVC – RangeFileResult describe en detalle cómo crear un ASP.NET MVC ActionResult con Solicitud Rango apoyo - usted debe ser capaz de mover toda la lógica de ExecuteResult método para ProcessRequest método de HttpHandler sin problemas.

Cuestiones relacionadas