2017-04-24 131 views
12

我有一个Windows媒体播放器嵌入我的网页视图:WMV流媒体文件的大小限制

<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左右的视频时,播放效果会很好。但是如果我使用大约137​​K左右的文件,那么该文件就不会播放。它太大了吗?

当我使用F12来查看网络活动时,我看到该文件正试图以text/html形式呈现。这是为什么?我也看到它正在中止的GET函数。这是为什么?我已经增加了executionTimeout值无济于事。

enter image description here

从napuza的信息是好,我是能够得到正确的内容类型,似乎整个文件传输到浏览器,但它从来不玩。

enter image description here

回答

6

指定的ContentType:

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

谢谢napuza。我现在看到正确的内容类型,但大文件从不播放。还有什么我需要做的吗? –

+0

这很奇怪,但我认为它可能是我加载到数据库中的特定文件。一旦我加载了一个在训练过程中使用的实际文件,并且该文件超过了300MB,它就可以很好地运行 - 超过23分钟! –

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(); 
+0

这有点帮助。它从定位媒体到连接媒体到开放媒体,然后跳回到准备就绪,无需播放任何内容。 –

0

因为他带领我走向正确的方向,所以我已经给了纳图兹巴的答案。我成功了:

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文件仍然无法播放。我怀疑它可能与文件中的元数据有关。任何人都有想法?

+0

首先,检查原始文件是否在本地磁盘上工作(URL ='file:// ...')。如果是这样,请从站点下载文件并将其内容与原始文件进行比较。 – napuzba