下午好堆栈溢出!
目前我正在处理一个处理程序,用于将视频从数据库提供给控件,该控件将使用HTML5显示它。使用Response.OutputStream.Write确实有效,但Firefox 4.0和Chrome中的视频播放器似乎无法确定视频的持续时间。 Firefox的计数器随着播放时间的推移而增加,而Chrome则显示完全随机的时间。
我需要设置一些标头才能使其正常工作吗?我已将content-length设置为字节数,我认为这是正确的值。
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 :(得分:0)
所以,在离开这几年之后,我们决定再看看一个视频处理程序。一个勇敢的年轻学徒,从此成为我们的全职开发人员,解决了这个问题。
事实证明,您需要在回复的标题中添加更多信息。我们错过了Content-Range标头,它看起来像这样:bytes_from-bytes_to / bytes_total。 Content-Length标头需要具有要发送回的块的大小,而不是文件的总大小。最后,您需要使用206(部分)而不是200(OK)的代码进行响应。
一旦我们完成了这一切,一切都开始运作良好。我们做了一些工作,将文件有效地分成了很好的块,而不是一次又一次地从数据库中加载整个文件。