WMV流媒体文件大小限制

12

我在网页视图中嵌入了一个Windows Media Player:

 <div id="divCourseVideo" style="width:100%;margin:0 auto;" class="container">
        <OBJECT style="display:inline-block" ID="CoursePlayer" HEIGHT="400" WIDTH="400" CLASSID="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="video/x-ms-wmv">
            <param name='URL' value="@Url.Action("ShowMovie", "OLT", new { courseId = Model.ID })" />
            <param name='autoStart' value="true" />
            <param name='currentPosition' value="false" />
            <param name='showControls' value="true" />
        </OBJECT>


    </div>

ShowMovie操作从数据库提取视频流并将其发送到视图中,代码如下:

 public void ShowMovie(string courseId)
    {
        CourseVideo video = Repository.GetCourseVideoStream(courseId);
        var bytesinfile = new byte[video.VideoStream.Length];
        video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length);
        ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);
    }

当我使用大约10K左右的视频时,它可以正常播放。但是如果我使用大约137K左右的文件,该文件就无法播放。文件太大了吗?

当我使用F12查看网络活动时,我发现该文件试图以text/html形式下载。为什么会这样?我还发现在GET函数上它被中止了。为什么会这样?我已经增加了executionTimeout值,但没有效果。

输入图片说明

napuza提供的信息很好,我能够获得正确的内容类型,似乎整个文件都已经流式传输到浏览器,但仍无法播放。

输入图片说明

4个回答

6

指定ContentType:

ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv";
ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);

谢谢napuza。我现在看到了正确的内容类型,但是大文件无法播放。我需要做些什么? - Dean.DePue
这很奇怪,但我认为可能是我加载到数据库中的特定文件。一旦我加载了一个实际用于训练过程的文件,而且该文件超过300MB,它就可以正常播放 - 超过23分钟! - Dean.DePue

0
尝试将文件分块发送:
response = ...    
byte[] buffer = new byte[4096];

response.ContentType = "video/x-ms-wmv";
response.AppendHeader("content-length", video.VideoStream.Length);

while ( response.IsClientConnected) {
    int bytesRead = video.VideoStream.Read(buffer, 0, buffer.Length);
    if (bytesRead == 0 ) {
        break;
    }
    response.OutputStream.Write(buffer, 0, bytesRead);
    response.Flush();
}
response.End();

那有一点帮助。它从定位媒体到连接媒体到打开媒体,然后跳回准备状态而没有播放任何内容。 - Dean.DePue

0

0

我已经给予napuzba答案的信用,因为他引导了我正确的方向。我成功地完成了这个:

 CourseVideo video = Repository.GetCourseVideoStream(courseId);
        var bytesinfile = new byte[video.VideoStream.Length];
        video.VideoStream.Read(bytesinfile, 0, (int)video.VideoStream.Length);
        byte[] buffer = new byte[4096];
        ControllerContext.HttpContext.Response.ContentType = "video/x-ms-wmv";
        ControllerContext.HttpContext.Response.AppendHeader("content-length", video.VideoStream.Length.ToString());
        video.VideoStream.Seek(0, SeekOrigin.Begin);
        ControllerContext.HttpContext.Response.BinaryWrite(bytesinfile);
        ControllerContext.HttpContext.Response.End();

然而,我正在处理的一些WMV文件仍无法播放。我怀疑这可能与文件中的元数据有关。有人对此有什么想法吗?


首先,请检查原始文件是否可以从本地磁盘(URL='file://...')正常工作。如果是,则从站点下载该文件并将其内容与原始文件进行比较。 - napuzba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接