2011-04-15 155 views
3

下午好!ASP.NET和HTML5視頻播放時間

目前我正在處理一個處理程序,將數據庫中的視頻提供給將使用HTML5顯示它的控件。但是,使用Response.OutputStream.Write確實可行,但Firefox 4.0和Chrome中的視頻播放器似乎無法確定視頻的長度。隨着遊戲時間的推移,Firefox的計數器只會增加,而Chrome則顯示完全隨機的時間。

是否需要設置一些標題才能使其工作?我已經將內容長度設置爲字節數,我認爲這是正確的值。

HTML標記

<video controls="controls" poster="<%= ImageURL %>" width="<%= Width %>" height="<%= Height %>" preload="preload"> 
    <source src="<%= MP4URL %>" type='video/mp4; codecs="avc1.42E01E,mp4a.40.2"'/> 
    <source src="<%= OggURL %>" type='video/ogg; codecs="theora,vorbis"'/> 
    <img alt="<%= ImageAlt %>" src="<%= ImageURL %>" width="<%= Width %>" height="<%= Height %>" title="No video playback capabilities, please download the video below" /> 
</video> 
</div> 

視頻處理程序代碼

 // Snip -- Company specific DB code 

     // Set the correct headers 
     context.Response.AppendHeader("content-length", video.Length.ToString()); 

     // Set the content type 
     switch (extensionType.ToLower()) 
     { 
      case "ogv": 
       contentType = "video/ogg"; 
       break; 

      case "mp4": 
       contentType = "video/mp4"; 
       break; 

      default: 
       contentType = ""; 
       break; 
     } 
     context.Response.ContentType = contentType; 
     context.Response.Charset = String.Empty; 
     context.Response.Buffer = false; 


     // Write the video to the stream 
     context.Response.OutputStream.Write(video, 0, video.Length); 

     // Close the repsonse 
     context.Response.Close(); 
     context.Response.End(); 

任何幫助將不勝感激。

+0

這方面的進展如何? – vtortola 2011-12-20 12:16:52

回答

0

因此,在離開這幾年後,我們決定再看看視頻處理程序。一位勇敢的年輕學徒,從此成爲了我們全職的開發人員,解決了這個問題。

事實證明,您需要在回覆的標題中添加更多信息。我們錯過了Content-Range標頭,它看起來像這樣:bytes_from-bytes_to/bytes_total。 Content-Length頭部需要具有被髮回的塊的大小,而不是文件的總大小。最後,您需要使用206(部分)而不是200(OK)的代碼進行回覆。

一旦我們這樣做了,一切都開始很好地工作。我們做了更多的工作,將文件分成好的塊,而不是一次又一次從數據庫中加載整個文件。