2011-04-15 117 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)的代码进行回复。

一旦我们这样做了,一切都开始很好地工作。我们做了更多的工作,将文件分成好的块,而不是一次又一次从数据库中加载整个文件。