デジタルテレビやレコーダーだと当たり前の機能に、放送波による時刻合わせがある。Time Offset Tableというパケットに時刻がかいてあるので、これを受信した瞬間に時計を合わせればいい、ということね。
というわけで作ってみました。グラフはNTPフィードとの比較。
.... むっちゃズレとるやんけ 。ずれた後で修正かかってるように見えるのはNTPがやっている。つまり最大1.2秒ずれてしまうということだ。
論理的に。放送局が供給を受けてる時計は原子時計(かそれに類する精度がある時計)。TOTの表記は修正ユリウス暦+時分秒。なのて+-500msくらいで合いそうなものだ。
しかし MPEGは時分割多重 というところが足をひっぱってる。アナログ時代の周波数方向での多重化では同時に届いていた情報は、ある固定のビットレート(SCRが打ってある)に均されてしまう。つまりある瞬間1秒分の音声と映像は、数百msからひょっとすると1秒以上ずれてしまうのである(放送ストリームでは主に音声が先行して入ってる)。当然、送信側にも再生側にもバッファリングが必要になる、というわけ。
また、いくらPCがマルチコアになってもプロセスにCPU時間が回ってくるまでの遅延があり、バッファが常に一定量を保つ、ということはありえない。間隔が不均等なら当然バッファ量も増減するわけで、必ずしも狙ったタイミングでパケットが処理できるとは限らない。特に 本サーバのように他の処理を沢山やらせて(^^; て、ロードアベレージ4とかなっちゃうマシンは駄目だよね。