体調を崩して寝てた。
先週からずっと怠くて仕方ねーなと思ってたが、仕事始まって早々休むのもどうかと頑張って出社してた。しかし金曜帰ってきてこりゃもうだめだなと思ったので土曜日はずっとピアキャス見ながらゴロゴロしてた。 日曜は起きて作業してみたがやっぱりしんどくなって午後はピアキャス見ながらごろごろしてたら寝てた。 月曜はさすがによくなったろうと食う物もなかったので買い物に行ってみたが、まだちょっとしんどい。本読んでごろごろしてたらやたらと眠くなったので寝た。 火曜は起きて怠さはないが関節が微妙に痛い。熱は無いものの、頑張って仕事行っても進まないようでは意味もないのでおとなしく休みにしておいた。先週の進捗を考えると先週の段階でさっさと休むべきだった。 水曜は概ね元気ぽいので出社。肩が痛い気もするが寝過ぎのせいもあるだろう。仕事もやることいっぱいあるのでさっさと進めたいものだ。
毎日元気に使っているARROWS Tabの背面にヒビが入ってるのを発見してしまった。縦持ちで下端を持って使ってるから上が重く、そのせいで反ってヒビ入ったものと思われる。動作には問題なさそうなんだけどこいつ防水なんだよな……。風呂で使ってることもたまによくあるんだがヒビ入ってても大丈夫だろうか、っつーかたぶんやばいよな。しかし修理に出すとなるとその間こいつが無いのは困るし、うーんどうしたものか……。
Flash PlayerでのRTMP視聴が全然上手くいかなくて困ってた。
RTMPサーバをいろいろ教えてもらって、rtmpliteっつーPython製のやつがコンパクトで読み易そうなので試してみると、こいつでは上手く動いてくれる。しかしソースを見ると特別何かそてるってことはないな。
いろいろとrtmpliteに合わせてやってみるがもはやhandshake以外は同じパケットを同じタイミングで送るだけになってるのに俺のサーバだけで再生してくれない!なんでだ!
じゃあhandshakeしか無いわけですが、rtmpliteは確かになんだか複雑なhandshakeをやっている。でもこっちは仕様書通りにやってるし、そもそも他の通信はできてるわけで、handshakeが上手くいかないならそこまで行かなくね?というところで見ないことにしてた。 しかしもう他の部分はいっしょになってるけど上手く動かないわけで、もうここに手をつけるしかないな。
rtmpliteのhandshakeコードはやたらと詰まってて何が書いてあるかよくわからん。 Red5のソースを見ると比較的わかりやすそうだけど、今度は定数とかあちこちにちらばってて探すのがつらい。 librtmpのやつが一番わかりやすかったのでこれを参考にすることとした。
途中でこのあたりなんか文書になってないか探してみたら詳しくはないがRTMPのhandshakeについて書かれてるのが見つかった。RTMP1.0の仕様書はクソ古いのでこの通りやるとH.264のストリームを再生してくれませんとのこと。こいつじゃん! 新しいhandshakeに関しては概要だけで詳しくは書かれてなかったのでやはり既存のソースを参考にするしかないようだ。
暗号化あたりを使わないので見なかったこととすると、基本的にはSHA256と組み込みの鍵で署名して返すだけのようだ。 ただ、なぜか署名格納位置が2パターンあってそれぞれ対応しなきゃいけないのがめんどい。 いくらか間違ったり、署名格納位置の違いを対応してなかったりていうのを修正してみたら動いた。そしてビデオも再生してくれた!やったー!
handshakeの仕様をしれっと変更してるのに仕様書には全く書かれておらず、それでも上手く動くように見せかけて一部のコーデックだけ何も言わずに再生しないとか完全に嫌がらせですね。まあ実際Macromediaの稚拙な嫌がらせなんだろうけど。 しかしこれ新しいhandshakeの方法とか誰がどうやって解析したんだろう。アルゴリズムもそう簡単にわかりそうな感じしないし、それはまだしも鍵の値って逆算ほぼ不可能だよな。おそらくFlash Playerをリバースエンジニアリングなんだろうけど、いいんだろうか。いや俺がやったわけじゃないしありがたく使わせてもらいますけどねー。