イナヅマTVログ

勘違いだといいんだけど、ActionScript 2だとYoutube chromeless player がロードできない?

| 1件のコメント

ActionScript 2+chromeless playerでYoutubeの動画が再生されなくなりました

ことの始まりはオフショア(中国)で作られたFlashコンテンツでYoutube動画を再生させていた(?)が表示できなくなったので見て欲しい、と頼まれたことです。
コンテンツはActionScript 2で作られているとのことでした。

AS2で作られているコンテンツは、オフショアだろうが他人が作ったものの修正・変更は困難を極めることが多いのでお断りしたいところだったのですが、色々な経緯がありお引き受けすることにしました。

「セキュリティ Sandbox 違反」が原因


原因はすぐ分かりました。
Youtube playerにアクセスしている箇所で「セキュリティ Sandbox 違反」が発生していました。

playerをロードするActionScript。

example_mc.loadMovie("http://youtube.googleapis.com/apiplayer?version=2");

Youtube APIの説明通りです。
YouTube ActionScript 2.0 Player API Reference

youtube.googleapis.com/apiplayer?version=2
はAPI Referenceによると“chromeless player”を指定しています。

Reference通りなのに、なぜ?

System.security.allowDomainを設定すると良いかと思ったのですが…

System.security.allowDomain("*")
example_mc.loadMovie("http://youtube.googleapis.com/apiplayer?version=2");

やはり「セキュリティ Sandbox 違反」が発生します。
Adobe ActionScript 2.0 リファレンスガイド: allowDomain (security.allowDomain メソッド)
リファレンスをよく見てみるとallowDomainは「アクセス先」に設定するものなんですね。

crossdomain.xmlが許可されていなかった

http://youtube.googleapis.com/crossdomain.xml
へアクセスしてみました。

<?xml version="1.0"?>
<!-- http://www.youtube.com/crossdomain.xml -->
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*.youtube.com" />
  <allow-access-from domain="s.ytimg.com" />
  <allow-access-from domain="*.corp.google.com" />
</cross-domain-policy>

あらyoutube.googleapis.comの記述がありません、許可されて無い様子。

ちなみにchromelessで無い通常Playerの場合。
Reference記述とは違うのですが、www.youtube.com にアクセスできます。
www.youtube.com/v/VIDEO_ID?version=2
これは同じ箇所で配布されているサンプルファイル内に記述されていました。

crossdomain.xmlは以下の感じです。

<?xml version="1.0"?>
<!-- http://www.youtube.com/crossdomain.xml -->
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
  <allow-access-from domain="*.youtube.com" />
  <allow-access-from domain="s.ytimg.com" />
</cross-domain-policy>

試しに、www.youtube.com/apiplayer?version=2 へアクセスすると youtube.googleapis.com へリダイレクトされます。

ActionScript 2なんて過去の遺産ですし、API提供側もまともに対応したく無いのは分かる気もします。
もともとは、ActionScript 2 + chromeless でも再生可能だったのでしょう。
FlashPlayer のバージョンアップに伴うセキュリティ対応への変更や、Youtubeの仕様変更などが”crossdomain.xml”に反映されず放置されているのかもです。

通常Playerに変えて対応しました。
セキュリティ警告は相変わらず消えないのですが、再生はできるようです。

ここらは、教えて偉い人、って感じです。

1件のコメント

  1. youtubeのas2は、httpsプロトコルを使用しているので、httpからのアクセスでは、セキュリティ警告が出ます。

コメントを残す