Skip to content

AvailabilityTimeOffset

Torbjörn Einarson edited this page Aug 22, 2023 · 5 revisions

The MPD attribute `availabilityTimeOffset´ (ato) can be used to signal that segments are available at an offst time compared to the value derived from the the normal attributes in the MPD.

A positive value ato=X means that the segment is available X seconds earlier.

Low-latency signaling

A particular use case is for (chunked) low-latency segments where a positive ato value is used together with availabilityTimeComplete="false" in the MPD to signal that a partial segments are available X seconds earlier than the full segments.

In livesim2 a typical signaling to generate a low-latency source is

 ato_1.5/chunkdur_0.5/

which results in a source with

availabilityTimeOffset = 1.5s
chunk duration = 0.5s
availabilityTimeComplete = false (implicit)

For an MPD with SegmentTimeline, the manifest is changed to be updated as soon as the partial segment is available, and the publishTime@MPD is updated to signal that time.

Full segments

Another use case is for full segments. This is specified by not having a chunk duration set in the URL. In this case, full segments are made available earlier, and the MPD is changed to reflect that by publishing segments at a shifted time, as also reflected by publishTime@MPD value.

A special case is an infinite value of availabilityTimeOffset. This means that all segments are available. In livesim2, that value can only be used together with SegmentTemplate with $Number$, and not with SegmentTimeline.

Infinite availabilityTimeOffset

An infinite availabilitityTimeOffset is signaled in the URL as

ato_inf/

The interpretation of this is that all segments are available, both in the future and in the past. For live content, there is no way of knowing the future segments unless there is a formula to generate their URLs. The usage of ato_inf is therefore limited to SegmentTemplate with $Number$.

Signaling in the MPD

availabilityTimeOffset can be signaled at multiple values in the MPD. In livesim2, it is only signaled at the SegmentTemplate level.