まず、ことの発端は
大きなFLVファイルをサーバに置いたら、ものすごい負荷で参ったwww
てな事があって、
ならば、FLVPlaybackコンポーネントが表示される画面を閉じても裏でプログレッシブダウンロードが走ってるから、画面を閉じるたびに、きちんとNetStreamを閉じて、なるべく負荷がかからないようにしよう。
と考えたからなわけです。
そこで利用するのが「closeVideoPlayer()」メソッドです。
closeVideoPlayer()メソッドは、引数として渡されたindexのNetStream を閉じ、ビデオプレーヤーを削除します。
ここでいうビデオプレーヤーとは、FLVPlaybackコンポーネント自身ではなく、なんというか、FLVPlaybackコンポーネントに指定されている、プロセスみたいなもの?
僕はなんとなくこんな感じで理解してます。
さて、
■閉じたビデオプレーヤーがアクティブまたは可視のビデオプレーヤーである場合は、アクティブまたは可視のビデオプレーヤーを FLVPlayback インスタンスでデフォルトプレーヤーに設定します (インデックス 0)。
■デフォルトプレーヤーを閉じることはできません。閉じようとすると、エラーがスローされます。
とあるので、簡単な話、indexの値が0だと、closeVideoPlayer()メソッドを使えません。
なので、activeVideoPlayerIndexパラメータとvisibleVideoPlayerIndexを適当な数値にします。
仮に、movieという名前のFLVPlaybackコンポーネントが配置されているとして
例えばビデオ再生用の小窓をFlashのStageに表示させる場合に
movie.activeVideoPlayerIndex = 1;
movie.visibleVideoPlayerIndex = 1;
movie.source = "flvファイルへのパス";
movie.play();
と、予め再生する処理で上記の様に記述することで、この小窓を閉じる(非表示にしたり、removeChild()する)再に
movie.closeVideoPlayer(1);
上記の様に記述して、ネットコネクションを切ることが出来ます。
例えば、こんなソフトでネットワークを監視してみると、明らかに負荷が軽減されているのが分かります。
まぁ結局あまりたいした効果が出ずに、rtmpが使えるストリーミングサーバを借りたんですがねww



NoBodyさん。こんにちわ。
Flashプログラマのmatsuyamaと申します。
Flashのプログレッシブダウンロードに関する調査中にNoBodyさんのこのブログを拝見させていただきました。一つ質問があるのですが、もしお時間ありましたら教えていただきたいことがあります。
上記のブログに、「FLVPlaybackコンポーネントが表示される画面を閉じても裏でプログレッシブダウンロードが走ってる」と記述されていますので、自分でその動作を再現させようとネットワークを監視しながら作業をすすめているのですが、裏で走っている確証がもてません。
FireFox(3.5.5),IE(8.0.6001.18865),Chrome(3.0.195.37)でそれぞれプログレッシブダウンロード途中でブラウザを閉じる等の動作を行ったのですが正常にネットワーク監視ではダウンロードが停止されています。
FlashPlayerのバージョンの違いなのかなぁと勝手に思っています。
NoBodyさんが上記状態が発生した際のFlashPlayerのバージョンがもし分かるようでしたら教えていただけると嬉しいです。
駄文で申し訳ございません。
お返事いただけると嬉しいです。
以上です。
>matsuyamaさん
これは僕の書き方があんまり良くなかったですね。
>「FLVPlaybackコンポーネントが表示される画面を閉じても
正確には、FLVPlaybackコンポーネントが表示されていて(NCManagerクラスで通信してる場合も含む・・・のかな?)
かつプログレッシブダウンロード中のDisplayObjectがあった場合、そのDisplayObjectをremoveChildして、消した気になっていても、メモリ上にはインスタンスが残っている状態で、なおかつダウンロードのプロセスも動作してるという内容です。
「画面」と書いたのがいけなかったですね。混乱させてしまって申し訳ない。
>ブラウザを閉じる等の動作
ですので、該当するswfファイルを表示しているプロセス自体を閉じれば、もちろんダウンロードのプロセスも消えます。