Ustreamアーカイブ同期ビューア その後 - すぎゃーんメモのさらに続き。
http://momoclo.no.de/
二カ所変更した。
- JS側でラグ計算と調整していたのをAS側に処理を委譲
- 同期調整方法を改良
まずサーバから取ってきた「いま再生している動画と 再生されているべき位置」をJSからFlashに送って、Flashから再生時間を定期的にもらってラグを計算、ということをしていたけど、そもそもわざわざJSでやる必要ないから一回サーバからの情報を受け取ったらその後のラグ計算とseek調整は全部AS側に任せるように変更。
https://github.com/sugyan/momocloop/blob/e371830e8bbe009595490f7d350907b6c396f2b0/as3/Player.as
で、同期の方法を、
@sugyan ラグはかなり悩みました。で #ウタダヒカループ の場合、曲と曲と間で横にニュイーンってアニメーションするじゃないですか。あれが実は0.5秒刻みで8段階くらいのモーションがあって、ラグの秒数によってその中から最適なパターンを選択して可能な限り吸収してるんですよー
2011-09-05 08:40:53 via YoruFukurou to @sugyan
- seekするときは再生されているべき場所より少し先を指定してseekする
- 遅れがひどい(400ms以上の)場合はもう一回seekしなおす
- 進みすぎていた(100ms以上の)場合は、Timerを使ってその進みすぎていた時間だけpauseする
という形にしてみた。
上記の調整を数秒おきに繰り返すと、ロードして最初の数秒は調整のために止まったりするけど、安定すると誤差が-400〜+100msの範囲に収まるので最大でも500ms程度のタイムラグで済むようになる。ネットワークの速度によってはラグが出まくって調整を繰り返してしまい使い物にならないかもしれないけど、少なくとも自分の普段つかっている環境ではだいたい大丈夫そう。しばらくこれで様子をみてみる。