jwplayer 不支持 crossdomain.xml
Posted
技术标签:
【中文标题】jwplayer 不支持 crossdomain.xml【英文标题】:crossdomain.xml not honored by jwplayer 【发布时间】:2011-04-12 06:08:56 【问题描述】:我在这个网站上有一个视频播放器 http://aiskacang.com/crawl/pseudo.html
播放器从另一个域加载 flv 视频文件 seeon.flv。 目前,即使seeon.flv所在的服务器中没有crossdomain.xml,视频也可以正常加载。 这不是我想要或期望的行为。
我还尝试放置一个包含以下内容的 crossdomain.xml:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM
"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="none"/>
</cross-domain-policy>
从萤火虫中,我可以看到在访问视频文件 (seeon.flv) 之前有一个对 crossdomain.xml 的请求。 它返回内容很好,内容类型为application/xml,但仍然允许跨域行为。
有什么想法吗?
【问题讨论】:
可能重复。 ***.com/questions/5211846/… 感谢您的链接。但是有两件事。 1:发贴者的第一期,关于为什么第一期无法播放的原因仍然没有解释。 2:为什么flash播放器会为一个媒体加载crossdomain.xml呢? 【参考方案1】:听起来您可能对跨域策略的使用感到困惑。禁止跨域访问不会阻止内容被加载和显示。它只是在目标加载和显示后限制来自不同域的内容之间的访问。例如,如果 A.swf 加载 B.swf,A 将无法调用 B 内部的方法。但 B 仍然会被加载。
听起来你想要的是hotlinking protection,这通常是在网络服务器级别完成的。 (也就是说,你在 FLV 的服务器上的 Apache/IIS/etc. 中制定一个规则,以防止它被提供给其他域的页面。)
【讨论】:
我知道盗链。盗链的问题在于 jwplayer 不发送 HTTP 引用。这将导致即使在同一域内也无法加载视频。更重要的是,我需要提供一个跨域访问的白名单 我明白了。恐怕我不知道是否有办法让盗链与 JWP 一起使用,但无论如何我希望很清楚视频播放的原因。要回答您上面关于为什么 Flash 会加载视频文件策略的评论,据我所知,它会在所有外部加载时都这样做,而且我认为在某些情况下该策略仍会发挥作用。例如。如果加载 SWF 试图将加载的 FLV 绘制到 BitmapData 中,除非允许跨域访问(虽然不是 100% 肯定),否则它不应该工作。【参考方案2】:为了保护您的 Jwplayer 免受跨域文件注入,没有内置选项,crossdomain.xml 对您没有帮助。
您可以尝试使用 .htaccess 中的服务器规则拒绝远程内容注入 http://www.masterdef.net/blog/jwplayer-crossdomain-remote-video-injection/#more-32
### Deny SWPlayer remote files access
########## Begin - File injection protection
RewriteCond %REQUEST_METHOD GET
RewriteCond %QUERY_STRING [a-zA-Z0-9_]=http [OR]
RewriteCond %QUERY_STRING [a-zA-Z0-9_]=http:// [OR]
RewriteCond %QUERY_STRING [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %QUERY_STRING [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC]
RewriteRule .* - [F]
########## End - File injection protection
【讨论】:
以上是关于jwplayer 不支持 crossdomain.xml的主要内容,如果未能解决你的问题,请参考以下文章
JwPlayer ChromeCast:无法投射:不支持媒体格式
在 Android 中使用 JWplayer 在 Phonegap 中进行流式视频播放