Ustreamアーカイブ同期ビューア その後

第一回ももクロ ハッカソン に参加してustアーカイブビューア的なものをつくった - すぎゃーんメモ の続き。
@さんに命名いただき、"momocloop"という名前にしました。
http://momoclo.no.de/
最初の段階では最大5〜10秒くらいのタイムラグが出てしまっていたのをなんとか解消すべく、色々と策を弄してみた。
「サーバ側でどの動画のどの位置を再生するかを持ち、APIから取得する」という仕組みは変えず、Player(Flash)側で「現在 開始何秒のところを再生しているか(再生中の動画の何%の位置にいるか)」を取れるので、それを定期的(現在は2秒ごと)にブラウザJavaScriptにExternalInterface経由で通知する仕組みを追加。これでJavaScriptでは「サーバ側から取得した"いま再生されているべき位置"」と「Flashから通知される"いま再生されている位置"」を両方得ることができるので、タイムラグを計算できる。±1秒以上ずれているのを検出した際には再度APIから理想の位置を取得しseekし直す、という処理を入れてみた。
同期のためのラグ調整 · sugyan/momocloop@1b77fcc · GitHub
これで、理論上 再生時間のずれは2秒以内に収まる…はず。手元の環境で計測してみているかんじでは、(計算とか測定の仕方が間違っていなければ)結構普通に数百msくらいは自然にずれていってしまうようだったので、これ以上精度を高めるのは無理そうな気がする。あまりseekによる調整の頻度を上げると今度は逆に再生がよく止まりガクガクになってしまうので、ある程度のところで諦めるのが良さそう。ネットワーク環境によっても大きく変わりそうな気がするし…