ustream hacks #3 publish movie from your own swf!
次、配信のほう。こいつはすこしやっかいだった。
まず接続は
nc.connect("rtmp://209.85.64.39/ustvVideo/{chid}", { id: "{userid}", sessionid: "{sessionid}", mode: "broadcast", channel: "{chid}", version: "v2.131b" });
とかいう感じ。
chid, sessionidはどちらも配信ページのswfソース部分にある。useridは配信ページを開いたときに http://www.ustream.tv/service.php
とかにPOSTしててその結果に入ってる。
そんで、
ns.publish("live_channel_{chid}", "live");
すれば配信される。はずなのだけど、されない。FMSへの配信自体はうまくいっていて、#2でやった自前再生swfでは再生されるのだけど、ustreamのchannelページではoff airのままだ。
FMSのほうに配信開始用の関数がある模様。それもパケット見てたら見つけることができた。
publish後、
nc.call("channelStatus", new Responder(function ():void { }), "{chid}", "live");
とかいれたら、channelページでも見えるようになった。これでいいのかしらないけど。
ただこれだと、一定時間で接続が切られてしまう。まだなにかあるっぽい。
どうもFMS側からcallBackという名前の関数をよんできていて、それをうけてpongというFMS関数をよぶようになっているようだ。これをしないときられちゃうわけだなきっと。
ので、
nc.client = this;
とかして、thisのクラス内に
public function callBack():void {
nc.call("pong", new Responder(function ():void {}));
}
とかしたら大丈夫になった。OKOK。
これでとりあえず配信もできるようになった。
あと他に callBack()
とおなじように viewersNum(num:Number)
とか定義しておくと、接続人数がかわるたびに呼んでくれるようだ。これで今何人とか取れると。