kumaryu日記
2011-09-15
_ 日記
半月も日記放置してました。いや半月は放置してないな。作業してました。
OpenTK使ってIronRubyでOpenGLいじってなにやらやってます。OpenTK以外はPureRubyなのですっごい遅いんだけど気にしない方向で。CRubyで拡張ライブラリビルドするのには飽きたんで.NETとかJavaがいいしPureRubyがいいよねー。
SIGGRAPH ASIAに行くかどうかそろそろ決めないといけないんだが12月に一週間休むとか仕事のスケジュール的に無理っぽい気がしてきた。丁度忙しい時期だ。うーん無理かな?無理だろ……。
_ PeerCastStation日記
主にデバッグ中。
配信が上手くいかないという報告が来てて俺も上手くできなかったので修正。
俺のところではYPへの接続でエラーが出ると落ちちゃってたんだがこれはSocketExceptionをトラップしてたけどIOExceptionをトラップしてなかったせい。どの例外が飛んでくるんだかよくわからんのだよ……。
配信自体はできて直下に人はつながってるようだが、直下より下がつながらない。なんでだ。調べたら自分の直下がいっぱいの時にこっちにつないでねと別なノードを紹介するんだが、紹介したアドレスがおかしかった。なぜかローカルのアドレスを教えてやがる。しばらく悩んだがちゃんとアドレス情報を設定してるのにそれを古い情報で上書きしてから送信とか変なことやっていたのであった。古い情報で上書きしちゃだめじゃん。以前の情報のコピーを作って新しい情報を上書きしないとね。
リレーがそれなりにつながるようにはなったが、こんどは上手く配信が再生されない。ローカルで試してもだめなのでそもそもエンコーダから動画データの取得が上手くいってないようだ。動画データを受信できた時にログを出してみたがごくたまにしか受信できてない。1パケット5kバイトとかなのに3秒おきにしか受信しないのではどう考えても動画にならん。
受信スレッドがどこかで詰まってるのかと調べたがそんなこともなくますます謎は深まるばかり……。あれ、受信したデータがきっかり動画パケットの区切りじゃなければ切りのいいところまで読んであとは次に受信できるまで溜めてるはずなんだが、常に読んだデータを全部クリアしちゃってる。毎度切りのいいところまで受信できてる、なんてことはあるわけないのでこいつが原因か。結局、パケットとして成立しない分のデータを間違って読み捨てていたので、ちゃんと読み捨てないようにして見れるようになった。
これで一通り配信できるようになったようだ。wmvだけだけど。試してはないがたぶんwmaもいけるか。
あとYPに載せたチャンネル情報がちゃんと消えてくれないので調べてみる。 チャンネルを終了した時に配信してるノード情報を更新して受信中フラグを落とせばいいようだ。 YPはそれを見て誰もついてないチャンネルがあるから消すかーという感じで消してくれるみたい。 とりあえず実装はしておいたけど実際消えるかどうかは試さないとわからん。
チャンネル毎のノード情報からリレーツリーを作ってGUIに表示してたんだが、無限ループすることがあったので調べてみる。 あれ、これ同じノードが複数追加されてないか?同じIDのノードが来ても更新じゃなくて律儀に追加してるわ。 おかしいので修正。たぶんこれでループはないだろう。
チャンネルのリスナー数とリレー数がちゃんと計算できないのもきっと上記の問題と同じだろう。やたらと増減してたしな……。 そういえばYPに載せるリスナー数とリレー数がローカルの物になってたんだった。直しておかないと。
Macで動かすとGUIが一部文字化けするのを直す。ちゃんと対処できればしたかったんだがどうにも難しそうだったんで、結局OSXではフォントを無理矢理Osakaにして逃げ。fontconfigの動作か設定がおかしいんじゃないかというところまでは推測できたんだが、少なくともC#側からはどうしようもなさそうなんで。あとフォントをかえてもウィンドウのタイトルバーは文字化ける。これはもうどうしようもないだろうから諦める。
受信した中で一番新しい動画パケットを検索するところでたまに落ちるのを修正。ContentCollectionクラスが複数スレッドから読み書きされるのに何故か排他処理を忘れていたので中で普通にロックするようにしておいた。
あとGUIの不具合がちょっとあったので直しはしたが概ねこんなもんか。だいぶ使えるようにはなったなぁ。
MacでGUIがちょっと、いや、かなりよろしくないのが気になりまくるが、作りなおすのは大変なのでとても悩ましい。来週のイベントで配布するんでそれまではデバッグだけど、それが終わったらHTTPベースのインターフェースを作って、それを使ってSilverlightでGUI作っちゃおうかと思う。SilverlightだとLinuxとかが不安なんだが、まあHTTPベースでならSilverlightじゃなくてもなんとかなるでしょう。JavaScript?なにそれめんどい。