从虚拟URL播放视频文件

时间:2012-07-21 16:27:06

标签: asp.net video iis-7 http-headers ashx

我很难尝试从网站上的虚拟网址播放视频。 我无法直接链接到视频,因为实际文件不在Web可访问的根目录下的任何位置。而且,虚拟路径实际上是一个HTTP处理程序(ASP.Net“ASHX”),用于进行额外的权限检查等。

我试图设置视频访问权限(使用JWPlayer,但没有达到这一点), 我在开始时使用的ASHX处理程序只是将文件作为下载传输, 使用HTTP标头:content-disposition: attachment; filename=example.mp4

当我在浏览直接链接.mp4文件与虚拟链接之间比较浏览器(Chrome 20.0.1132.57)的行为时 - 我注意到直接链接在一个小型嵌入式视频播放器中打开,其中虚拟链接仅下载文件。

我已经尝试(并且失败)捕获HTTP标头的差异(使用Fiddler)并为视频编写特殊的ASHX - 这将发送与IIS完全相同的响应(没有任何特定的mp4配置,甚至没有MIME类型)。 即使我模仿所有标题(至少,据我所知),我似乎无法通过虚拟网址打开视频,就像直接链接一样。

我尝试使用Content-Type & Content-Length标头发送权限Accept-Ranges & Content-Range,甚至在第一个请求没有video/mp4或{{1}时尝试模拟两阶段请求在*/*标题中(我还尝试在第一个响应上发送1个字节/在两个响应上发送整个视频)。 (当我说所有这些值都是“正确的”时,我的意思是它们与我在Fiddler中捕获的工作反应相同......)

请问,有人可以解释触发浏览器将文件视为视频的原因吗? 我需要指定/省略哪些标题? (除了省略Accept当然......)

1 个答案:

答案 0 :(得分:2)

原来问题与JWPlayer的嵌入代码有关。

当指向视频的网址不包含已识别的视频扩展时 - 播放器不知道该怎么做 - 因此需要明确定义。

以下是JWPlayer的功能嵌入代码: (注意'provider':'video'

的明确规范
<video id="jwplayer_placeholder"
       src="http://localhost/mysite/SecuredFile.ashx?File=1234"
       height="270"
       width="480">
</video>
<script type="text/javascript">


  jwplayer("jwplayer_placeholder").setup(                                                       
  {
     modes:
     [
         { type: "flash", src: http://localhost/mysite/jwplayer/player.swf" },
         { type: 'html5' },
         { type: 'download' }
     ],
     'provider':'video'
   });
</script>

希望这有助于某人...