@@ -144,7 +144,7 @@ This specification does not define:
144144 stream.
145145* A replacement for Program Association Table, Program Map Table, PCR, PTS, DTS,
146146 continuity counter, or scrambling semantics defined by {{ISO138181}}.
147- * A mandatory ABR switching model across separately encoded transport streams.
147+ * A mandatory Adaptive Bitrate ( ABR) switching model across separately encoded transport streams.
148148* A key management protocol.
149149
150150# Media Packaging {#media-packaging}
@@ -184,8 +184,9 @@ discontinuous at that point until it reaches a subsequent random access point.
184184# # Object Boundaries {#object-boundaries}
185185
186186Object boundaries are packaging boundaries and do not change MPEG-2 Transport
187- Stream semantics. Continuity counters, adaptation fields, PCR, PTS, DTS, PSI,
188- and other transport-stream syntax remain inside the source packets.
187+ Stream semantics. Continuity counters, adaptation fields, PCR, PTS, DTS,
188+ Program Specific Information (PSI), and other transport-stream syntax remain
189+ inside the source packets.
189190
190191A publisher SHOULD place an independently usable random access point at the
191192first media Object of each MOQT Group. For video, this normally means that the
@@ -204,15 +205,17 @@ For live streams, publishers SHOULD start a new MOQT Group at each point where
204205the Group content is independently decodable without reference to prior Groups.
205206For video, a valid Group start is any intra-coded access point at which all
206207decoder references needed by that Group are present within the Group itself.
207- IDR frames always satisfy this condition. A CRA frame MAY serve as a Group
208- start only if no subsequent RASL pictures in that Group reference frames from
209- a prior Group. Publishers are not required to start a new Group at every
210- intra-coded access point : a CRA whose following RASL pictures reference only
211- frames present earlier in the same Group may remain interior to that Group.
208+ Instantaneous Decoder Refresh (IDR) frames always satisfy this condition.
209+ A Clean Random Access (CRA) frame MAY serve as a Group start only if no
210+ subsequent Random Access Skipped Leading (RASL) pictures in that Group
211+ reference frames from a prior Group. Publishers are not required to start a
212+ new Group at every intra-coded access point : a CRA whose following RASL
213+ pictures reference only frames present earlier in the same Group may remain
214+ interior to that Group.
212215The Object ID MUST increase by one for each Object within a Group unless MOQT
213216delivery semantics permit gaps that are explicitly intended by the publisher.
214217
215- For VOD streams, Group ID and Object ID assignment SHOULD be stable for a given
218+ For video-on-demand ( VOD) streams, Group ID and Object ID assignment SHOULD be stable for a given
216219asset so that relays and subscribers can cache and request repeatable ranges.
217220
218221# # Packetization {#packetization}
@@ -236,8 +239,8 @@ multi-program transport stream (MPTS) SHOULD produce a separate m2ts track
236239for each program it wishes to offer, filtering the source packets so that
237240each track contains only :
238241
239- * Null packets (PID 0x1FFF) , which MAY be removed or retained at the
240- publisher's discretion.
242+ * Null packets with Packet Identifier (PID) 0x1FFF, which MAY be removed or
243+ retained at the publisher's discretion.
241244* Program Association Table packets (PID 0x0000), rewritten to list only the
242245 program present in this track.
243246* Program Map Table packets for the selected program (whose PID is listed in
@@ -279,6 +282,13 @@ discontinuity. Receivers that use the MSF Media Timeline {{MSF}} for playout
279282timing can rely on its monotonic wall-clock abstraction independently of PCR
280283wrap-around.
281284
285+ # # Splice Signaling {#splice-signaling}
286+
287+ SCTE-35 splice information is carried transparently in the TS stream as
288+ splice_info_section() messages on their designated PID. Publishers MAY surface
289+ splice events via the MSF Event Timeline {{MSF}}. This document does not
290+ specify SCTE-35 processing.
291+
282292# Catalog {#catalog}
283293
284294An m2ts track is described by the MSF catalog {{MSF}}. The catalog track name,
@@ -302,6 +312,7 @@ Table 1 lists the m2ts-specific fields defined within a track object.
302312| M2TS PSI interval | m2tsPsiInterval | {{m2ts-psi-interval}} |
303313| M2TS random access | m2tsRandomAccess | {{m2ts-random-access}} |
304314| M2TS timestamp mode | m2tsTimestampMode | {{m2ts-timestamp-mode}} |
315+ | M2TS SCTE-35 PID | m2tsScte35Pid | {{m2ts-scte35-pid}} |
305316| Initialization data | initData | {{init-data}} |
306317
307318# # M2TS Packet Size {#m2ts-packet-size}
@@ -372,6 +383,16 @@ arrival-time or emission-time stamp associated with the following TS packet. Th
372383value "opaque" indicates that the timestamp prefix is carried without specified
373384semantics. This field MUST NOT be present when `m2tsPacketSize` is 188.
374385
386+ # # M2TS SCTE-35 PID {#m2ts-scte35-pid}
387+
388+ Required : Optional JSON Type: Number Location: Track Object
389+
390+ The PID carrying SCTE-35 splice_info_section() messages for this track. This
391+ field is advisory; SCTE-35 messages are also discoverable via the PMT CA/registration
392+ descriptor. When present, receivers MAY use this value to locate splice events
393+ without parsing PMT. Publishers SHOULD include this field when the track carries
394+ SCTE-35 splice signaling.
395+
375396# # Initialization Data {#init-data}
376397
377398Required : Optional JSON Type: String Location: Track Object
@@ -519,6 +540,59 @@ used because the programs carry different content.
519540}
520541~~~
521542
543+ # # ABR Alternate Renditions — Two Bitrate Tracks {#example-abr}
544+
545+ This example shows a catalog for a live channel published at two bitrates as
546+ alternate renditions. Both tracks are in the same `altGroup`; video tracks
547+ MUST align Group boundaries at identical presentation positions. The tracks
548+ use different PID assignments : a subscriber switching between them MUST re-parse
549+ PAT and PMT on the new track before routing packets to a decoder.
550+
551+ ~~~ json
552+ {
553+ " version " : 1,
554+ " generatedAt " : 1746104606044,
555+ " tracks " : [
556+ {
557+ " name " : " video-high" ,
558+ " namespace " : " live.example.com/channel/1" ,
559+ " packaging " : " m2ts" ,
560+ " isLive " : true,
561+ " targetLatency " : 1000,
562+ " role " : " video" ,
563+ " mimeType " : " video/mp2t" ,
564+ " bitrate " : 6000000,
565+ " altGroup " : 1,
566+ " m2tsPacketSize " : 188,
567+ " m2tsPacketsPerObject " : 64,
568+ " m2tsProgramNumber " : 1,
569+ " m2tsPmtPid " : 256,
570+ " m2tsPcrPid " : 257,
571+ " m2tsPsiInterval " : 100,
572+ " m2tsRandomAccess " : true
573+ },
574+ {
575+ " name " : " video-low" ,
576+ " namespace " : " live.example.com/channel/1" ,
577+ " packaging " : " m2ts" ,
578+ " isLive " : true,
579+ " targetLatency " : 1000,
580+ " role " : " video" ,
581+ " mimeType " : " video/mp2t" ,
582+ " bitrate " : 2000000,
583+ " altGroup " : 1,
584+ " m2tsPacketSize " : 188,
585+ " m2tsPacketsPerObject " : 64,
586+ " m2tsProgramNumber " : 1,
587+ " m2tsPmtPid " : 512,
588+ " m2tsPcrPid " : 513,
589+ " m2tsPsiInterval " : 100,
590+ " m2tsRandomAccess " : true
591+ }
592+ ]
593+ }
594+ ~~~
595+
522596# Subscriber Processing {#subscriber-processing}
523597
524598A subscriber obtains the catalog using the MSF catalog workflow and subscribes
@@ -583,6 +657,9 @@ value received on the new track as the initial reference. In addition to the
583657Group boundary alignment requirements above, publishers providing alternate
584658tracks SHOULD align presentation timestamps at Group boundaries across tracks
585659to enable seamless presentation switching at the application layer.
660+ Because PID assignments need not match across alternate tracks, a receiver
661+ MUST re-parse the PAT and PMT of the new track after every track switch before
662+ routing elementary-stream packets to a decoder.
586663
587664# Content Protection {#content-protection}
588665
0 commit comments