• 締切済み

プログレスバー

flashvideoについてなのですが、 外部のflvファイルをよみこむときに、プログレスバーを表示させたいのですが、ステージ上でのローディングバーの使い方は分かるのですが、外部ファイルしかもflvとなると、かなり難しくて困っております。どなたか、教えていただけませんか?

  • Flash
  • 回答数1
  • ありがとう数2

みんなの回答

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

読み込み済み容量と総容量は、NetStream クラスの bytesLoaded と bytesTotal プロパティに保存されています。 完了率の算出方法やプログレスバーの作り方は swf ファイルに付ける時と全く同じで、要するに情報を得るために見るものが違うだけです。 FLV のプリロードを作る時の問題は、100 %読み込まれるまで動画を止めておき、読み込みの完了を待って再生し始める処理だと思います。 手ヌキでいくなら、読み込みが完了するまで動画を非表示・音声を消音(ミュート)にしておいて、100 %読み込まれた時には画面を表示・音を出して先頭から再生することで、いわゆるプリロードを実現できます。 非表示にしておくと画面が見えないだけの話で、読み込み中にもわずかながら再生処理が行われています。 この処理が少しでも惜しいと思うのなら、イベントを利用してまず pause で止め、全体が読み込まれたら pause を解除するといった方法もあります。 ----------------------------------------------------------------- ステージにビデオシンボルのインスタンス” flv_view ”とプログレスバーのムービークリップ” prog_bar ”があるとします。 プリロードの作り方は様々な方法がありますが、今回はフレームアクションで作ります。 フレームアクションは再生ヘッドがフレームに来た時1度しか実行されないので、前のフレームとの間をループしながら繰り返し実行されるようにします。 ですから、フレームの構成は  フレーム1:初期設定と動画の読み込みなど。  フレーム2:読み込み完了を待つフレーム。スクリプトはなし。  フレーム3:完了率の算出と読み込み完了後の処理。 このようになります。 ビデオインスタンスとプログレスバーは、フレーム1から3まで配置してください。 スクリプトは、大体、次のようになります。 このスクリプトはメインのタイムラインに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  ●フレーム1のスクリプト  //ローカル接続を確立  connect_obj = new NetConnection();  connect_obj.connect( null );  //ストリーミングの準備  stream_obj = new NetStream( connect_obj );  flv_view.attachVideo( stream_obj );  //ストリーミングの状況を監視  stream_obj.onStatus = function( info:Object )  {   switch( info.code )   {    //読み込みが完了するまでは再生しない    case 'NetStream.Play.Start':     if( _root.per < 100 )     {      stream_obj.pause( true );     }     break;    //再生が終了した時:オーディオ用のダミーMCを削除    case 'NetStream.Play.Stop':     removeMovieClip( _root.flv_audio );     break;    default:     break;   }  };  //動画の読み込み  stream_obj.setBufferTime( 5 );  stream_obj.play( "***.flv" );  //最初は非表示にしておく  flv_view._visible = false;  //オーディオ制御用のオブジェクトを作成  _root.createEmptyMovieClip( "flv_audio" , 0 );  flv_audio.attachAudio( stream_obj );  flv_snd = new Sound( flv_audio );  //音を出さないようにしておく  flv_snd.setVolume( 0 );  //読み込み完了率を保持  loaded = 0;  total = 0;  per = 0;  ●フレーム3のスクリプト  //読み込み完了率を算出  if( stream_obj.bytesLoaded != 0 )  {   loaded = stream_obj.bytesLoaded;   total = stream_obj.bytesTotal;   per = Math.floor( loaded / total * 100 );  }  //読み込み完了を待つ  if( per < 100 )  {   prog_bar._xscale = per;   gotoAndPlay( _currentframe - 1 );  }  else  {   //画面を表示し、消音を解除   flv_view._visible = true;   flv_snd.setVolume( 100 );   //先頭に巻き戻して再生   stream_obj.seek( 0 );   stream_obj.pause( false );   //プログレスバーを消す   prog_bar._visible = false;   stop();  } ***************************** ビデオインスタンスには、ムービークリップと同様に _visible プロパティがあります。 true で表示、false で非表示となります。 今回は一旦 false にして非表示にし、100 %読み込まれた時に true に書き換えています。 NetStream で外部 FLV を再生している時は、onStatus イベントハンドラに処理を定義しておくと、再生中に何か起こるたびにこの処理が呼び出されます。 呼び出される関数では、”何が起こったのか”を表す情報を受け取ることができます。 情報が2つあるので Object 型の変数にまとめて渡されてきます。 この2つとは code と level ですが、code に入っているメッセージで何が起こったのかを把握できます。 code には、再生が始まった時に” NetStream.Play.Start ”、再生が終了した時に” NetStream.Play.Stop ”という文字列が入っています。 上記のスクリプトではこのメッセージを判別して、再生開始時に pause メソッドで一旦停止させ、再生終了時に後始末(オーディオ制御用のオブジェクトを削除)を行っています。 読み込み中に多少の再生処理が行われても構わないのなら、一時停止の部分は省略することもできます。 ***************************** FLV ファイルに入っている音声は何もしなくても映像とともに再生されますが、ムービークリップを作って関連付けることでボリュームのコントロールなどが可能になります。 まず、ダミーのムービークリップを作ります。シンボルで作ってもいいのですが、今回は createEmptyMovieClip メソッドで絵のない空っぽのムービークリップ(上記のスクリプトでは” flv_audio ”)を作っています。 できたムービークリップを、attachAudio メソッドで動画と関連付けます。 更に、このムービークリップの音を管理する Sound クラスのオブジェクト(上記のスクリプトでは” flv_snd ”)を作ります。 この Sound オブジェクトのメソッドで、ボリューム等の制御を行います。 上記のスクリプトでは一旦 setVolume メソッドでボリュームを絞り、読み込み終了後にフルボリュームに戻すことで、読み込まるまでは音が出ないようにしています。 FLV に音声が含まれていない場合は、オーディオに関するスクリプトは省略しても構いません。 ***************************** フレーム3では、前のフレーム2の間をループさせることでスクリプトを繰り返し実行させます。 進捗状況の表示は NetStream クラスの bytes***プロパティを見て読み込みの完了率を算出し、プログレスバーを伸長させます。 これは、いわゆるプログレスバーの作り方と同じです。 100 %読み込まれたと判断された時には、ビデオインスタンスを表示( _visible プロパティを true )・先頭まで巻き戻し・ボリュームを戻す・プログレスバーを非表示にするといった処理を行っています。 あまり難しい部分はないと思いますが、見慣れない部分は seek とpauseでしょうか。 seek( 0 ) で、FLV ファイルの先頭に再生ヘッドが移動します。 再生開始時に pause で一時停止状態にしていますので、続けてこれを解除してください。 一時停止の処理を省略した時は、この pause も省略できます。 ローカルディスクにある FLV ファイルでは、ダウンロードされる様子が確認できません。 FLV ファイルをサーバーにアップし、ネット経由で動作をチェックしてみてください。 プログレッシブダウンロード(サーバーとの連携によるストリーミング再生ではなく、単純に外部から読み込む方法)で読み込まれた FLV ファイルはブラウザのキャッシュに保存され、2度目以降はバーが伸びずいきなり再生が始まることがあります。 再度動作を検証する時は、キャッシュの中から FLV ファイルを削除してください。

関連するQ&A

  • プログレスバーに似たコントロールについて。

    プログラムの進歩状況をプログレスバーをつかっていますが、フロッピーにファイルを保存したり、ソフトウェアをインストールしたりするときに表示される、”プログレスバーもどき”のコントロールはどうしたら入手できますか? 素人には無理でもかまいません。 どなたか教えてくださいませんか?

  • プログレスバー

    プログレスバーの進み具合ですが、スキャン実行後1時間ぐらいでほとんど(99%)進みましたがそれからが8時間たってもファイルをチェックしています。プログレスバーはどういう仕様で進んでいるのですか? ※OKWAVEより補足:「ESETセキュリティ ソフトウェア シリーズ」についての質問です。

  • プログレスバーの再描画について

    現在,画像データの変換ソフトを作っており,変換計算中に,変換されたファイルの経過状態を示すためにプログレスバーをつけております. プログレスバーは,経過状態に合わせて正常に動作するのですが,別のウィンドウ等に切り替えたりした時にプログレスバーの動作が止まってしまい,変換が終了したときにプログレスバーの終了状態だけが表示されてしまいます. そこで,質問なのですが,どのようにしたらウィンドウを切り替えたときなどにもプログレスバーが再描画されるでしょうか? 現在,変換計算とプログレスバーを別スレッドにはしていないのですがそれが原因なのでしょうか. 現在の環境はWindowsXP VisualC++6.0です. ご教授お願いいたします.

  • プログレスバーについて

    お世話になっています。初心者VBプログラマーです。 5MB~10MBのファイルをコピーをするプログラムを作成しているのですが、やはりコピーには時間がかかるのでプログレスバーを作成することになりました。 ひとつのファイルをコピー中例えば、10MB中○○%コピー出来たかと、プログレスバーで表現できますか? DoEventsを利用するのでしょうか? 詳細サイトがありましたら教えてください。

  • プログレスバーについて

    プログレスバーについて .NET C#で開発をしています。 初心者です。 オラクルからデータを取得し、SPREADに表示させるまでの 待機時間に、現状は砂時計を表示させているのですが、そこを プログレスバーにしたいと思っているのですが、 使った事がありません。 ネットで探しても難しく書かれていたりして今一理解出来ません でした。どなたかご親切な方に簡単なサンプルコードを ご教授頂けませんでしょうか。 宜しくお願い致します。

  • C#でプログレスバーを作るには?

    C#でプログレスバーを作るにはどうしたらいいのでしょうか? 例えばいくつものファイルをコピーする処理をしているプログラムがあるとします。 そういったときプログレスバーをどうカウントアップさせていけばよいのでしょうか?

  • FORTRAN でプログレスバーを作る

    FORTRAN でプログレスバーを作るやりかたってありますか? ある繰り返しのループがあって,画面にプログレスバーを表示させていんです. FORTRANでこういうのってできます?

  • 探しています~プログレスバーのまき戻しについて

    何か処理中のものがあり、進捗状態がプログレスバーに表示されているのですが、キャンセルボタンを押すとその処理を中断できて、それまで進んでいたプログレスバーの進捗が徐々に減っていき、最終的にゼロに戻るという仕組みの画面というか、UIを探しています。 ソフトのインストールとかファイルのコピーとか色々探しているのですがなかなか見つかりません。 似たような動作をするプログラムを作りたいので参考にしたいのですが・・・。 どなたか知っている方がいれば教えてください!

  • 外部写真データが既にサイトキャッシュされている場合に、プログレスバーを

    外部写真データが既にサイトキャッシュされている場合に、プログレスバーを表示させない 1ページに100枚ぐらいある写真を1フレームごとに1枚ずつ表示しています。 枚数がおおいので外部からファイルを読み込んでページのおもさを分散しています。 写真の読み込みが始まったらプログレスバーを表示しているのですが、 一度読み込まれるとキャシュされて次からは一瞬だけプログレスバーが表示されます。 キャシュがある時はプログレスバーを表示しないようにするにはどのようにすればいいのでしょうか? win7 AS2.0 CS4です。 var mcLoader:MovieClipLoader = new MovieClipLoader(); var listenerObject:Object = new Object(); listenerObject.onLoadProgress = function(mc, lb, tb) { num.text=Math.floor(lb/tb*100); } よろしくお願いします。

    • ベストアンサー
    • Flash
  • Firefoxのプログレスバーについて

    現在、Firefox1.5を使用していますが、以前1.07を使用していたとき、プログレスバーがアドレスバーに表示されるテーマがありました。 それを気に入っているですが、他のテーマでもプログレスバーをアドレスバーに表示させることは可能でしょうか?