编辑2011年3月22日:由于Youtube现在提供HTTPS访问权限,因此问题不再相关:http://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html
我们的应用程序通过HTTPS运行,很少给我们带来任何问题。然而,当谈到youtube时,他们没有通过SSL连接呈现任何内容这一事实让我们在尝试嵌入剪辑时感到头疼。主要是因为Internet Explorers着名的小警告信息:
“您是否只想查看网页? 安全传送的内容? 此页面包含将要的内容 不使用安全的HTTPS提供 ......等“
我试图通过几种方式解决这个问题。最有希望的是使用Apache中的ProxyPass功能映射到YouTube。
像这样:
ProxyPass: /youtube/ http://www.youtube.com
ProxyPassReverse: /youtube/ http://www.youtube.com
这摆脱了恼人的警告。但是,youtube SWF无法启动流式传输我设法加载到浏览器中的SWF只是说:“发生错误,请稍后再试”。
可能的解决方案可能是:
3月10日更新:我尝试使用Googles Youtube API for ActionScript加载播放器。它起初看起来很有希望,我能够通过我的https://代理加载播放器。但是,加载的SWF包含对不同非ssl URL的显式调用的大量内容,以便为FLV流创建身份验证链接以及加载不同的跨域策略。
我们似乎不应该直接访问flv-streams。这使得很难绕过Internet Explorer警告,而不是从youtube中删除FLV:s并将其提供给您自己的域。
有解决方案可以下载你的FLV:s。但这不符合Youtube的使用条款,对我们来说真的不是一个选择。
答案 0 :(得分:7)
好的,最后我发现了一个解决方案。实际上它很简单,令人愉快。
使用精彩jQuery plugin YouTubin的组合,可以选择通过swfobject添加YouTube视频。 swfobject.js中的一些魔法只是为我们解决了这个问题。
只要您加入jquery,swfobject和jquery.youtubin,您就可以执行此操作:
$.youtubin();
所有包含youtube-clips链接的锚链接都将被嵌入式youtube播放器取代。
最终解决方案来自精彩的swfobject项目。不知何故,他们只是解决了这个问题。
答案 1 :(得分:5)
你可以使用swfobject,这实际上就是你所做的一切。
答案 2 :(得分:5)
好消息 - Youtube的标准嵌入URL可以提供https前缀而不是http前缀。与swfobject结合使用,效果很好。
swfobject.embedSWF(“https://www.youtube.com/v/Zm80UedfaxA&enablejsapi=1&playerapiid=hpatientplayer”,“patientplayer”,“586”,“351”,“9.0.0”,“ custom / expressInstall.swf“,null,params,atts);
答案 3 :(得分:3)
只需使用SWFOBJECT ...即可解决我的问题
<script type="text/javascript" src="js/swfobject.js"></script>
<div id="quibskiplayer"></div>
<script type="text/javascript">
// All of the magic handled by SWFObject (http://code.google.com/p/swfobject/)
var videoID = ""; // REPLACE VIDEO IT HERE
var divID = "quibskiplayer"; //PLACE ID OF DIV TO BE REPLACED HERE
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
swfobject.embedSWF("http://www.youtube.com/v/" + videoID + "&enablejsapi=1&playerapiid=player1", divID, "325", "225", "8", null, null, params, atts);
</script>
在任何情况下,您都不希望您的用户找到视频ID,您可以在PHP中执行以下操作:
$src = $row['youtube_embedd']; // $src is the entire Embedd code
$regex_pattern = '/youtube\.com\/(v\/|watch\?v=)([\w\-]+)/';
preg_match($regex_pattern,$src,$output);
$videoID = $output[2];
答案 4 :(得分:2)
我知道这已经过时了,但我通过了Google的YouTube YouTube认证和IE7播放问题。
你必须嵌入AS3播放器。我用swfObject做了,因为我需要控制电影等等。
enter code here
var params = {allowScriptAccess:"always",wmode:"transparent"};
var atts1 = {id:"myytplayer1"};
var atts2 = {id:"myytplayer2"};
var atts3 = {id:"myytplayer3"};
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer1","video1R", "260", "150", "8", null, null, params, atts1);
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer2","video2R", "260", "150", "8", null, null, params, atts2);
swfobject.embedSWF("https://www.youtube.com/v/xxxxx?version=3&autohide=1&controls=0&enablejsapi=1&fs=1&rel=0&iv_load_policy=3&feature=player_embeded&playerapiid=ytplayer3","video3R", "260", "150", "8", null, null, params, atts3);
function onYouTubePlayerReady(playerId) {
ytplayer1 = document.getElementById("myytplayer1");
ytplayer2 = document.getElementById("myytplayer2");
ytplayer3 = document.getElementById("myytplayer3");
}
function pauseYTVideo(divId){
if (divId.substr(5,1) == 1) ytplayer1.pauseVideo();
if (divId.substr(5,1) == 2) ytplayer2.pauseVideo();
if (divId.substr(5,1) == 3) ytplayer3.pauseVideo();
}
答案 5 :(得分:1)
我们刚刚遇到了这种性质的问题,IE7通过SSL嵌入的YT视频引发混合媒体错误。事实是,他们在https上的原生播放器根本不是SSL。如果在调用单元时查看页面使用的资源,它会通过HTTP从静态服务器调用文件。他们的Flash版本和JavaScript版本的检测脚本也可以从HTTP地址调用。
IE将根据此信息抛出错误。
但是有一个非常简单的解决方法!使用YouTube Chromeless API。该播放器不会调用任何其他文件进行操作,它是一个纯粹的即用型解决方案。这是一个更可靠的玩家,它可以让你更好地控制外部元素。
http://code.google.com/apis/youtube/youtube_player_demo.html