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

Ustreamアーカイブ同期ビューア その後 - すぎゃーんメモのさらに続き。
http://momoclo.no.de/
二カ所変更した。

  • JS側でラグ計算と調整していたのをAS側に処理を委譲
  • 同期調整方法を改良

まずサーバから取ってきた「いま再生している動画と 再生されているべき位置」をJSからFlashに送って、Flashから再生時間を定期的にもらってラグを計算、ということをしていたけど、そもそもわざわざJSでやる必要ないから一回サーバからの情報を受け取ったらその後のラグ計算とseek調整は全部AS側に任せるように変更。
https://github.com/sugyan/momocloop/blob/e371830e8bbe009595490f7d350907b6c396f2b0/as3/Player.as


で、同期の方法を、

という話を訊いて、「そういえばseekって遅れてたら先を読みにいくしかないけど、進みすぎてた場合は一時停止で待つという調整方法があるなー」と思い。

  • seekするときは再生されているべき場所より少し先を指定してseekする
  • 遅れがひどい(400ms以上の)場合はもう一回seekしなおす
  • 進みすぎていた(100ms以上の)場合は、Timerを使ってその進みすぎていた時間だけpauseする

という形にしてみた。
上記の調整を数秒おきに繰り返すと、ロードして最初の数秒は調整のために止まったりするけど、安定すると誤差が-400〜+100msの範囲に収まるので最大でも500ms程度のタイムラグで済むようになる。ネットワークの速度によってはラグが出まくって調整を繰り返してしまい使い物にならないかもしれないけど、少なくとも自分の普段つかっている環境ではだいたい大丈夫そう。しばらくこれで様子をみてみる。