6

私は、YouTube の動画再生の「ブロック」メカニズムを作動させる背後にあるロジックを理解しようとしています。

ここでは、JS Fiddle 内に埋め込まれた再生がブロックされている曲を再生しようとしています。それが機能することを観察します。

http://jsfiddle.net/E7B9C/17/

ここに画像の説明を入力

ここで、Google Chrome 拡張機能内でまったく同じコードを使用します。

クリックして拡張機能をダウンロードするには、http://www.meomixes.com/をクリックしてください。

拡張機能への直接リンクについては、http://www.meomixes.com/Test.crxを参照してください。

同じ YouTube ビデオを再生できないことに注意してください。

ここに画像の説明を入力

このシナリオでのデバッグ オプションは何だろうと思っていました。誰が私が何を探求すべきかについて何か考えを持っていますか? マニフェストで次のアクセス許可を要求しようとしましたが、効果はありませんでした:

"permissions": [
"http://*.youtube.com",
"https://*.youtube.com",
"http://*.google.com",
"https://*.google.com"
]

ここに Test.crx の完全なソースを配置しました: http://www.meomixes.com/Test.zip ロードするには:

  • 解凍する
  • Google Chrome の拡張機能ページに移動し、「開発者モード」を有効にします
  • [パッケージ化されていない拡張機能を読み込む] をクリックし、解凍したディレクトリをポイントします。
  • ビデオが再生されないことを確認します。

最後に: この曲は Facebook の投稿で楽しそうに再生されます。

編集:問題の動画のhttp://gdata.youtube.com/feeds/api/videos/UfESt2KdOdc?v=2&prettyprint=trueを見つけました。これはhttp://apiblog.youtube.com/2011/12/understanding-playback-restrictions.htmlとペアになっています。

最初の応答に基づいているだけです。基本的に、テレビやGoogle Chrome拡張機能などの「外部デバイス」で再生できないようにする「シンジケーション」と呼ばれる設定があります。

現在、この問題を回避する方法を検討しています。

4

1 に答える 1

10

Youtube iframe の実装により、特定の参照 URL がライセンスされたコンテンツを表示するのをブロックしているようです。

問題

これらの参照スキーマは、テストしている特定のビデオでは機能しないようです。

 chrome-extension://
 file://

コンテンツ ライセンサーである UMG は、拡張機能やローカル ファイルからの再生を禁止することを選択したようです。別の方法は、ライセンスされたコンテンツを含むビデオの使用を避けることですが、それは退屈です.

不便ですが、iframe プレーヤーを拡張機能に実装できる回避策があります。Youtube が気にかけているのは、プレーヤーがインターネット上のどこかのページに埋め込まれていることだけです。

プロキシ ページ

popup.htmの iframe src を例の jsfiddle 結果フレームに置き換えて、プラグインをリロードしてみてください。

 <iframe width="200" height="200" src="http://fiddle.jshell.net/E7B9C/17/show/"></iframe>

以前は「利用できなかった」ビデオが再生されているはずです。拡張機能は、jshell.net で制御するページを参照するようになりました。YouTube が知っているのは、jshell.net からプレーヤーを呼び出しているということだけです。

コントロール

プレーヤーができたので、YouTube iframe を参照している独自の iframe とそれが API を参照しているため、Youtube コントロールを使用できないことに気付くかもしれません。まだ十分に面白くないかのように、独自の iframe API を作成して、chrome 拡張機能から iframe、YouTube の iframe に通信することができます。

通常の状況では、親は子フレームの window.location.hash を設定でき、そのフレームは通過する変更を監視して解析します。次に、子は新しい情報を使用して、親のコールバックを直接呼び出します。

編集: window.location.hash を使用する代わりに、代わりに HTML5 の window.postMessage() を使用して、ハッシュのチェックと解析を継続的に処理する必要がないようにすることができます。

これで起動して実行できるようになります。

于 2012-06-19T15:56:07.327 に答える