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 には、FLV ストリームの認証リンクを作成し、さまざまなクロスドメイン ポリシーをロードするために、さまざまな非 SSL URL への明示的な呼び出しが多数含まれています。

flv-streams に直接アクセスすることは想定されていないようです。これにより、YouTube から FLV: をリッピングして独自のドメインから提供する以外に、Internet Explorer の警告を回避することが非常に困難になります。

YouTube の FLV:s をダウンロードするためのソリューションがあります。しかし、それは Youtube の利用規約に準拠しておらず、実際には私たちの選択肢ではありません。

4

6 に答える 6

7

わかりました、ついに私は解決策を見つけました。そして実際、それはシンプルで楽しいものです。

swfobjectを介してYouTubeビデオを含めるオプションがある素晴らしいjQueryプラグインYouTubinの組み合わせを使用します。swfobject.js のいくつかの魔法は、これを単純に解決してくれます。

したがって、 jqueryswfobject、およびjquery.youtubinを含める限り、これを実行できます。

$.youtubin();

また、YouTube クリップへのリンクを含むすべてのアンカー リンクは、埋め込まれた YouTube プレーヤーに置き換えられます。

最終的に、解決策は素晴らしい swfobject プロジェクトから得られます。どういうわけか、彼らはこれを修正するだけです。

これが証拠です:): http://screencast.com/t/YzVlZjkx

于 2010-04-09T11:54:07.457 に答える
5

swfobject を使用できますが、これは実際には YouTube が行っていることのすべてです。

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

于 2010-07-28T00:44:18.663 に答える
5

朗報 - Youtube の標準の埋め込み URL には、http プレフィックスの代わりに https プレフィックスを付けることができます。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);

于 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

これが古いことは知っていますが、Google の悪い YouTube 証明書と IE7 の再生の問題である BS に取り組みました。

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

SSL 経由で埋め込まれた YT ビデオで IE7 が混合メディア エラーをスローするという、この性質の問題に遭遇しました。実のところ、彼らの https 上のネイティブ プレーヤーは SSL ではありません。ユニットが呼び出されたときにページで使用されているリソースを見ると、HTTP 経由で静的サーバーからファイルが呼び出されています。Flash バージョンと JavaScript バージョンの検出スクリプトも、HTTP アドレスから呼び出します。

IE は、この情報に基づいてエラーをスローします。

しかし、非常に簡単な修正方法があります。YouTube クロムレス API を使用します。そのプレーヤーは、操作するために追加のファイルを呼び出すことはありません。これは、純粋にすぐに使用できるソリューションです。これははるかに信頼性の高いプレーヤーであり、外部要素からのプレーヤーの制御が大幅に向上します。

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

于 2011-09-12T13:26:34.823 に答える