我想知道你们中的任何人是否曾经遇到过一个解决方案/功能,允许嵌入YouTube视频与一个后备解决方案,其中选择一个替代视频源,如果YouTube视频-和视频只有!-被阻塞。
我们的一个企业客户可以通过代理服务器访问web,该代理服务器可以清除YouTube提供的flash内容。更具体地说,任何来自ytimg.com的服务都被屏蔽了。由于他们的网站上有大量的产品视频,他们发现客户可以在他们的网站上观看视频,而他们自己的员工却不能,这让他们很恼火。
有什么建议吗?
你应该尝试让Ajax请求的东西托管在youTube,我会说这样的东西:
function check_youtube() {
$.ajax({
type: 'GET',
dataType: 'json',
url: URL_ON_YOUTUBE,
timeout: 5000,
success: function(data, textStatus ){
alert('Woot, Cat videos on the way!');
},
error: function(xhr, textStatus, errorThrown){
alert('Ooops, You suck, proxy blocking your way');
}
});
}
应该澄清的是,Youtube的Flash 播放器与它播放的FLV或MP4文件是不同的东西。虽然Flash播放器可以从*.ytimg.com提供,但流本身来自像"o.preferred.lga15s18.v2.lscache6.c.youtube.com"这样的主机。
如果你的客户端阻止了前者,那么你就不能使用Youtube来获取视频。我的方法是从一个具有某种自动识别客户端IP地址范围的页面启动您的视频,并加载您自己的jwplayer或flowplayer或诸如此类的副本。
虽然您可以使用ajax调用之类的东西在浏览器端完成此操作,但您仍然要冒过于保守的企业IT禁用javascript的风险。(我见过这种情况。这并不漂亮。)把"智能"放在服务器上让您可以控制,当然这意味着您需要提前知道限制是什么,以便您可以根据它们进行调整。
在构建页面时,您可以测试与ytimg.com的工作连接,并相应地更新用于显示的iframe的源…
<iframe src="<?php
//Use a dummy (but valid) ytimg.com url to check for ytimg availability...
$h = get_headers('http://s.ytimg.com/yt/swfbin/watch_as3-vflZzp2iQ.swf');
//If ytimg.com isn't available...
if (stristr($h[0], '200') == FALSE)
{ ?>
<!--Alt URL-->
<?php
//Otherwise, if ytimg.com is available...
} else { ?>
<!--YouTube URL-->
<?php } ?> "></iframe>
或者,你可以礼貌地建议你的客户不要那么强硬,允许他们的员工在工作时偶尔休息一下YouTube。
编辑开个玩笑,我是个白痴。参考上面camilo_u的建议