- ベストアンサー
外部FLVの制御
ステージ1のフレーム1に、約10秒の外部flvを読みんでいるのですが、もちろん、stop();でフレーム1を止めています。10秒の再生が終われば、自動的にフレーム2以降に進むには、どのようなscriptが必要なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 次のようなスクリプトを、フレーム1に追加してみてください。 (↓各行頭に全角のスペースが入っています。コピーする際は、全て半角のスペースかタブに置き換えてください) //ストリーミングの状況を監視 my_ns.onStatus = function( info:Object ) { //再生が終了した時に先に進む if( info.code == "NetStream.Play.Stop" ) { _root.play(); } }; NetStream クラスで動画を再生している時は、onStatus イベントハンドラを利用して再生中に起こる様々な状況を把握することができます。 再生中に何かが起こるたびに、onStatus = function で定義した関数が呼び出されます。 この時、呼び出される関数には”何が起きたのか”という情報がパラメータ(引数)として渡されてきます。 渡される情報は2つあるので、Object 型という汎用型の変数にまとめて渡されてきます。 その2つは code と level という名前で識別しますが、普通は code の方に入っているメッセージを見ると、何が起こったのかを具体的に知ることができます。 動画の再生が終了した時は様々なことが起こり、onStatus に登録した処理が何回か呼び出されます。 そのうちの1つに、動画の再生が終了したことを知らせる” NetStream.Play.Stop ”というメッセージがあります。 上記のスクリプトでは、onStatus に登録する関数の中でこのメッセージを判別することで再生の終了を検出し、動画の再生終了を待って先に進んでいます。 これは、FLVPlayback コンポーネントで発行される” complete ”イベントに相当します。 実はコンポーネントでも、内部ではこの onStatus を使って再生状況を監視しています。 onStatus は上記のスクリプトを見て分かる通り少々ややこしいので、難しい処理を内部に隠し、もっと単純に complete という名前のイベントとして扱えるようにしてくれているだけなのです。
その他の回答 (1)
- DPE
- ベストアンサー率85% (666/776)
FLVPlayback コンポーネントをご利用でしたら、前回 http://okwave.jp/kotaeru.php3?q=2078295 の#2でご紹介しましたスクリプトがおっしゃる動作のスクリプトですが、上手くいきませんでしたか? コンポーネントのインスタンスには名前を付けてください。 この名前がなければ始まりません。 FLVPlayback コンポーネントのインスタンスをステージに配置し、このインスタンスを選択した状態で「プロパティ」か「パラメータ」パネルを見てください。 パネルの左上の方に、<インスタンス名> と書かれている項目があります。 ここに、半角の英数字と” _ ”だけで何か名前を入力してください。(どちらのパネルで入力しても同じです) 前回 No.2078295 の#2では、ここに flv_player と付けたものとしてスクリプトを組んでいます。 それから、フレーム1に次のようなスクリプトを書きます。 (No.2078295 の#2に書いたものと同じ内容です) 見辛くてすみませんが、コピーしてそのまま使えます。 //リスナーオブジェクトを作成 obj = new Object(); //動画の再生終了後、次のフレームに進む obj.complete = function() { _root.play(); }; //リスナーオブジェクトを登録 flv_player.addEventListener( "complete" , obj ); //タイムラインを止めておく stop(); 違うインスタンス名を付けた場合は、 //リスナーオブジェクトを登録 flv_player.addEventListener( "complete" , obj ); ↑この箇所の”flv_player”の部分を、ご自分で付けた名前に変更してください。 --------------------------------------------------------------- コンポーネントを使わずに動画を再生している場合は、どのように作っているか・どんなスクリプトを書いているかなどを補足していただければ、分かる範囲内で回答いたします。 締め切りやコメントは急がなくても構いませんので、まずは試してみて、不明な点がありましたら補足してください。
補足
何度も本当にすみません。 説明不足でした。 今回の質問はですね。 コンポーネントではなくて、1フレームに外部flvを読み込むscriptを書いております。 /* あらかじめ_rootにビデオオブジェクトを配置してインスタンス名をmy_videoにします。 */ // NetConnectionオブジェクト生成 my_nc = new NetConnection(); // ローカルストリーミング接続 my_nc.connect(null); // NetSteamオブジェクト生成 my_ns = new NetStream(my_nc); // ビデオオブジェクトにストリームを割り当て my_video.attachVideo(my_ns); // バッファ設定 my_ns.setBufferTime(5); // flv読み込み・再生 my_ns.play("myflashvideo.flv"); のようなscriptです。 いつも、親切に回答していただき本当に感謝しております。
お礼
とても分かりやすく、完璧で丁寧な説明をありがとうございます。 scriptが、だんだん好きになってきました。