From b184bbf79653bd5a8391aaff88ad53e9393a1103 Mon Sep 17 00:00:00 2001 From: Will Law <2762250+wilaw@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:14:46 +0200 Subject: [PATCH 1/4] Update CMSF document with new references and JSON format Updated normative references and adjusted JSON structure for CMSF versioning and initialization data. --- draft-ietf-moq-cmsf.md | 78 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 63 insertions(+), 15 deletions(-) diff --git a/draft-ietf-moq-cmsf.md b/draft-ietf-moq-cmsf.md index be57e81..3d0f187 100644 --- a/draft-ietf-moq-cmsf.md +++ b/draft-ietf-moq-cmsf.md @@ -31,8 +31,8 @@ author: email: wilaw@akamai.com normative: - MoQTransport: I-D.draft-ietf-moq-transport-10 - MSF: I-D.draft-ietf-moq-warp + MoQTransport: I-D.draft-ietf-moq-transport-18 + MSF: I-D.draft-ietf-moq-msf-01 CMAF: author: - name: International Organization for Standardization @@ -85,7 +85,7 @@ It specifies the syntax and semantics for adding CMAF-packaged media [CMAF] to M CMAF compliant MOQT Streaming Format (CMSF) is a media format designed to deliver CMAF [CMAF] and LOC [LOC] compliant media content over MOQ Transport (MOQT) [MoQTransport]. CMSF extends MSF and retains all the scope, capabilities and features of MSF including the catalog -format, timeline, ABR switching and LOC support. MSF is targeted at real-time and +format, timeline, ABR switching and LOC support. CMSF is targeted at real-time and interactive levels of live latency, as well as VOD content. This document describes version 1 of the CMSF streaming format. @@ -238,7 +238,7 @@ by reusing the signaling model established by DASH [DASH] and the DASH-IF Encryption and Content Protection (ECCP) guidelines [DASHIF-ECCP]. Content protection in CMSF differs from the encryption scheme defined in -[MSF] Section 3.7. While MSF defines an end-to-end encryption mechanism +[MSF] Section 4.3. While MSF defines an end-to-end encryption mechanism using MoQ Secure Objects for LOC-packaged content, CMSF uses ISO Common Encryption [CENC] applied at the CMAF media layer. In CMSF, the media samples within CMAF chunks are encrypted as specified by [CENC], and the @@ -419,7 +419,7 @@ definition video qualities, along with an audio track. ~~~json { - "version": 1, + "version": "1", "generatedAt": 1746104606044, "tracks":[ { @@ -427,7 +427,8 @@ definition video qualities, along with an audio track. "renderGroup": 1, "packaging": "cmaf", "isLive": true, - "initData": "AAAAIGZ0eXBpc281AAA...AAAAAAAAAAAAA", + "targetLatency": 2000, + "initRef": "init-hd", "role": "video", "codec":"avc1.640028", "width":1920, @@ -441,7 +442,8 @@ definition video qualities, along with an audio track. "renderGroup": 1, "packaging": "cmaf", "isLive": true, - "initData": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA", + "targetLatency": 2000, + "initRef": "init-md", "role": "video", "codec":"avc1.64001e", "width":720, @@ -455,7 +457,8 @@ definition video qualities, along with an audio track. "renderGroup": 1, "packaging": "cmaf", "isLive": true, - "initData": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA", + "targetLatency": 2000, + "initRef": "init-sd", "role": "video", "codec":"avc1.64000d", "width":192, @@ -469,14 +472,37 @@ definition video qualities, along with an audio track. "renderGroup": 1, "packaging": "cmaf", "isLive": true, - "initData": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA", + "targetLatency": 2000, + "initRef": "init-audio", "role": "audio", "codec":"mp4a.40.5", "samplerate":48000, "channelConfig":"2", "bitrate":67071 } - ] + ], + "initDataList": [ + { + "id": "init-hd", + "type": "inline", + "data": "AAAAIGZ0eXBpc281AAA...AAAAAAAAAAAAA" + }, + { + "id": "init-md", + "type": "inline", + "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + }, + { + "id": "init-sd", + "type": "inline", + "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + }, + { + "id": "init-audio", + "type": "inline", + "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + } + ] } ~~~ @@ -490,7 +516,7 @@ FairPlay. ~~~json { - "version": 1, + "version": "1", "generatedAt": 1746104606044, "contentProtections": [ { @@ -543,10 +569,11 @@ FairPlay. "name": "video_protected", "packaging": "cmaf", "isLive": true, + "buffers": {"target":1500}, "role": "video", "renderGroup": 1, "altGroup": 1, - "initData": "AAAAGGZ0eXBjbWZjAAAA...", + "initRef": "1", "codec": "avc3.4D401F", "framerate": 25, "bitrate": 581905, @@ -558,14 +585,27 @@ FairPlay. "name": "audio", "packaging": "cmaf", "isLive": true, + "buffers": {"target":1500}, "role": "audio", "renderGroup": 1, - "initData": "AAAAHGZ0eXBpc281AAA...", + "initRef": "2", "codec": "mp4a.40.5", "samplerate": 48000, "channelConfig": "2", "bitrate": 67071 } + ], + "initDataList": [ + { + "id": "1", + "type": "inline", + "data": "AAAAGGZ0eXBjbWZjAAAA..." + }, + { + "id": "2", + "type": "inline", + "data": "AAAAHGZ0eXBpc281AAA..." + } ] } ~~~ @@ -577,7 +617,7 @@ the ECCP model, suitable for testing and development. ~~~json { - "version": 1, + "version": "1", "generatedAt": 1746104606044, "contentProtections": [ { @@ -601,9 +641,10 @@ the ECCP model, suitable for testing and development. "name": "video", "packaging": "cmaf", "isLive": true, + "buffers": {"target":1500}, "role": "video", "renderGroup": 1, - "initData": "AAAAGGZ0eXBjbWZjAAAA...", + "initRef": "init-video", "codec": "avc1.640028", "framerate": 30, "bitrate": 5000000, @@ -611,6 +652,13 @@ the ECCP model, suitable for testing and development. "height": 1080, "contentProtectionRefIDs": ["1"] } + ], +"initDataList": [ + { + "id": "init-video", + "type": "inline", + "data": "AAAAGGZ0eXBjbWZjAAAA..." + } ] } ~~~ From 0df4bbf36bbf29e1d2a9ef00ffd1d2f63e8e3971 Mon Sep 17 00:00:00 2001 From: Will Law <2762250+wilaw@users.noreply.github.com> Date: Tue, 2 Jun 2026 14:56:36 +0200 Subject: [PATCH 2/4] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- draft-ietf-moq-cmsf.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/draft-ietf-moq-cmsf.md b/draft-ietf-moq-cmsf.md index 3d0f187..c8a4c2e 100644 --- a/draft-ietf-moq-cmsf.md +++ b/draft-ietf-moq-cmsf.md @@ -653,7 +653,7 @@ the ECCP model, suitable for testing and development. "contentProtectionRefIDs": ["1"] } ], -"initDataList": [ + "initDataList": [ { "id": "init-video", "type": "inline", From a5108041d2b67a859c88c42cbe3470a49f71a9d9 Mon Sep 17 00:00:00 2001 From: Will Law <2762250+wilaw@users.noreply.github.com> Date: Tue, 2 Jun 2026 15:19:47 +0200 Subject: [PATCH 3/4] Update initDataList entries with new data values --- draft-ietf-moq-cmsf.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/draft-ietf-moq-cmsf.md b/draft-ietf-moq-cmsf.md index c8a4c2e..6a6e2b9 100644 --- a/draft-ietf-moq-cmsf.md +++ b/draft-ietf-moq-cmsf.md @@ -485,22 +485,22 @@ definition video qualities, along with an audio track. { "id": "init-hd", "type": "inline", - "data": "AAAAIGZ0eXBpc281AAA...AAAAAAAAAAAAA" + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQ..." }, { "id": "init-md", "type": "inline", - "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQ..." }, { "id": "init-sd", "type": "inline", - "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQ..." }, { "id": "init-audio", "type": "inline", - "data": "AAAAHGZ0eXBpc281AAA...AAAAAAAAAAAAAA" + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQ..." } ] } @@ -599,12 +599,12 @@ FairPlay. { "id": "1", "type": "inline", - "data": "AAAAGGZ0eXBjbWZjAAAA..." + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQAA..." }, { "id": "2", "type": "inline", - "data": "AAAAHGZ0eXBpc281AAA..." + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQAA..." } ] } @@ -657,7 +657,7 @@ the ECCP model, suitable for testing and development. { "id": "init-video", "type": "inline", - "data": "AAAAGGZ0eXBjbWZjAAAA..." + "data": "AAAAHGZ0eXBjbWYyAAAAAGNtZjJpc282bXA0MQAA..." } ] } From 5737a6e61df36594bcd384ccfc11a99191739a22 Mon Sep 17 00:00:00 2001 From: Will Law <2762250+wilaw@users.noreply.github.com> Date: Tue, 2 Jun 2026 15:45:19 +0200 Subject: [PATCH 4/4] Clarify CMAF initialization headers packaging process Updated CMAF initialization headers section to clarify how headers should be added to the catalog and referenced in tracks. --- draft-ietf-moq-cmsf.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/draft-ietf-moq-cmsf.md b/draft-ietf-moq-cmsf.md index 6a6e2b9..95ede14 100644 --- a/draft-ietf-moq-cmsf.md +++ b/draft-ietf-moq-cmsf.md @@ -96,14 +96,15 @@ implementations of this extension unless explicitly noted otherwise in this docu # CMAF Packaging -## Initialization headers +## Initialization headers {#initheaders} A CMAF header is a sequence of CMAF constrained ISO BMFF boxes that do not reference any media samples, but are associated with a CMAF track and are necessary for initializing the decoding of the subsequent CMAF fragments. -The header for a given MOQT Track MUST be packaged by encoding the header using [BASE64] -and then inserting that payload as the value of the Initialization data "initData" field -in the catalog entry for that Track. +The header for a given MOQT Track MUST be added to the catalog by generating an initDataList +entry with a "type" of "inline", a "data" value of the header encoded using [BASE64] and an +"id" which is unique across the initDataList items. That "id" value is then inserted as the +value of an "initRef" property in all tracks which use that header for initialization. ## Switching sets and tracks This specification defines a direct mapping between CMAF Tracks ( [CMAF] Sect 3.2.1) and @@ -382,7 +383,7 @@ Encryption. ## Initialization data for protected tracks For protected CMAF tracks, the initialization data (carried in the catalog -`initData` field as defined in Section 3.1) MUST include the Protection +`initDataList` array (as defined in {{initheaders}}) MUST include the Protection Scheme Information Box ('sinf') containing the Scheme Type Box ('schm') and Scheme Information Box ('schi') with the Track Encryption Box ('tenc') as specified in [CENC] Section 6. This enables the subscriber to determine