ASP.NET和HTML5视频播放时间

时间:2011-04-15 14:03:21

标签: asp.net html5 video

下午好堆栈溢出!

目前我正在处理一个处理程序,用于将视频从数据库提供给控件,该控件将使用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();

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以,在离开这几年之后,我们决定再看看一个视频处理程序。一个勇敢的年轻学徒,从此成为我们的全职开发人员,解决了这个问题。

事实证明,您需要在回复的标题中添加更多信息。我们错过了Content-Range标头,它看起来像这样:bytes_from-bytes_to / bytes_total。 Content-Length标头需要具有要发送回的块的大小,而不是文件的总大小。最后,您需要使用206(部分)而不是200(OK)的代码进行响应。

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