2008-09-18
NetStreamの停止の仕方にまつわる物語。
悪夢の始まりの巻
以下の文章はあくまで試行錯誤の結果見つけたものであり、正式に追試をしたわけではありません。なので他の部分の要因が現象を招いているだけで、事実と違うことを言っているかもしれませんので、あしからず。
僕は今テレビ会議システムを作っています。こっちの画面(mc_a)からあっちの画面(mc_b)へ、あっちの画面(b)からそっちの画面(mc_c)へと、その人の映像がピョンピョン動き回ります。
そのための処理は簡単です。
(MCにnetstreamを突っ込んでます。)
そのためのコーディングとしても簡単です。
- mc_a netstream.play(false);
- mc_b netstrema.play(false);
- mc_b netstrema.play(画像ID番号);
ちなみになぜ停止がplay(false)かというと、http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/net/NetStream.htmlのplayの項目でも見てみてください。
といいつつも、このplay(false)、止まりやしない。1の処理でaの画面は停止しなければいけません。でも再生されっぱなし。aとbにおなじ映像が流れ続けます。これはまずい。
暗雲のcloseの巻
という事で上記マニュアルにある、closeを利用するようにしました。(最初っからこっちつかえよって話はなしで。他の文献で推奨だったんですもん。)closeにしてもコーディングが簡単です。
- mc_a netstream.close();
- mc_b netstream.close();
- mc_b netstream.play(画像ID番号);
OK、ちゃんと映像が停止します。しかし、ココからが悪夢の始まり。動作が少しのろくなりました。映像の切替がもたつく。しかもplayしても再生されない事象が発生し始めました。
複数端末で同時に上記処理が流れるのですが、他の端末はplayで正常に映像が流れても、別の端末では音声のみ流れる。しばらく待つと、詰まりが解消されたかのように早送りで再生された後、正常なスピードで映像が流れ始めます。
悲しみの試行錯誤の巻
わけわかんねー。で、ココからは理由とか一切なし。こうやったらこうなりました。の連続なのであしからず。
とりあえず1の処理をコメントアウトしました。そしたら、正常に動く。?????。
mc_bからmc_aののnetstreamを閉じるようにしてみました。様は「これってタイミングのバグじゃね?」っていうのを回避するため。わかりにくいですよねー
- mc_b mc_a.netstream.close(); ← ここが変わった。
- mc_b netstream.close();
- mc_b netstream.play(画像ID番号);
結果はおんなじ。ダメ。映像がもたつきます。
終章 ハッピーエンド
じゃあ!ということでもうnetstream自体の生成・削除をしよう!ということになりました。
- mc_a netstream = null;
- mc_b netstream = null;
- mc_b netstream = new netstream(nc); video.attachVideo(netStream); netstream.play(画像ID番号);
オッッッッッッッッッッッッッッケイ!
あとがき
これはまったくの勘なのですが、多分close処理は遅いのだと思います。playも。netstreamに限らず、FMS周辺のオブジェクト(NetConection, SharedObject)は共有している皆にイベントを等しく発行させます。重そうですよね。ですので連続して発行しまくると今回のような不具合が出るのかもしれません。
2008-07-24
こ・れ・は・す・ご・い
http://tech.kayac.com/archive/easy-flash-remoting-with-catalyst.html
昔serverからのプッシュ機能が使いたいが為にWowzaを使おうとしてた遊びプロジェクトがあった。
こんなにも簡単に使えるなんて。Open化ってすばらしい。早くRTMPもオープンにならないかな。
嗚呼、、ハマりました。javacでのjar指定。
java |
linuxにも慣れてきた最近、詳しい方の協力を借りつつ、classpathの指定なんて、お手の物です。
cd /root vi .bash_profile 編集 source .bash_profile
実はsourceというコマンド初めて知りましたけどね。
http://x68000.q-e-d.net/~68user/unix/pickup?source source hoge とするのは、ファイル hoge に書かれた文字列を一つずつ自分の手でタイプしたのと同じことである。
だって。ふーん。まぁココまではいいのですが、これから鬼嵌りりました。
mail.jarだのlog4j.jar等を格納しているディレクトリにclasspathで指定しているにもかかわらず、mail.jarの中身を参照しているオブジェクトが無いと言い腐る。違うよ!ちゃんと指定しているよ!で、社長に聞いてみるとあっさり解決。俺の1日間くらいは無駄に終わりました。
クラスパスの設定は、JDK ツールに -classpath オプションを付ける方法 (この方法が望ましい) か、CLASSPATH 環境変数を設定する方法により行います。 % jdkTool -classpath path1:path2... % setenv CLASSPATH path1:path2... 各 path の末尾は、ファイル名かディレクトリのどちらかで、これはクラスパスを設定する対象によって異なります。 ・.class ファイルを含む .zip または .jar ファイルの場合、パスは .zip または .jar ファイルの名前で終わります。 ・名前のないパッケージ内の .class ファイルの場合、パスは .class ファイルを含むディレクトリ名で終わります。 ・名前付きのパッケージ内の .class ファイルの場合、パスはルートパッケージ (絶対パスで指定されたパッケージ名の先頭パッケージ) を含むディレクトリ名で終わります。 複数のエントリがある場合は、コロンで区切ります。jdkTool には、java、javac、javadoc などを指定できます。JDK ツールの一覧は、「JDK ツール」 を参照してください。
これで解決できそうです。
すげっ!!! 昨日の女に潮 吹 かされた!!!!!
イった後もキトー攻めされたら急に力入んなくんなって頭真っ白になってさぁ、
したら凄ぇ勢いで透明の液がチソコからブシャー!って出てマジ焦ったよww
女が潮 吹 くのは当然として、男が潮 吹 くなんて思わなかったわぁwwwww
頭がブッ飛ぶぐらい気持ちいいからやってもらってみー??
http://shiofuki.navi-y.net/hp6vXJB/
もーさすがに3回は果てるってーー!!!(>_<)
連続じゃないだけマシだけど1 0 万の為とはいえ3回ヤるとティ ンコさんが火を噴きそうなくらい真っ赤っ赤だよ(^^;
まー何気に足 コ キしてもらったのって初めてだし、得っちゃ得だけどねーwww
http://kachi.strowcrue.net/HA8PbmB/