@@ -1194,6 +1194,9 @@ <h2 id="name-copyright-notice">
11941194</ li >
11951195 < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.5.2.6 ">
11961196 < p id ="section-toc.1-1.5.2.6.1 "> < a href ="#section-5.6 " class ="auto internal xref "> 5.6</ a > . < a href ="#name-pcr-and-timing " class ="internal xref "> PCR and Timing</ a > </ p >
1197+ </ li >
1198+ < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.5.2.7 ">
1199+ < p id ="section-toc.1-1.5.2.7.1 "> < a href ="#section-5.7 " class ="auto internal xref "> 5.7</ a > . < a href ="#name-splice-signaling " class ="internal xref "> Splice Signaling</ a > </ p >
11971200</ li >
11981201 </ ul >
11991202</ li >
@@ -1228,7 +1231,10 @@ <h2 id="name-copyright-notice">
12281231 < p id ="section-toc.1-1.6.2.9.1 "> < a href ="#section-6.9 " class ="auto internal xref "> 6.9</ a > . < a href ="#name-m2ts-timestamp-mode " class ="internal xref "> M2TS Timestamp Mode</ a > </ p >
12291232</ li >
12301233 < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.6.2.10 ">
1231- < p id ="section-toc.1-1.6.2.10.1 "> < a href ="#section-6.10 " class ="auto internal xref "> 6.10</ a > . < a href ="#name-initialization-data " class ="internal xref "> Initialization Data</ a > </ p >
1234+ < p id ="section-toc.1-1.6.2.10.1 "> < a href ="#section-6.10 " class ="auto internal xref "> 6.10</ a > . < a href ="#name-m2ts-scte-35-pid " class ="internal xref "> M2TS SCTE-35 PID</ a > </ p >
1235+ </ li >
1236+ < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.6.2.11 ">
1237+ < p id ="section-toc.1-1.6.2.11.1 "> < a href ="#section-6.11 " class ="auto internal xref "> 6.11</ a > . < a href ="#name-initialization-data " class ="internal xref "> Initialization Data</ a > </ p >
12321238</ li >
12331239 </ ul >
12341240</ li >
@@ -1246,6 +1252,9 @@ <h2 id="name-copyright-notice">
12461252</ li >
12471253 < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.7.2.4 ">
12481254 < p id ="section-toc.1-1.7.2.4.1 "> < a href ="#section-7.4 " class ="auto internal xref "> 7.4</ a > . < a href ="#name-multi-program-source-two-pr " class ="internal xref "> Multi-Program Source — Two Programs from One MPTS</ a > </ p >
1255+ </ li >
1256+ < li class ="compact toc ulBare ulEmpty " id ="section-toc.1-1.7.2.5 ">
1257+ < p id ="section-toc.1-1.7.2.5.1 "> < a href ="#section-7.5 " class ="auto internal xref "> 7.5</ a > . < a href ="#name-abr-alternate-renditions-tw " class ="internal xref "> ABR Alternate Renditions — Two Bitrate Tracks</ a > </ p >
12491258</ li >
12501259 </ ul >
12511260</ li >
@@ -1417,7 +1426,7 @@ <h2 id="name-scope">
14171426continuity counter, or scrambling semantics defined by < span > [< a href ="#ISO138181 " class ="cite xref "> ISO138181</ a > ]</ span > .< a href ="#section-4-4.3.1 " class ="pilcrow "> ¶</ a > </ p >
14181427</ li >
14191428 < li class ="normal " id ="section-4-4.4 ">
1420- < p id ="section-4-4.4.1 "> A mandatory ABR switching model across separately encoded transport streams.< a href ="#section-4-4.4.1 " class ="pilcrow "> ¶</ a > </ p >
1429+ < p id ="section-4-4.4.1 "> A mandatory Adaptive Bitrate ( ABR) switching model across separately encoded transport streams.< a href ="#section-4-4.4.1 " class ="pilcrow "> ¶</ a > </ p >
14211430</ li >
14221431 < li class ="normal " id ="section-4-4.5 ">
14231432 < p id ="section-4-4.5.1 "> A key management protocol.< a href ="#section-4-4.5.1 " class ="pilcrow "> ¶</ a > </ p >
@@ -1468,8 +1477,9 @@ <h3 id="name-object-boundaries">
14681477< a href ="#section-5.2 " class ="section-number selfRef "> 5.2. </ a > < a href ="#name-object-boundaries " class ="section-name selfRef "> Object Boundaries</ a >
14691478 </ h3 >
14701479< p id ="section-5.2-1 "> Object boundaries are packaging boundaries and do not change MPEG-2 Transport
1471- Stream semantics. Continuity counters, adaptation fields, PCR, PTS, DTS, PSI,
1472- and other transport-stream syntax remain inside the source packets.< a href ="#section-5.2-1 " class ="pilcrow "> ¶</ a > </ p >
1480+ Stream semantics. Continuity counters, adaptation fields, PCR, PTS, DTS,
1481+ Program Specific Information (PSI), and other transport-stream syntax remain
1482+ inside the source packets.< a href ="#section-5.2-1 " class ="pilcrow "> ¶</ a > </ p >
14731483< p id ="section-5.2-2 "> A publisher < span class ="bcp14 "> SHOULD</ span > place an independently usable random access point at the
14741484first media Object of each MOQT Group. For video, this normally means that the
14751485Group begins at or before the transport-stream packets carrying a random access
@@ -1490,14 +1500,16 @@ <h3 id="name-group-numbering">
14901500the Group content is independently decodable without reference to prior Groups.
14911501For video, a valid Group start is any intra-coded access point at which all
14921502decoder references needed by that Group are present within the Group itself.
1493- IDR frames always satisfy this condition. A CRA frame < span class ="bcp14 "> MAY</ span > serve as a Group
1494- start only if no subsequent RASL pictures in that Group reference frames from
1495- a prior Group. Publishers are not required to start a new Group at every
1496- intra-coded access point: a CRA whose following RASL pictures reference only
1497- frames present earlier in the same Group may remain interior to that Group.
1503+ Instantaneous Decoder Refresh (IDR) frames always satisfy this condition.
1504+ A Clean Random Access (CRA) frame < span class ="bcp14 "> MAY</ span > serve as a Group start only if no
1505+ subsequent Random Access Skipped Leading (RASL) pictures in that Group
1506+ reference frames from a prior Group. Publishers are not required to start a
1507+ new Group at every intra-coded access point: a CRA whose following RASL
1508+ pictures reference only frames present earlier in the same Group may remain
1509+ interior to that Group.
14981510The Object ID < span class ="bcp14 "> MUST</ span > increase by one for each Object within a Group unless MOQT
14991511delivery semantics permit gaps that are explicitly intended by the publisher.< a href ="#section-5.3-1 " class ="pilcrow "> ¶</ a > </ p >
1500- < p id ="section-5.3-2 "> For VOD streams, Group ID and Object ID assignment < span class ="bcp14 "> SHOULD</ span > be stable for a given
1512+ < p id ="section-5.3-2 "> For video-on-demand ( VOD) streams, Group ID and Object ID assignment < span class ="bcp14 "> SHOULD</ span > be stable for a given
15011513asset so that relays and subscribers can cache and request repeatable ranges.< a href ="#section-5.3-2 " class ="pilcrow "> ¶</ a > </ p >
15021514</ section >
15031515</ div >
@@ -1529,8 +1541,8 @@ <h3 id="name-multi-program-source-handli">
15291541each track contains only:< a href ="#section-5.5-1 " class ="pilcrow "> ¶</ a > </ p >
15301542< ul class ="normal ">
15311543< li class ="normal " id ="section-5.5-2.1 ">
1532- < p id ="section-5.5-2.1.1 "> Null packets (PID 0x1FFF) , which < span class ="bcp14 "> MAY</ span > be removed or retained at the
1533- publisher's discretion.< a href ="#section-5.5-2.1.1 " class ="pilcrow "> ¶</ a > </ p >
1544+ < p id ="section-5.5-2.1.1 "> Null packets with Packet Identifier (PID) 0x1FFF, which < span class ="bcp14 "> MAY</ span > be removed or
1545+ retained at the publisher's discretion.< a href ="#section-5.5-2.1.1 " class ="pilcrow "> ¶</ a > </ p >
15341546</ li >
15351547 < li class ="normal " id ="section-5.5-2.2 ">
15361548 < p id ="section-5.5-2.2.1 "> Program Association Table packets (PID 0x0000), rewritten to list only the
@@ -1580,6 +1592,17 @@ <h3 id="name-pcr-and-timing">
15801592wrap-around.< a href ="#section-5.6-3 " class ="pilcrow "> ¶</ a > </ p >
15811593</ section >
15821594</ div >
1595+ < div id ="splice-signaling ">
1596+ < section id ="section-5.7 ">
1597+ < h3 id ="name-splice-signaling ">
1598+ < a href ="#section-5.7 " class ="section-number selfRef "> 5.7. </ a > < a href ="#name-splice-signaling " class ="section-name selfRef "> Splice Signaling</ a >
1599+ </ h3 >
1600+ < p id ="section-5.7-1 "> SCTE-35 splice information is carried transparently in the TS stream as
1601+ splice_info_section() messages on their designated PID. Publishers < span class ="bcp14 "> MAY</ span > surface
1602+ splice events via the MSF Event Timeline < span > [< a href ="#MSF " class ="cite xref "> MSF</ a > ]</ span > . This document does not
1603+ specify SCTE-35 processing.< a href ="#section-5.7-1 " class ="pilcrow "> ¶</ a > </ p >
1604+ </ section >
1605+ </ div >
15831606</ section >
15841607</ div >
15851608< div id ="catalog ">
@@ -1662,13 +1685,20 @@ <h3 id="name-track-object-fields">
16621685 < td class ="text-left " rowspan ="1 " colspan ="1 "> m2tsTimestampMode</ td >
16631686 < td class ="text-left " rowspan ="1 " colspan ="1 ">
16641687 < a href ="#m2ts-timestamp-mode " class ="auto internal xref "> Section 6.9</ a >
1688+ </ td >
1689+ </ tr >
1690+ < tr >
1691+ < td class ="text-left " rowspan ="1 " colspan ="1 "> M2TS SCTE-35 PID</ td >
1692+ < td class ="text-left " rowspan ="1 " colspan ="1 "> m2tsScte35Pid</ td >
1693+ < td class ="text-left " rowspan ="1 " colspan ="1 ">
1694+ < a href ="#m2ts-scte35-pid " class ="auto internal xref "> Section 6.10</ a >
16651695</ td >
16661696 </ tr >
16671697 < tr >
16681698 < td class ="text-left " rowspan ="1 " colspan ="1 "> Initialization data</ td >
16691699 < td class ="text-left " rowspan ="1 " colspan ="1 "> initData</ td >
16701700 < td class ="text-left " rowspan ="1 " colspan ="1 ">
1671- < a href ="#init-data " class ="auto internal xref "> Section 6.10 </ a >
1701+ < a href ="#init-data " class ="auto internal xref "> Section 6.11 </ a >
16721702</ td >
16731703 </ tr >
16741704 </ tbody >
@@ -1767,21 +1797,34 @@ <h3 id="name-m2ts-timestamp-mode">
17671797semantics. This field < span class ="bcp14 "> MUST NOT</ span > be present when < code > m2tsPacketSize</ code > is 188.< a href ="#section-6.9-2 " class ="pilcrow "> ¶</ a > </ p >
17681798</ section >
17691799</ div >
1770- < div id ="init-data ">
1800+ < div id ="m2ts-scte35-pid ">
17711801< section id ="section-6.10 ">
1802+ < h3 id ="name-m2ts-scte-35-pid ">
1803+ < a href ="#section-6.10 " class ="section-number selfRef "> 6.10. </ a > < a href ="#name-m2ts-scte-35-pid " class ="section-name selfRef "> M2TS SCTE-35 PID</ a >
1804+ </ h3 >
1805+ < p id ="section-6.10-1 "> Required: Optional JSON Type: Number Location: Track Object< a href ="#section-6.10-1 " class ="pilcrow "> ¶</ a > </ p >
1806+ < p id ="section-6.10-2 "> The PID carrying SCTE-35 splice_info_section() messages for this track. This
1807+ field is advisory; SCTE-35 messages are also discoverable via the PMT CA/registration
1808+ descriptor. When present, receivers < span class ="bcp14 "> MAY</ span > use this value to locate splice events
1809+ without parsing PMT. Publishers < span class ="bcp14 "> SHOULD</ span > include this field when the track carries
1810+ SCTE-35 splice signaling.< a href ="#section-6.10-2 " class ="pilcrow "> ¶</ a > </ p >
1811+ </ section >
1812+ </ div >
1813+ < div id ="init-data ">
1814+ < section id ="section-6.11 ">
17721815 < h3 id ="name-initialization-data ">
1773- < a href ="#section-6.10 " class ="section-number selfRef "> 6.10 . </ a > < a href ="#name-initialization-data " class ="section-name selfRef "> Initialization Data</ a >
1816+ < a href ="#section-6.11 " class ="section-number selfRef "> 6.11 . </ a > < a href ="#name-initialization-data " class ="section-name selfRef "> Initialization Data</ a >
17741817 </ h3 >
1775- < p id ="section-6.10 -1 "> Required: Optional JSON Type: String Location: Track Object< a href ="#section-6.10 -1 " class ="pilcrow "> ¶</ a > </ p >
1776- < p id ="section-6.10 -2 "> An m2ts track < span class ="bcp14 "> MAY</ span > use the MSF < code > initData</ code > field to carry Base64 < span > [< a href ="#BASE64 " class ="cite xref "> BASE64</ a > ]</ span >
1818+ < p id ="section-6.11 -1 "> Required: Optional JSON Type: String Location: Track Object< a href ="#section-6.11 -1 " class ="pilcrow "> ¶</ a > </ p >
1819+ < p id ="section-6.11 -2 "> An m2ts track < span class ="bcp14 "> MAY</ span > use the MSF < code > initData</ code > field to carry Base64 < span > [< a href ="#BASE64 " class ="cite xref "> BASE64</ a > ]</ span >
17771820encoded initialization data. If present, the decoded value < span class ="bcp14 "> MUST</ span > be a sequence
1778- of whole source packets using the packet size declared by < code > m2tsPacketSize</ code > .< a href ="#section-6.10 -2 " class ="pilcrow "> ¶</ a > </ p >
1779- < p id ="section-6.10 -3 "> Publishers < span class ="bcp14 "> SHOULD</ span > include current PAT and PMT packets in < code > initData</ code > when those
1821+ of whole source packets using the packet size declared by < code > m2tsPacketSize</ code > .< a href ="#section-6.11 -2 " class ="pilcrow "> ¶</ a > </ p >
1822+ < p id ="section-6.11 -3 "> Publishers < span class ="bcp14 "> SHOULD</ span > include current PAT and PMT packets in < code > initData</ code > when those
17801823tables are not guaranteed to be available at the first Object of each Group.
17811824When PSI changes within a live track, publishers < span class ="bcp14 "> SHOULD</ span > update < code > initData</ code > to
17821825reflect the new PAT and PMT before publishing subsequent Objects.
17831826Receivers < span class ="bcp14 "> MUST NOT</ span > assume that < code > initData</ code > remains valid after a version change
1784- in transport-stream PSI; updated PSI in the media Objects takes precedence.< a href ="#section-6.10 -3 " class ="pilcrow "> ¶</ a > </ p >
1827+ in transport-stream PSI; updated PSI in the media Objects takes precedence.< a href ="#section-6.11 -3 " class ="pilcrow "> ¶</ a > </ p >
17851828</ section >
17861829</ div >
17871830</ section >
@@ -1943,6 +1986,64 @@ <h3 id="name-multi-program-source-two-pr">
19431986</ div >
19441987</ section >
19451988</ div >
1989+ < div id ="example-abr ">
1990+ < section id ="section-7.5 ">
1991+ < h3 id ="name-abr-alternate-renditions-tw ">
1992+ < a href ="#section-7.5 " class ="section-number selfRef "> 7.5. </ a > < a href ="#name-abr-alternate-renditions-tw " class ="section-name selfRef "> ABR Alternate Renditions — Two Bitrate Tracks</ a >
1993+ </ h3 >
1994+ < p id ="section-7.5-1 "> This example shows a catalog for a live channel published at two bitrates as
1995+ alternate renditions. Both tracks are in the same < code > altGroup</ code > ; video tracks
1996+ < span class ="bcp14 "> MUST</ span > align Group boundaries at identical presentation positions. The tracks
1997+ use different PID assignments: a subscriber switching between them < span class ="bcp14 "> MUST</ span > re-parse
1998+ PAT and PMT on the new track before routing packets to a decoder.< a href ="#section-7.5-1 " class ="pilcrow "> ¶</ a > </ p >
1999+ < div class ="lang-json sourcecode " id ="section-7.5-2 ">
2000+ < pre >
2001+ {
2002+ "version": 1,
2003+ "generatedAt": 1746104606044,
2004+ "tracks": [
2005+ {
2006+ "name": "video-high",
2007+ "namespace": "live.example.com/channel/1",
2008+ "packaging": "m2ts",
2009+ "isLive": true,
2010+ "targetLatency": 1000,
2011+ "role": "video",
2012+ "mimeType": "video/mp2t",
2013+ "bitrate": 6000000,
2014+ "altGroup": 1,
2015+ "m2tsPacketSize": 188,
2016+ "m2tsPacketsPerObject": 64,
2017+ "m2tsProgramNumber": 1,
2018+ "m2tsPmtPid": 256,
2019+ "m2tsPcrPid": 257,
2020+ "m2tsPsiInterval": 100,
2021+ "m2tsRandomAccess": true
2022+ },
2023+ {
2024+ "name": "video-low",
2025+ "namespace": "live.example.com/channel/1",
2026+ "packaging": "m2ts",
2027+ "isLive": true,
2028+ "targetLatency": 1000,
2029+ "role": "video",
2030+ "mimeType": "video/mp2t",
2031+ "bitrate": 2000000,
2032+ "altGroup": 1,
2033+ "m2tsPacketSize": 188,
2034+ "m2tsPacketsPerObject": 64,
2035+ "m2tsProgramNumber": 1,
2036+ "m2tsPmtPid": 512,
2037+ "m2tsPcrPid": 513,
2038+ "m2tsPsiInterval": 100,
2039+ "m2tsRandomAccess": true
2040+ }
2041+ ]
2042+ }
2043+ </ pre > < a href ="#section-7.5-2 " class ="pilcrow "> ¶</ a >
2044+ </ div >
2045+ </ section >
2046+ </ div >
19462047</ section >
19472048</ div >
19482049< div id ="subscriber-processing ">
@@ -2023,7 +2124,10 @@ <h2 id="name-switching-and-alternate-ren">
20232124value received on the new track as the initial reference. In addition to the
20242125Group boundary alignment requirements above, publishers providing alternate
20252126tracks < span class ="bcp14 "> SHOULD</ span > align presentation timestamps at Group boundaries across tracks
2026- to enable seamless presentation switching at the application layer.< a href ="#section-10-3 " class ="pilcrow "> ¶</ a > </ p >
2127+ to enable seamless presentation switching at the application layer.
2128+ Because PID assignments need not match across alternate tracks, a receiver
2129+ < span class ="bcp14 "> MUST</ span > re-parse the PAT and PMT of the new track after every track switch before
2130+ routing elementary-stream packets to a decoder.< a href ="#section-10-3 " class ="pilcrow "> ¶</ a > </ p >
20272131</ section >
20282132</ div >
20292133< div id ="content-protection ">
0 commit comments