AS2環境でyoutubeAPIを使って動画再生する方法について

このQ&Aのポイント
  • FLASH初級者のためのAS2環境でyoutubeAPIを使用して動画再生する方法について説明します。
  • クロムレスプレイヤーを利用して、SWFからSWFを読み込むことで、youtubeAPIを使用して動画再生を行います。
  • プレイヤーの読み込みは_mcl.loadClip(”http://gdata.youtube.com/apiplayer?key=DEV_KEY”,mc)という方法で行われ、プレイヤーの準備はできています。しかし、再生したい動画との関連付けの方法について困っています。
回答を見る
  • ベストアンサー

youtubeのクロムレスプレイヤーについて

FLASH初級者です。 今、AS2環境でyoutubeAPIを使って動画再生をするためにクロムレスプレイヤーを動作させようとしていますが、うまくいきません。 動作方法はHTMLに埋め込むのではなくSWFからSWFを読み込む事を考えています。 ガイドにはプレイヤーの読み込みを↓と説明しています。 _mcl.loadClip(”http://gdata.youtube.com/apiplayer?key=DEV_KEY”,mc) たしかにリスナではisPlayerLoadedにtureがかえってるようのですが、次の手順がわかりません。 つまり、プレイヤーの準備はできてるっぽいのですが再生したい動画との関連付けをどうしたらよいかわからず困っています。 今まで調べたものはSWFObjectの使用例はありましたが、あくまでsample.SWFという実行形式で動作させたいと思っています。 よろしくお願いします。

  • Flash
  • 回答数8
  • ありがとう数14

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

if (ans === true) { にしても通りますか? setIntervalが生きていないような気がしますが...

hemaniyo44
質問者

お礼

ご指摘ありがとうございます。 たしかに生きていませんでしたので、setIntervalの記述を修正 しました。 動作はしているようなのですが、trueにならずループしたままに なっています。 これは指定しているurlでパラメータが足らないとかでしょうか? よろしくお願いします。

その他の回答 (7)

回答No.8

基本的にはローカルでも動作するはずなのですが、 後はクロスドメインとかデベロッパーキーの間違いとかしか... > var dev_key:String = "DEV_KEY"; これも、「"DEV_KEY"」ではなく「DEV_KEY」ですね。

hemaniyo44
質問者

お礼

返信ありがとうございます。 devキーはコピペなので間違っていないはずなんですが・・・ 念のため、もう1つキーを作って試しましたが同じ結果でした。 クロスドメインの問題は私も認識していますが、それを解決する手段が APIと思っていました。 今回のような場合、APIで解決できない別の要因とかもあるのでしょうね・・・ 長い間、お付き合いいただきありがとうございました。

回答No.7

失礼、1299/1299となっていたので、上手く読み込んでいない物と勝手に思いこんでいました。 ところで、正規のサーバーにアップした状態での動作確認はされましたか? もしまだでしたら、一度試されては?

hemaniyo44
質問者

お礼

早速のレスありがとうございます。 正規のサーバーとは今作成しているSWFを実行する場所という意味でしょうか? もし、そうでしたらサーバではなくshumbyでの実行を考えていますがまだ実行させた事はありません。(今実機がないので・・・) ちなみに開発環境はFlashDevelop3.0/Bate9を使用しています。

回答No.6

> _mcl.addListener (this); リスナーオブジェクトをちゃんと定義した方が良いのでは? thisではonLoadProgress()も正確に動作していないような気がしますが...

hemaniyo44
質問者

お礼

お世話になります。 私は今までリスナーの呼び出し動作確認をtrace()を使用して確認していました。 例えば、ご指摘のonLoadProgressについては public function onLoadProgress(target_mc:MovieClip,loadedBytes:Number, totalBytes:Number){  if (!(Counter % 20)){    trace("Loading Now = "+ loadedBytes + "/" + totalBytes);  }  Counter ++; } とし、結果が Loading Now = 8192/16732064 Loading Now = 172032/16732064 Loading Now = 335872/16732064 ・・・ Loading Now = 16732064/16732064 となっていたので、リスナーとしては動作しているものだと考えていました。(他のリスナーの確認についても同様です。) flashの世界ではリスナーがコールされているからといって内部動作が正常動作している保障にはならないのでしょうか? (C言語の経験しかないので、その感覚で判断してしまっています。) よろしくお願いします。

回答No.5

> ret = mc.isPlayerLoaded(); retは「undefined」であるということは、mc.isPlayerLoaded()が「undefined」であるということではないでしょうか? > _mcl.loadClip("http://gdata.youtube.com/apiplayer?key=" + dev_key, "mc"); "mc" ではなくて mc では? loadClip(url: String , target: Object) 第二引数は文字列(String)ではありません。

hemaniyo44
質問者

お礼

freepacketさんいつも返信ありがとうございます。 ご指摘の"mc"->mcへ修正しましたが、結果はundefinedでした。 (サンプルソースをいろいろ見ててごっちゃになってたみたいです。) ret -> undefinedですが、これはisPlayerLoaded()というAPIそのも のがが認識できないという意味でよろしいでしょうか? ちなみにonLoadProgress()のloadedBytesとtotalBytesもみましたが、 1299/1299となっており、何かしら読み込まれているようです。

回答No.4

どのように修正されたか分かりませんが、参考URLでonLoadInitとsetIntervalの辺りを見直されては? target_mc.isPlayerLoadedではなくて、 target_mc.isPlayerLoaded()だったりしますから...

参考URL:
http://code.google.com/intl/ja/apis/youtube/flash_api_reference.html
hemaniyo44
質問者

お礼

res遅くなりました。すみません。 修正コードは以下のとおりです。 checkPlayerReady()は設定周期でコールされていますが、retはtrueに なりません。 checkPlayerReady()内でloadIntervalは「2」(取得時も2)、 retは「undefined」であることは確認しました。 private static var loadInterval:Number = 0; private static var mc:MovieClip; private static var _mcl:MovieClipLoader; public function YoutubeAPI_test(){ var dev_key:String = "DEV_KEY"; _mcl = new MovieClipLoader(); mc = _root.createEmptyMovieClip("mc", _root.getNextHighestDepth()); _mcl.addListener (this); _mcl.loadClip("http://gdata.youtube.com/apiplayer?key=" + dev_key, "mc"); } public function onLoadInit(target_mc:MovieClip){ loadInterval = setInterval(checkPlayerReady, 1000); } public function onLoadError(target_mc:MovieClip,errorCode:String, httpStatus:Number){} public function onLoadProgress(target_mc:MovieClip,loadedBytes:Number, totalBytes:Number) {} public function checkPlayerReady(){ var video_key:String = "VIDEO_KEY"; var ret:Boolean = false; ret = mc.isPlayerLoaded(); if (ret == true){ clearInterval(loadInterval); mc.loadVideoById(video_key, 0); } }

回答No.2

target_mc.loadVideoById(video_key, 250); 公式リファレンスより loadVideoById(videoId:String, startSeconds:Number):Void 指定された動画を読み込み、その動画の再生を開始します。 startSeconds (浮動小数点数も指定可) を指定すると、指定した時間に最も近いキーフレームから再生が開始されます。 いきなり250秒からスタート? そこまで読み込めていないのでは? 0にしてみては?

hemaniyo44
質問者

お礼

ご指摘ありがとうございます。 いろいろ試していましたので、変な数値がはいっていました。 しかしながら0に設定しても結果は同じでした。

回答No.1

isPlayerLoadedがtrueになったら、 _mcl.loadVideoById(videoId, 0); としたら良いのではないでしょうか?

参考URL:
http://code.google.com/intl/ja/apis/youtube/chromeless_player_reference.html#loadVideoById
hemaniyo44
質問者

お礼

早速の返信ありがとうございます。 たしかにそのAPIは試してみましたが、やっぱりうまくいきません。 ちょっと稚拙で申し訳ないのですがいまのコードを整理しいました。 if (ans)まではとおりますが、その後の再生でどうもつまずいているようです。 よろしくお願いします。 public function YoutubeAPI_test(){  var _mcl:MovieClipLoader = new MovieClipLoader();  var _mclListener:Object = new Object();  var loadInterval:Number = 0;  var ans:Boolean = false;  var Counter:Number = 0;  var dev_key:String = DEV_KEY;  var video_key:String = VIDEO_KEY;    _root.createEmptyMovieClip("mc", 1);  _mclListener.onLoadInit = function(target_mc:MovieClip) {   loadInterval = setInterval(ans = target_mc.isPlayerLoaded, 250);     if (ans){       clearInterval(loadInterval);       target_mc.loadVideoById(video_key, 250);     }  }    _mclListener.onLoadStart = function (target_mc:MovieClip){};  _mclListener.onLoadError = function(target_mc:MovieClip, errorCode:String, httpStatus:Number){}  _mcl.addListener (_mclListener);  _mcl.loadClip("http://gdata.youtube.com/apiplayer?key=" + dev_key,"mc"); }

関連するQ&A

  • Now Loading中に背景が出てこない

    最近質問ばかりですいません。 Flashでホームページを作成しているのですが、 Now Loading中何%読み込まれたかの数字は出てくるのですが 背景のムービークリップが出てきません。 何が悪いのでしょうか? よろしくお願いします。 ちなみにスクリプトは下記の通りです。 背景は、loader_mc ←外部ムービを読み込むムービークリップと背景のムービークリップは同じです。 ▼スクリプト▼ //-- リスナーオブジェクトを生成する myListener = new Object(); //-- ロード中にする仕事 myListener.onLoadProgress = function(target_mc, loadedBytes, totalBytes) { //-- 何%読み込まれたかを表示する per_txt.text = Math.floor(loadedBytes/totalBytes*100)+"%"; }; //-- ロードが完了したらする仕事 myListener.onLoadComplete = function() { nextFrame(); }; //-- MovieClipLoaderを生成する my_mcl = new MovieClipLoader(); //-- MovieClipLoaderにリスナーを登録する my_mcl.addListener(myListener); //-- MovieClipLoaderを使って外部のムービーをloader_mcに読み込む my_mcl.loadClip("swf/joli_home 5.swf", loader_mc); //-- stop();

  • swfobject.jsがうまく動作しない

    サイト:http://just1factory.kir.jp/dev/ 埋め込みたいSWF:http://just1factory.kir.jp/dev/fla/ImageGallery.swf swfobject.js(ver2.2)を使用してFlashデータをHTML内に埋め込むことができず真っ白になってしまいます。 Flash単体ではきちんと表示されているのに、ブラウザー上(IE6,7 Firefox Safari)ではFlashが埋め込まれる部分に正しく表示されないのです。 埋め込むべきFlashはFlash Player9.0+ActionScript3.0で制作しました。 swfobject.jsの新種のバグなのか、Flashのつくりが悪いのか… 4日以上も悩んで、解決策まったく見えずな上にウンウン考えても何にもわからないなのでどなたかご教授いただけると幸いです。

    • ベストアンサー
    • Flash
  • 【動画再生】オススメの動画再生ソフトは?【動画プレイヤー】

    GOMプレイヤーが重いので、別の動画再生ソフトに 乗り換えたいのですがオススメのソフトはありますか? 条件は、 ・MP4、SWF、FLV等の動画サイトの主流形式の動画が再生可能である事 ・GOMプレイヤーより動作が軽い あったら良いな、という条件は ・画面端にプレイヤーが吸着する機能がある(GOMとQonohaしか私は知りません) SMPlayerは割りと動作が重めだったり、SWFが再生出来なかったりと なかなかお気に入りの動画プレイヤーに巡り合えません。 動画再生ソフトに詳しい方、助けてください。

  • youtubeをマウスを使わずに操作する方法

    タイトルの通りです。 通常youtubeプレイヤーは再生ボタンをクリックして動画を再生したりシークバーをドラッグして動画をシークさせますよね。 どの動作もマウスが必要ですが、これをマウス以外の方法でできるか、というのが今回の質問です。 例えば「スペースキーを押すと動画が自動で再生する」方法です。 一応、動画再生ページを表示する前にhtmlを解析し、「スペースキーが押されれば再生を実行する関数を呼ぶ関数」を埋め込んで動的に表示すればいけるんじゃないかな、と自分では考えています。 また、今回対象とするの他サイトの埋め込みプレイヤーではなくyoutube本サイトの動画再生ページのプレイヤーなので、youtubeのAPIは使えないと思います。 言語は特に問いませんが、できればjavascriptで書きたいです。 よろしくお願いします。

  • 外部swfファイルのscriptが動作しない・・・

    Flash8 ActionScript2.0を使用しています。 呼び出し用のswfファイルの_rootにムービークリップyomikomi_mcを配置していて mcLoader.loadClip("test.swf", yomikomi_mc); をを使ってtest.swfを読み込みました。 すると読み込んだtest.swfに書かれているスクリプトがうまく作動しません。 すべて動かないというわけではなく… ムービークリップにonReleaseのアクションが動作しなかったりです。 ボタンインスタンスのonReleaseはちゃんと動作しているようです。 これは何が原因なのでしょうか? mcListener.onLoadStart mcListener.onLoadInit などを使って正しく読み込まれているかチェックしたのですが読み込みは恐らく完了しているように思うのですが… (初めての試みなので自信はないのですが…) test.swfのみを開いた時にはうまく動作するので読み込んだ事が原因で起こっているエラーだと思うのですが…。 読み込み用のswfファイルはそのままではいけないとか読み込み専用の書き方があるとかいったことはあるのでしょうか? 原因がつかめず困っています。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ブラウザ取得毎にMCをランダム再生させる方法

    はじめまして。flash初心者のものです。 ブラウザを再取得する度に、再生されるMCが変わる(ランダム再生)様なバナーを作成したいです。考えている方法としては、『1つのswfの中に10個のMCを入れて、それぞれをランダムで再生させる』という事で良いと思っています。10個の外部swfファイルをランダムに読み込ませる方法は色々参考資料があるのですが、サーバーの都合で出来れば1つのswfファイルの中に収めたいのです。 現在、1つのswfファイルの中に、clip1~clip10まで作成してあり、それぞれ200フレームの長さのMCになっています。それぞれclip単体では正常に動作しているので、あとはこれをランダムに再生させたいのですが、どういったActionScriptにしたら良いのでしょうか。 ソフトは『FREE MOTION』 バージョンは『Flash Player 7』になってます。

  • 外部読み込みについて

    親のSWFに子のSWFを外部読み込みさせて動作させようとしています。 子のSWFを読み込むことは問題ないのですが、子の中の動作がうまく実行できません。  「子のSWF」と言っているものは、サムネイルが並んでいて、それをクリックしたら所定の場所に写真を読み込むというものです。 「子のSWF」に関して、写真の外部読み込みは以下の方法でやっており、これだけでしたら問題なく動作します。 ============================================ var mcLoader:MovieClipLoader = new MovieClipLoader(); var listenerObject:Object = new Object(); listenerObject.onLoadStart = function(mc) { mc._visible = false; loading._visible = true; }; listenerObject.onLoadInit = function(mc) { mc._visible = true; loading._visible = false; }; mcLoader.addListener(listenerObject); loading._visible = false; _root.photo01_button.onRelease = function() { mcLoader.loadClip("04collection/photo01.jpg",photoBox); }; _root.photo02_button.onRelease = function() { mcLoader.loadClip("04collection/photo02.jpg",photoBox); }; _root.photo03_button.onRelease = function() { mcLoader.loadClip("04collection/photo03.jpg",photoBox); }; ============================================ 理想は、上記の「子のSWF」を「親のSWF」に読み込んで、サムネイルをクリックしたら狙った写真を読み込むようにしたいのですが、子だけでは問題なく動作していても、それを親に読み込んだ状態では全く機能しません。 読み込みたい写真のルートが問題とかであれば何かしら反応はありますが、サムネイルをクリックしても、全く反応がありません。 このような何重かの外部読み込みを定義することはできないのでしょうか。 環境はFlash CS3 for Winです。 どなたか問題解決の方法をご存じの方がいらっしゃいましたら宜しくお願い致します。

    • ベストアンサー
    • Flash
  • Loadingの作成

    早速ですが、ローディングバーを作成中です。 MovieClipLoaderを使用 12フレーム □□ 1フレームアクション myList = new Object(); myList.onLoadProgress = function( target_mc, lopadedBytes, totalBytes ) { trace("Now Loading."+":"+loadedBytes+"/"+totalBytes); } myList.onLoadError = function(){ trace("Loadエラー"); } myList.onLoadStart = function() { trace( "load開始" ); } myList.onLoadComplete = function() { trace( "load完了" ); nextFrame(); }; var my_mcl:MovieClipLoader = new MovieClipLoader(); my_mcl.addListener( myList ); my_mcl.loadClip( "image.jpg", this.loader_mc ); stop(); 2フレームに loader_mcを配置。 問題。 一向に動作しません。。。ファイルエラーも出なければプレビューしても動作せず。あとloader_mcのサイズが0x,0yなんですが、画像サイズに自動で取得してくれるんでしょうか?この辺り、クラスがどう動いていのか不明なので良く分かりません。 環境は、XP・FLASH8です。

  • 代替表示の出し方

    swfを設置する際の質問です。 ・フラッシュプレイヤーが入っていない場合に代替の表示を出す ・javascriptがオフになっていても、フラッシュプレイヤーが入っていればswfを再生 上記を実現させたいのですが、方法を教えていただけませんか? SWFObject v2.0を使ってやってみたのですが、 http://mtl.recruit.co.jp/blog/2007/10/swfobject_v20.html ここの説明にある1の方法だと、『クリックするとこのコントロールをアクティブにして使用します』が出てしまうようで、ユーザビリティ的には逆効果な気がします。 2の方法を取ると、javascriptがオフの場合、フラッシュプレイヤーが入っていない場合共に同じ代替の表示になってしまいます。 直接htmlにswf呼び出しの記述を書けばjavascriptがオフの時でも再生できますが、 フラッシュプレイヤーをオフにした場合、『ここをクリックするとプラグインをダウンロードできます』という部分の下に代替が出るという何とも不格好な事になってしまいます。 sonyのトップページのような感じが理想なのですが… 何かいい案はないものでしょうか?

  • QuickTimeでswfファイルが再生できません(再質問)

    QuickTime 6.52 proでFlashムービー(swf)を再生しようと思ったのですが、 「次の動作ができません。****.swfを開く。  原因:このムービーで不正なメディアデータが見つかりました。」 とエラーになってしまいます。 Media Player Classicで再生ができたのでFlash Playerのインストールはおそらくできていると思います。 どうすれば再生できるようになるでしょうか?

専門家に質問してみよう