テレビのアニメはどこから来る? / 第89話

第89話:イトは、開始前の番組表を連打してライブに8秒遅れた|開始時刻と映像は同じ?

ピコルート第89話。番組表には開始と出ているのに映像が来ない。イトはrequestを連打したあと、番組情報、live source、playlist、segment、再生位置を分けます。

program guidescheduled startlive playlistlive edge10分更新

第88話の作品棚が閉じると、壁いっぱいの番組表が下りてきた。

現在時刻は、二十時二十九分四十二秒。

次の枠は、二十時三十分開始のlive programだ。

雲の上から夜景を映す、十分間の中継。

ユイはテレビを全画面にし、マコトは音を上げた。

イトだけが、番組表の時刻を動かすleverに手を置いている。

第88話で00:00へ動かしても始まらなかった。

なら、番組表を先へ進めればいい。

イトは現在線を、二十秒先の20:30へ押した。

番組枠がcyanに変わる。

screenは暗いままだ。

guide entry loaded     1
scheduled state        started
viewer eligible        1
live media segment     0
first frame rendered   0

「startedなのに来ない。取りに行く回数が足りないんだ」

イトはplaylist refreshを、一秒に五回へ上げた。

番組表を先へ進めても、映像は生まれない

番組表の枠は、番組名、予定時刻、説明、視聴入口を持つmetadataだ。

その枠自体が、再生できるvideo assetとは限らない。

live programでは、現地のcameraから届いた映像をencodeし、配信用の短いmedia segmentへ順にする。

playerは更新されるmedia playlistを見て、現在取得できるsegmentをrequestする。

program guide
  -> current eligibility
  -> live ingest / encoder
  -> media playlist / segment availability
  -> playback session
  -> buffer / decode / render

予定時刻を迎えても、sourceや最初のsegmentがまだ届いていなければ、screenへ出すframeはない。

反対に、segmentが出てもviewer conditionを通らなければ、そのviewerのsessionは始められない。

guideの時計とmediaの現在地は、結び付くが同じstateではない。

ユイ

番組表は始まったことになったのに、取得できるsegmentはゼロです

マコト

中継先の映像がまだ来ていないなら、こちらの時計だけ進めても増えないね

イト

ぼくは予定を、保存済みepisodeの再生位置みたいに動かしてた

Picoは答えを選ばない。

二十時三十分を指す番組表と、空のmedia railを別々に照らした。

連打が、最初のsegmentを遠ざけた

lab fixtureで許可したplaylist refresh間隔は、四秒だった。

イトは開始前の八秒間に、四十回requestした。

このfixtureは同じviewerからの過剰なrefreshを止め、次の取得を二十時三十分三十二秒まで待たせる。

全serviceが同じ回数やbackoffを使うという意味ではない。

ここで観測するのは、空のplaylistを連打しても未来のsegmentを作れず、かえって次に確認できる時刻を遅らせたことだ。

現地から最初の映像が届いたのは、二十時三十分二十秒。

最初のsegmentがplaylistへ載ったのは、二十四秒。

しかしイトたちのplayerは、まだrefreshできない。

first ingest received       20:30:20
first segment available     20:30:24
next refresh permitted      20:30:32
avoidable wait              8 seconds

screen中央の待機円だけが回る。

予定時刻を先へ動かしたイトが、liveの入口でいちばん遅れていた。

三つの始め方

二十時三十分十六秒。

あと八秒で最初のsegmentが公開されることを、イトたちはまだ知らない。

暗いscreenの前に、三枚のroute cardが開いた。

イト

A。refreshをさらに増やし、startedになるまで空のplaylistをたたく

イト

B。保存されている予告映像を、説明せずliveとしてscreenへ出す

イト

C。時計の強制と予告bypassを閉じ、許可された間隔でcurrent segmentを待つ

Aは、番組表のstartedをmedia availabilityに変えられない。

Bならすぐ映像は出るが、いま起きていることではない。

Cは暗いscreenをすぐには消せない。

遅延を隠さず、届いたものだけをliveとして扱う選択だ。

開始に間に合わせるという約束は、もう守れない。

それでもイトは、早く見せたふりをする二つのrouteへ手を伸ばさなかった。

イトがfuture clockを戻し、current segmentを開いた

イトは左手で、番組表を先へ進めるfuture-clock leverを現在位置へ戻した。

同じ手で、予告映像からscreenへ抜けるamber bypassを閉じる。

右手は、playlistに実在するcurrent segmentだけを通すcyan gateへ置いた。

イトが番組表を未来へ進めるレバーと予告映像の迂回路を閉じ、現在届いているライブ映像だけを通すゲートを開く
番組表の時刻で映像を作らず、current playlistに現れたsegmentだけを再生へ渡す。

画面には、隠さず状態を出す。

番組は開始予定時刻を過ぎています。映像を待っています。

Picoはcurrent clockと空のrailの間を照らすだけで、gateへ触れない。

イトが四秒のrefresh間隔を設定し直す。

二十時三十分三十二秒。

playerがplaylistを取り直した。

guide entry              1
viewer eligibility       1
playback session         1
available segments       2
first segment sequence   540
available sequence range 540-541
live edge time           20:30:32

最初から見るならsequence 540。

いまのlive edgeへ飛ぶなら、sequence 541の末尾へ近づく。

後者なら現在へ近づけるが、sequence 540の冒頭を飛ばす。

イトはsequence 540を選んだ。

失った八秒を、内容を捨てて取り戻さない。

画面は映った。時計は8秒ずれた

最初のsegmentがbufferへ入り、decodeされる。

雲の切れ間から街の灯りが見えた。

映像の中の時計は、二十時三十分二十四秒。

labの時計は、三十二秒。

first frame rendered       1
duplicate segment          0
preview shown as live      0
viewer playhead            20:30:24
live edge                  20:30:32
distance from live edge    8 seconds

watch partyは始まった。

けれど、八秒前のliveだ。

「ライブ」は、全員のscreenが現地と同じ瞬間を映すという意味ではない。

capture、encode、package、delivery、buffer、renderに時間がかかる。

playerが安定のために少しbufferを持つ場合もある。

遅れの大きさや作り方はservice、device、network、player policyで変わる。

このfixtureの八秒を、すべてのinternet TVへ一般化しない。

マコト

始まった。でも、僕たちは現地より八秒後ろだ

イト

連打で失った八秒を、予告や飛ばしで隠さない。今日は冒頭を残す

ユイ

成功しても、開始に遅れた結果は消えませんね

live edgeへ追いつくか、連続した映像を残すか

一分後も、viewer playheadはlive edgeの約八秒後ろにいる。

追いつく方法は一つではない。

途中を飛ばしてedgeへ移動できるplayerもあれば、再生速度を少し変えるplayerもある。

seekを許さず、一定の遅れを保つserviceもあり得る。

今回のfixtureでは、自動追従を使わない。

イトは冒頭からの連続を残し、八秒の遅れを受け入れた。

playback continuity      kept
jump to live edge        no
content skipped          0 seconds
latency residue          8 seconds

同じ「liveを見る」でも、現在へ近いことと、内容を落とさないことは別の優先だ。

遅れをゼロにする操作を、いつでも正解にしない。

見逃しは、liveの巻き戻しとは限らない

番組表の下には、catch-up pendingの小さな枠がある。

live playlistに過去のsegmentが残っている間、playerが一定範囲をseekできる場合はある。

しかし、それだけで終了後の見逃し配信が保証されるわけではない。

終了後に保存assetを作るか。

いつから、いつまで公開するか。

どのviewerへ許可するか。

live windowとは別のpolicyや処理が入る場合がある。

program ended            does not mean catch-up ready
segment buffered         does not mean archive published
guide entry exists       does not mean playable now

番組表、live中のseekable range、終了後のcatch-up assetを一つの「巻き戻し」にしない。

テレビ画面でも、放送波とは限らない

雲の中継は、internet pathを通っている。

番組表metadataも、media playlistも、segmentsもnetworkから取得した。

同じテレビには、antennaから届く放送も映る。

見た目が同じscreenでも、入口は同じとは限らない。

放送は映るのにinternet TV appだけ止まる。

guideは出るのにlive segmentだけ来ない。

laptopでは続くのにテレビだけ止まる。

症状を、すべて「テレビが壊れた」へ戻さない。

guide → eligibility → source / playlist → session → home path → playerのどこまでgreenかを、一段ずつ見る。

同じliveが、テレビだけ止まった

二十時三十二分。

ユイのlaptopでは、夜景が流れ続けている。

テレビだけが、同じ一枚で止まった。

番組表は更新されている。

live playlistにも、新しいsegmentが増えている。

live source active      1
laptop next frame       1
television next frame   0

イトはfuture-clock leverを見なかった。

番組表も巻き戻さない。

壁の入口からテレビへ伸びる、一本の青い線へ目を移した。

線の途中には、小さな光の箱、黒いrouter、無線の空間がある。

同じliveの一方が動いているなら、止まった側の最後の道を分けて見る。

イトは青い線の入口へ走った。

八秒遅れの夜景は、laptopだけで流れ続けている。

次回、ピコルート第90話。

イトは、テレビだけ止まった青い線をどこで切り分ける?|光回線と家の入口

この物語を、解説で深める

第89話で生まれた疑問を、解説記事で少し深く見ていきます。物語で感じた不思議さを残したまま、言葉と仕組みを順番に整理しましょう。

テレビをインターネットで見る仕組み|番組表と配信データが届く流れを読む