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

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

这种情况发生在IE(9& 10)以及带有WMP插件的Firefox(最新版)中.

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

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

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

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

如果我修改object标签以使用视频文件的直接路径(/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.

最佳答案 要成功播放该文件,您需要正确指定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

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

点赞