Skip to content

Commit e19fc09

Browse files
authored
Merge pull request #3 from gwendalsimon/pr2-psi-bootstrapping
Group start semantics, PSI bootstrapping, and join behavior
2 parents 617f4ab + 06bb64e commit e19fc09

1 file changed

Lines changed: 37 additions & 15 deletions

File tree

draft-gregoire-moq-msfts.md

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -186,19 +186,27 @@ and other transport-stream syntax remain inside the source packets.
186186
A publisher SHOULD place an independently usable random access point at the
187187
first media Object of each MOQT Group. For video, this normally means that the
188188
Group begins at or before the transport-stream packets carrying a random access
189-
point and includes any PAT, PMT, and decoder initialization needed by a
190-
joining subscriber.
189+
point and includes the PAT and PMT packets required for program demultiplexing.
190+
Codec-level initialization data is carried inside the elementary stream packets
191+
of the first video access unit and is therefore present whenever a random access
192+
point is included.
191193

192194
When `m2tsRandomAccess` ({{m2ts-random-access}}) is true, the first media Object
193195
in every Group MUST begin at a random access point.
194196

195197
## Group Numbering {#group-numbering}
196198

197-
For live streams, publishers SHOULD increment the MOQT Group ID at random access
198-
boundaries. For video services this commonly corresponds to GOP or segment
199-
boundaries. The Object ID MUST increase by one for each Object within a Group
200-
unless MOQT delivery semantics permit gaps that are explicitly intended by the
201-
publisher.
199+
For live streams, publishers SHOULD start a new MOQT Group at each point where
200+
the Group content is independently decodable without reference to prior Groups.
201+
For video, a valid Group start is any intra-coded access point at which all
202+
decoder references needed by that Group are present within the Group itself.
203+
IDR frames always satisfy this condition. A CRA frame MAY serve as a Group
204+
start only if no subsequent RASL pictures in that Group reference frames from
205+
a prior Group. Publishers are not required to start a new Group at every
206+
intra-coded access point: a CRA whose following RASL pictures reference only
207+
frames present earlier in the same Group may remain interior to that Group.
208+
The Object ID MUST increase by one for each Object within a Group unless MOQT
209+
delivery semantics permit gaps that are explicitly intended by the publisher.
202210

203211
For VOD streams, Group ID and Object ID assignment SHOULD be stable for a given
204212
asset so that relays and subscribers can cache and request repeatable ranges.
@@ -350,6 +358,8 @@ of whole source packets using the packet size declared by `m2tsPacketSize`.
350358

351359
Publishers SHOULD include current PAT and PMT packets in `initData` when those
352360
tables are not guaranteed to be available at the first Object of each Group.
361+
When PSI changes within a live track, publishers SHOULD update `initData` to
362+
reflect the new PAT and PMT before publishing subsequent Objects.
353363
Receivers MUST NOT assume that `initData` remains valid after a version change
354364
in transport-stream PSI; updated PSI in the media Objects takes precedence.
355365

@@ -505,8 +515,13 @@ before presenting decoded media.
505515

506516
When joining a live track, a subscriber SHOULD start at the newest Group whose
507517
first Object is available when `m2tsRandomAccess` is true. Otherwise, a
508-
subscriber SHOULD start early enough to receive current PSI and a random access
509-
point before presenting media.
518+
subscriber SHOULD select a starting Group far enough back to encompass at least
519+
one complete PSI repetition cycle before its target presentation time; when
520+
`m2tsPsiInterval` is declared, that value bounds the maximum look-back interval
521+
needed. A subscriber MAY use the MSF Media Timeline {{MSF}} to resolve this
522+
time bound to a concrete MOQT Group location for use with a Joining FETCH
523+
{{MoQTransport}}. A subscriber MUST NOT begin media presentation until it has
524+
received a valid PAT and PMT for the track.
510525

511526
# Relay Processing {#relay-processing}
512527

@@ -515,16 +530,23 @@ can cache, forward, and prioritize m2ts Objects using MOQT namespace, track,
515530
Group ID, Object ID, and delivery metadata.
516531

517532
Relays MAY discard older Groups according to MOQT cache policy. For live
518-
content, relays that retain partial Groups SHOULD retain the first Object of a
519-
Group when it contains random access and PSI data needed by joining subscribers.
533+
content, when `m2tsRandomAccess` is true, relays that retain partial Groups
534+
SHOULD retain the first Object of each Group; by definition, publishers are
535+
required to populate that Object with a random access point together with the
536+
PAT and PMT packets needed by joining subscribers.
520537

521538
# Switching and Alternate Renditions {#switching}
522539

523540
Multiple m2ts tracks can be advertised as alternatives using the MSF `altGroup`
524-
field. Tracks in the same alternate group SHOULD align Group boundaries to
525-
equivalent presentation times and SHOULD set `m2tsRandomAccess` to true. A
526-
subscriber SHOULD switch between alternate m2ts tracks only at Group boundaries
527-
or at transport-stream random access points that it can independently decode.
541+
field. Video tracks in the same alternate group MUST place Group boundaries at
542+
identical presentation positions; other tracks SHOULD align their Group
543+
boundaries to the same positions where possible. All tracks in the alternate
544+
group SHOULD set `m2tsRandomAccess` to true. This ensures that a subscriber
545+
can switch between alternate video tracks at any Group boundary without
546+
encountering a misaligned access point.
547+
A subscriber SHOULD switch between alternate m2ts tracks only at Group
548+
boundaries or at transport-stream random access points that it can
549+
independently decode.
528550

529551
This document does not require continuity counter values or PID assignments to
530552
match across alternate tracks. Receivers MUST treat a switch between tracks as

0 commit comments

Comments
 (0)