2012-10-08 26 views
5

我使用此codeproject article中的代碼將MP4視頻文件上載到SQL服務器(varbinary(MAX))並從那裏播放。通過使用HTML5的ashx處理程序從sql服務器blob播放視頻文件視頻標記

我的要求是專門使用SQL Server,而不是從文件系統存儲和提取視頻。

這是我用來播放視頻的代碼:

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

如果我使用一個物理視頻文件作爲視頻源,它的工作原理。但上述代碼不起作用。

在的「Internet Explorer」的標籤生成帶有紅叉

在「鉻」的播放器按鈕是可見的,但是當我點擊播放按鈕,沒有視頻播放一個黑盒子。當我們右鍵點擊它顯示「保存視頻爲...」選項,下載的文件與桌面媒體播放器運行良好。

請幫我用正確的代碼。

+0

數據設置屬性中的雙引號可能導致問題嗎? –

回答

1

用靜態視頻源測試您的<video>代碼塊。一旦你的 標記被認爲是好的,測試處理程序,確保它是 正確編碼視頻並提供正確的接受。有媒體試試看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

的HTML5 Video踏歌需要Range Requests支持。

當您提供靜態文件時,此支持由服務器在內部提供,但在HttpHandler的情況下,您需要自行提供此支持。一般來說,這意味着在處理請求RangeIf-Range頭和適當的服務206 部分內容與Content-RangeDateETagContent-Location響應。

文章Range Requests in ASP.NET MVC – RangeFileResult詳細描述瞭如何使用範圍請求創建一個ASP.NET MVC ActionResult支持 - 你應該能夠從ExecuteResult方法將所有邏輯的HttpHandlerProcessRequest方法沒有問題。