播放由.ashx提供服务的Windows Media视频

时间:2013-11-30 15:56:28

标签: asp.net windows-media-player

我使用常用​​的<object><embed>标记在网页中嵌入了Windows媒体播放器。该视频由ashx(http处理程序)提供。当我尝试播放视频时,我通常(但并非总是)收到一条错误消息,告诉我文件扩展名(ashx)与文件格式不匹配。

这种情况发生在IE(9&amp; 10)以及Firefox(最新版)和WMP插件中。

我知道标签(带有classid等)是正确的,因为媒体播放器显示并允许我点击“播放”按钮。

ashx在响应头中返回正确的mime类型(video / x-ms-wmv)和有效的文件名(somevideo.wmv)。我尝试了内容处理附件和内联。

我使用'http://','https://'和'//'(我更喜欢)尝试了网址

如果我直接将视频文件的网址(包括.ashx)放在浏览器地址栏中,视频会下载并播放。

如果我修改对象标签以使用视频文件的直接路径(/somewhere/somevideo.wmv),它可以工作 - 但我不能将其用作解决方案。

同样的ashx以各种其他格式提供视频和音频而不用担心 - 看起来嵌入式Windows媒体播放器似乎不喜欢它。

这已经工作了好几年 - 我认为这是一些新的行为,但除了浏览器更新之外,我无法确定发生了哪些变化。

编辑:在Fiddler进行的一项更细致的研究表明我之前错过了一些东西。如果我直接访问视频(通过在浏览器地址栏中输入我的ashx网址),视频将在独立媒体播放器中播放。内容类型和处置标题是正确的。

但是,在使用嵌入式播放器时,我通常(并非总是)从用户代理“Microsoft-WebDAV-MiniRedir / 6.1.7601”获取OPTIONS和PROPFIND请求。我没有启用WebDAV,也没有响应选项和propfind请求。嵌入式播放器不会请求实际的视频文件。

更正 - 我确实回应了选项请求 - 这是来自fiddler的请求和响应信息:

OPTIONS http://mydomain.com/myhandler.ashx HTTP/1.1
User-Agent: Microsoft-WebDAV-MiniRedir/6.1.7601
translate: f
Connection: Keep-Alive
Host: mydomain.com

HTTP/1.1 200 OK
Allow: OPTIONS, TRACE, GET, HEAD, POST
Server: Microsoft-IIS/7.5
Public: OPTIONS, TRACE, GET, HEAD, POST
X-Powered-By: ASP.NET
Date: Tue, 24 Dec 2013 16:03:49 GMT
Content-Length: 0

接下来是四个相同的请求,使用PROPFIND而不是OPTIONS。回复是404。

2 个答案:

答案 0 :(得分:2)

要成功播放该文件,您需要正确指定Content-Disposition和Content-Type标头。

在你的ashx中,请确保添加以下行,

 Response.AddHeader("Content-Disposition","attachment;filename='a.wmv'");
 Response.AddHeader("Content-Type","video/wmv");

请根据您拥有的文件类型识别正确的名称和内容类型,并在上面的代码中替换它们。

看起来它有跨源资源共享问题,

确保按照以下回复的建议为不同的域返回正确的标头。

 Access-Control-Allow-Origin: *
 Access-Control-Allow-Methods: GET, POST, OPTIONS
 Access-Control-Allow-Headers: X-Requested-With, Accept, Content-Type, Origin
 Access-Control-Max-Age: 1728000

*替换为托管您的媒体播放器的网页。

答案 1 :(得分:0)

您是否尝试将文件类型附加到网址末尾?例如:

http://www.mywebsite.com/MyVideoHandler.ashx?videofile=123245&.wmv

此示例假定该文件为wmv类型。