asp.net - 从虚拟 URL 播放视频文件

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

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

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

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

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

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

请问有人可以解释一下是什么触发浏览器将文件视为视频吗? 我需要指定/省略哪些 header ? (当然,除了省略 content-disposition:attachment...)

最佳答案

事实证明,主要问题与 JWPlayer 的嵌入代码有关。

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

这是 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>

希望这对某人有帮助......

关于asp.net - 从虚拟 URL 播放视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593893/

相关文章:

asp.net - 文件上传到 MySQL DB + ASP.NET MVC4

asp.net - StateModel.AddModelError() 但在重定向上?

javascript - 更改 Firefox 的嵌入对象 src 问题(IE9 或 Opera 没有问题)

animation - ffmpeg 动态缩小视频(向后挤压)或缩小到小于原始视频

c# - 使用 SignalR 发送 JSON

c# - 如何使用 Linq 和 ASP.Net Forms 在多个表之间编写联接

asp.net - ThreadPools vs Own Threads 用于长时间运行的进程

IIS7 应用程序池最佳实践配置

java - Java 中的视频播放(JMF、Fobs4JMF、Xuggler、FMJ)

url - 如何在本地 IIS 上创建别名路径?