我在尝试播放网站上虚拟 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/