2012-10-08 11 views
5

Ich verwende Code von diesem codeproject article, um eine MP4-Videodatei auf den SQL-Server (varbinary (MAX)) hochzuladen und von dort abzuspielen.Abspielen einer Videodatei von einem sql Server-Blob über den Ashx-Handler mit HTML5-Video-Tag

Meine Anforderung ist es, SQL Server speziell zu verwenden, anstatt Videos aus dem Dateisystem zu speichern und abzurufen.

Dies ist der Code, den ich das Video abspielen bin mit:

<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> 

Wenn ich eine physische Videodatei als Videoquelle verwenden, es funktioniert. Der obige Code funktioniert jedoch nicht.

In "Internet Explorer" der Tag

In "Chrome" die Player-Tasten sind sichtbar, aber wenn ich Play-Taste klicken, wird kein Video abgespielt wird eine Black-Box mit einem roten Kreuz macht. Wenn wir mit der rechten Maustaste klicken, wird die Option "Video speichern unter ..." angezeigt, und die heruntergeladene Datei läuft problemlos mit einem Desktop-Media-Player.

Bitte helfen Sie mir mit dem richtigen Code.

+0

Könnten die doppelten Anführungszeichen im Daten-Setup-Attribut Probleme verursachen? –

Antwort

1

Testen Sie Ihren Codeblock <video> mit einer statischen Videoquelle. Sobald Ihr Markup als gut bekannt ist, testen Sie den Handler, stellen Sie sicher, es ist Codierung des Videos korrekt und liefert die richtigen akzeptiert. Versuchen Sie es mit dem Media 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

Der HTML5 Video tage Unterstützung für Range Requests erfordert.

Wenn Sie statische Dateien bereitstellen, wird diese Unterstützung intern vom Server bereitgestellt, aber im Fall von HttpHandler müssen Sie diese Unterstützung selbst bereitstellen. Im Allgemeinen bedeutet dies, Range und If-Range Header in Anforderung zu behandeln und richtig zu dienen 206 Teilinhalt Antworten mit Content-Range, Date und ETag oder Content-Location Header.

Der Artikel Range Requests in ASP.NET MVC – RangeFileResult beschreibt ausführlich, wie ein ASP.NET MVC ActionResult mit Bereich anfordern Unterstützung schaffen - Sie sollten ohne Probleme zu ProcessRequest Methode der HttpHandler zu bewegen die gesamte Logik aus ExecuteResult Methode in der Lage sein.

Verwandte Themen