9

编辑 2011 年 3 月 22 日:这个问题不再那么重要,因为 Youtube 现在提供 HTTPS 访问:http ://apiblog.youtube.com/2011/02/https-support-for-youtube-embeds.html


我们的应用程序通过 HTTPS 运行,这很少给我们带来任何问题。然而,当谈到 youtube 时,它​​们不通过 SSL 连接呈现任何内容的事实让我们在尝试嵌入剪辑时有些头疼。主要是因为 Internet Explorer 著名的小警告信息:

“您只想查看安全传送的网页内容吗?此页面包含不会使用安全 HTTPS 传送的内容……等等”

我试图通过多种方式解决这个问题。最有希望的是使用 Apache 中的 ProxyPass 功能映射到 YouTube。

像这样:

ProxyPass: /youtube/ http://www.youtube.com
ProxyPassReverse: /youtube/ http://www.youtube.com

这摆脱了烦人的警告。但是,youtube SWF 无法开始流式传输 我设法加载到浏览器中的 SWF 只是声明:“发生错误,请稍后再试”。

潜在的解决方案可能是:

  • 下载 youtube FLV:s 并从自己的域中提供服务 (gah)
  • 使用自定义 FLV 播放器并仅通过 https 代理从 youtube 流式传输 FLV:s?

3 月 10 日更新:我尝试使用Google 的 Youtube API for ActionScript来加载播放器。起初它看起来很有希望,我能够通过我的 https:// 代理加载播放器。但是,加载的 SWF 包含对不同非 ssl url 的显式调用负载,以便为 FLV 流创建身份验证链接并加载不同的跨域策略。

看起来我们真的不应该直接访问 flv-streams。这使得绕过 Internet Explorer 警告变得非常困难,除非从 youtube 中删除 FLV:s 并将它们从您自己的域中提供出来。

有下载 youtubes FLV:s 的解决方案。但这不符合 Youtube 使用条款,对我们来说确实不是一个选择。

4

6 回答 6

7

好的,所以我终于找到了解决方案。实际上它简单而令人愉快。

使用美妙的jQuery 插件 YouTubin的组合,它可以选择通过swfobject包含 youtube 视频。swfobject.js 中的一些魔法只是简单地为我们解决了这个问题。

因此,只要您包含jqueryswfobjectjquery.youtubin,您就可以这样做:

$.youtubin();

并且所有包含指向 youtube 剪辑的链接的锚链接都将替换为嵌入式 youtube 播放器。

最后,解决方案来自精彩的 swfobject 项目。不知何故,他们只是解决了这个问题。

这是证据:):http: //screencast.com/t/YzVlZjkx

于 2010-04-09T11:54:07.457 回答
5

您可以使用 swfobject,这实际上是 youtubein 所做的一切。

http://code.google.com/p/swfobject/

于 2010-07-28T00:44:18.663 回答
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",空,参数,atts);

于 2011-02-14T10:30:47.463 回答
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];

科技在线

于 2010-11-17T16:47:26.023 回答
2

我知道这很旧,但我解决了谷歌糟糕的 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();
}
于 2011-03-22T02:45:27.803 回答
1

我们刚刚遇到了这种性质的问题,IE7 通过 SSL 嵌入的 YT 视频引发了混合媒体错误。事实是,他们通过 https 的本地播放器根本不是 SSL。如果您查看调用该单元时页面正在使用的资源,它会通过 HTTP 从静态服务器调用文件。他们的 Flash 版本和 JavaScript 版本的检测脚本也从 HTTP 地址调用。

IE 将根据此信息引发错误。

但是有一个非常简单的解决方法!使用 YouTube Chromeless API。该播放器不调用任何其他文件来操作,它是一个纯粹的即用型解决方案。这是一个更可靠的播放器,它使您可以从外部元素中获得更大的播放器控制权。

http://code.google.com/apis/youtube/youtube_player_demo.html

于 2011-09-12T13:26:34.823 回答