-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdraft-ietf-moq-msf-01.txt
More file actions
4144 lines (2766 loc) · 140 KB
/
Copy pathdraft-ietf-moq-msf-01.txt
File metadata and controls
4144 lines (2766 loc) · 140 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Media Over QUIC W. Law
Internet-Draft Akamai
Intended status: Informational S. Nandakumar
Expires: 4 December 2026 Cisco
2 June 2026
MOQT Streaming Format
draft-ietf-moq-msf-01
Abstract
This document specifies the MOQT Streaming Format, designed to
operate on Media Over QUIC Transport.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at https://moq-
wg.github.io/msf/ draft-ietf-moq-msf.html. Status information for
this document may be found at https://datatracker.ietf.org/doc/draft-
ietf-moq-msf/.
Discussion of this document takes place on the Media Over QUIC
Working Group mailing list (mailto:moq@ietf.org), which is archived
at https://mailarchive.ietf.org/arch/browse/moq/. Subscribe at
https://www.ietf.org/mailman/listinfo/moq/.
Source for this draft and an issue tracker can be found at
https://github.com/moq-wg/msf.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 4 December 2026.
Law & Nandakumar Expires 4 December 2026 [Page 1]
Internet-Draft MOQT Streaming Format June 2026
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 5
3. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4. Media packaging . . . . . . . . . . . . . . . . . . . . . . . 7
4.1. LOC packaging . . . . . . . . . . . . . . . . . . . . . . 7
4.2. Time-alignment . . . . . . . . . . . . . . . . . . . . . 7
4.3. Content protection and encryption . . . . . . . . . . . . 8
4.3.1. Encryption scheme signaling . . . . . . . . . . . . . 8
4.3.2. Key management . . . . . . . . . . . . . . . . . . . 8
4.3.3. Recommended encryption scheme . . . . . . . . . . . . 9
4.3.4. Encrypted object structure . . . . . . . . . . . . . 9
5. Catalog . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.1. Root Catalog Fields . . . . . . . . . . . . . . . . . . . 10
5.1.1. MSF version . . . . . . . . . . . . . . . . . . . . . 11
5.1.2. Generated at . . . . . . . . . . . . . . . . . . . . 11
5.1.3. Is Complete . . . . . . . . . . . . . . . . . . . . . 11
5.1.4. Tracks . . . . . . . . . . . . . . . . . . . . . . . 12
5.1.5. Publish tracks . . . . . . . . . . . . . . . . . . . 12
5.1.6. Delta update . . . . . . . . . . . . . . . . . . . . 12
5.1.7. Initialization Data List . . . . . . . . . . . . . . 13
5.2. Track Object Fields . . . . . . . . . . . . . . . . . . . 13
5.2.1. Tracks object . . . . . . . . . . . . . . . . . . . . 15
5.2.2. Track namespace . . . . . . . . . . . . . . . . . . . 15
5.2.3. Track name . . . . . . . . . . . . . . . . . . . . . 15
5.2.4. Packaging . . . . . . . . . . . . . . . . . . . . . . 16
5.2.5. Event timeline type . . . . . . . . . . . . . . . . . 16
5.2.6. Track role . . . . . . . . . . . . . . . . . . . . . 16
5.2.7. Is Live . . . . . . . . . . . . . . . . . . . . . . . 18
5.2.8. Target latency . . . . . . . . . . . . . . . . . . . 18
5.2.9. Buffers . . . . . . . . . . . . . . . . . . . . . . . 18
5.2.10. Track label . . . . . . . . . . . . . . . . . . . . . 19
5.2.11. Render group . . . . . . . . . . . . . . . . . . . . 19
Law & Nandakumar Expires 4 December 2026 [Page 2]
Internet-Draft MOQT Streaming Format June 2026
5.2.12. Alternate group . . . . . . . . . . . . . . . . . . . 19
5.2.13. Initialization reference . . . . . . . . . . . . . . 19
5.2.14. Dependencies . . . . . . . . . . . . . . . . . . . . 20
5.2.15. Template . . . . . . . . . . . . . . . . . . . . . . 20
5.2.16. Temporal ID . . . . . . . . . . . . . . . . . . . . . 20
5.2.17. Spatial ID . . . . . . . . . . . . . . . . . . . . . 20
5.2.18. Codec . . . . . . . . . . . . . . . . . . . . . . . . 20
5.2.19. Mimetype . . . . . . . . . . . . . . . . . . . . . . 21
5.2.20. Framerate . . . . . . . . . . . . . . . . . . . . . . 21
5.2.21. Timescale . . . . . . . . . . . . . . . . . . . . . . 21
5.2.22. Maximum Bitrate . . . . . . . . . . . . . . . . . . . 21
5.2.23. Average Bitrate . . . . . . . . . . . . . . . . . . . 21
5.2.24. Maximum GOP Duration . . . . . . . . . . . . . . . . 21
5.2.25. Maximum Group Duration . . . . . . . . . . . . . . . 22
5.2.26. Width . . . . . . . . . . . . . . . . . . . . . . . . 22
5.2.27. Height . . . . . . . . . . . . . . . . . . . . . . . 22
5.2.28. Audio sample rate . . . . . . . . . . . . . . . . . . 22
5.2.29. Channel configuration . . . . . . . . . . . . . . . . 22
5.2.30. Display width . . . . . . . . . . . . . . . . . . . . 22
5.2.31. Display height . . . . . . . . . . . . . . . . . . . 23
5.2.32. Language . . . . . . . . . . . . . . . . . . . . . . 23
5.2.33. Parent name . . . . . . . . . . . . . . . . . . . . . 23
5.2.34. Parent namespace . . . . . . . . . . . . . . . . . . 23
5.2.35. Track duration . . . . . . . . . . . . . . . . . . . 23
5.2.36. Connection URI . . . . . . . . . . . . . . . . . . . 23
5.2.37. Token . . . . . . . . . . . . . . . . . . . . . . . . 24
5.2.38. Encryption scheme . . . . . . . . . . . . . . . . . . 24
5.2.39. Cipher suite . . . . . . . . . . . . . . . . . . . . 24
5.2.40. Key ID . . . . . . . . . . . . . . . . . . . . . . . 25
5.2.41. Track Base Key . . . . . . . . . . . . . . . . . . . 26
5.2.42. Authorization Info . . . . . . . . . . . . . . . . . 26
5.2.43. Token Delivery via URI . . . . . . . . . . . . . . . 27
5.2.44. Accessibility . . . . . . . . . . . . . . . . . . . . 27
5.3. Delta updates . . . . . . . . . . . . . . . . . . . . . . 28
5.4. Variable Substitution . . . . . . . . . . . . . . . . . . 29
5.4.1. Variable Syntax . . . . . . . . . . . . . . . . . . . 29
5.4.2. Variable Resolution . . . . . . . . . . . . . . . . . 29
5.5. Catalog Compression . . . . . . . . . . . . . . . . . . . 30
5.6. Catalog Examples . . . . . . . . . . . . . . . . . . . . 30
5.6.1. Time-aligned Audio/Video Tracks with single
quality . . . . . . . . . . . . . . . . . . . . . . . 30
5.6.2. Simulcast video tracks - 3 alternate qualities along
with audio . . . . . . . . . . . . . . . . . . . . . 31
5.6.3. SVC video tracks with 2 spatial and 2 temporal
qualities . . . . . . . . . . . . . . . . . . . . . . 33
5.6.4. Delta update - adding two tracks . . . . . . . . . . 35
5.6.5. Delta update removing tracks . . . . . . . . . . . . 36
Law & Nandakumar Expires 4 December 2026 [Page 3]
Internet-Draft MOQT Streaming Format June 2026
5.6.6. Time-aligned Audio/Video Tracks with custom field
values . . . . . . . . . . . . . . . . . . . . . . . 37
5.6.7. Time-aligned VOD Audio/Video Tracks . . . . . . . . . 38
5.6.8. Encrypted Audio/Video Tracks . . . . . . . . . . . . 39
5.6.9. Media timeline and Event timeline . . . . . . . . . . 40
5.6.10. Media timeline template . . . . . . . . . . . . . . . 42
5.6.11. Video track with embedded captions and SCTE-35
events . . . . . . . . . . . . . . . . . . . . . . . 43
5.6.12. Video track with CEA-708 captions . . . . . . . . . . 45
5.6.13. Terminating a live broadcast . . . . . . . . . . . . 45
5.6.14. Variable Substitution for personalized delivery . . . 46
5.6.15. Time-aligned Audio/Video Tracks with Authorization . 47
5.6.16. Publish tracks for logs and metrics . . . . . . . . . 48
6. Media transmission . . . . . . . . . . . . . . . . . . . . . 50
6.1. Group numbering . . . . . . . . . . . . . . . . . . . . . 50
6.2. Object Numbering . . . . . . . . . . . . . . . . . . . . 50
7. Media Timeline track . . . . . . . . . . . . . . . . . . . . 51
7.1. Media Timeline track payload . . . . . . . . . . . . . . 51
7.1.1. Explicit entry format . . . . . . . . . . . . . . . . 51
7.2. Media Timeline Catalog requirements . . . . . . . . . . . 52
7.3. Media Timeline track updating . . . . . . . . . . . . . . 52
7.4. Media Timeline Template . . . . . . . . . . . . . . . . . 52
7.4.1. Template Format . . . . . . . . . . . . . . . . . . . 52
7.4.2. Template Immutability . . . . . . . . . . . . . . . . 53
8. Event Timeline track . . . . . . . . . . . . . . . . . . . . 54
8.1. Event Timeline data format . . . . . . . . . . . . . . . 54
8.2. Event Timeline Catalog requirements . . . . . . . . . . . 54
8.3. Event Timeline track updating . . . . . . . . . . . . . . 55
8.4. Event timeline track examples . . . . . . . . . . . . . . 55
8.4.1. Event timeline track with wallclock time indexing . . 55
8.4.2. Event timeline track with MOQT Location indexing . . 56
9. Log track . . . . . . . . . . . . . . . . . . . . . . . . . . 56
9.1. Log track payload . . . . . . . . . . . . . . . . . . . . 56
9.2. Log track namespace and name . . . . . . . . . . . . . . 56
9.3. Log track Group ID and Object ID . . . . . . . . . . . . 57
9.4. Log track catalog requirements . . . . . . . . . . . . . 57
10. Metrics track . . . . . . . . . . . . . . . . . . . . . . . . 57
10.1. Metrics track payload . . . . . . . . . . . . . . . . . 57
10.2. Metrics track namespace and name . . . . . . . . . . . . 58
10.3. Metrics track Group ID and Object ID . . . . . . . . . . 58
10.4. Metrics track catalog requirements . . . . . . . . . . . 58
10.5. Well-known event timeline types . . . . . . . . . . . . 59
11. Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . 59
11.1. URL construction and interpretation . . . . . . . . . . 59
11.1.1. Reserved fragment parameters . . . . . . . . . . . . 62
11.1.2. MSF Namespace-Name String Encoding . . . . . . . . . 63
11.1.3. Example MSF URLs . . . . . . . . . . . . . . . . . . 64
11.2. Initiating a broadcast . . . . . . . . . . . . . . . . . 65
Law & Nandakumar Expires 4 December 2026 [Page 4]
Internet-Draft MOQT Streaming Format June 2026
11.3. Ending a live broadcast . . . . . . . . . . . . . . . . 65
11.4. Authorization . . . . . . . . . . . . . . . . . . . . . 65
11.4.1. Discovering Authorization Requirements . . . . . . . 65
11.4.2. Token Acquisition . . . . . . . . . . . . . . . . . 66
11.4.3. Presenting Authorization . . . . . . . . . . . . . . 66
11.4.4. Handling Authorization Failures . . . . . . . . . . 67
12. MSF Properties . . . . . . . . . . . . . . . . . . . . . . . 67
12.1. Compression Signaling . . . . . . . . . . . . . . . . . 67
12.1.1. MSF_COMPRESSION Track Property . . . . . . . . . . . 68
12.1.2. MSF_COMPRESSION Object Property . . . . . . . . . . 69
13. Security Considerations . . . . . . . . . . . . . . . . . . . 69
14. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 69
14.1. "MOQT URI Fragment Types" registry . . . . . . . . . . . 69
14.2. "MSF Event Timeline Types" registry . . . . . . . . . . 69
14.3. MSF_COMPRESSION Track Property . . . . . . . . . . . . . 70
14.4. MSF_COMPRESSION Object Property . . . . . . . . . . . . 70
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 71
15.1. Normative References . . . . . . . . . . . . . . . . . . 71
15.2. Informative References . . . . . . . . . . . . . . . . . 73
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 74
Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 74
1. Introduction
MOQT Streaming Format (MSF) is a media format designed to deliver LOC
[LOC] compliant media content over Media Over QUIC Transport (MOQT)
[MoQTransport]. MSF works by fragmenting the bitstream into objects
that can be independently transmitted. MSF leverages a catalog
format to describe the output of the original publisher. MSF
specifies how content should be packaged and signaled, defines how
the catalog communicates the content, specifies prioritization
strategies for real-time and workflows for beginning and terminating
broadcasts. MSF also details how end-subscribers may perform
adaptive bitrate switching. MSF is targeted at real-time and
interactive levels of live latency, as well as VOD content.
This document describes version 1 of the streaming format.
2. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
Law & Nandakumar Expires 4 December 2026 [Page 5]
Internet-Draft MOQT Streaming Format June 2026
This document uses the conventions detailed in Section 1.3 of
[RFC9000] when describing the binary encoding.
3. Scope
The purpose of MSF is to provide an interoperable media streaming
format operating over [MoQTransport]. Interoperability implies that:
* An original publisher can package incoming media content into
tracks, prepare a catalog and announce the availability of the
content to an MOQT relay. Media content refers to audio and video
data, as well as ancillary data such as captions, subtitles,
accessibility and other timed-text data.
* An MOQT relay can process the announcement as well as cache and
propagate the tracks, both to other relays or to the final
subscriber.
* A final subscriber can parse the catalog, request tracks, decode
and render the received media data.
MSF is intended to provide a format for delivering commercial media
content. To that end, the following features are within scope:
* Video codecs - all codecs supported by [LOC]
* Audio codecs - all audio codecs supported by [LOC]
* Catalog track - describes the availability and characteristics of
content produced by the original publisher.
* Timeline track - describes the relationship between MOQT Group and
Object IDs to media time.
* Token-based authorization and access control
* Captions + Subtitles - support for [WEBVTT] and [IMSC1]
transmission
* Latency support across multiple regimes (thresholds are
informative only and describe the delay between the original
publisher placing the content on the wire and the final subscriber
rendering it)
* Real-time - less than 500ms
* Interactive - between 500ms and 2500ms
Law & Nandakumar Expires 4 December 2026 [Page 6]
Internet-Draft MOQT Streaming Format June 2026
* Standard - above 2500ms
* VOD latency - content that was previously produced, is no longer
live and is available indefinitely.
* Content encryption
* ABR between time-synced tracks - subscribers may switch between
tracks at different quality levels in order to maximize visual or
audio quality under conditions of throughput variability.
* Capable of delivering interstitial advertising.
* Logs and analytics management - support for the reporting of
client-side QoE and relay delivery actions via publish tracks
using [MOQLOG] and [MOQMETRICS].
Initial versions of MSF will prioritize basic features necessary to
exercise interoperability across delivery systems. Later versions
will add commercially necessary features.
4. Media packaging
MSF delivers LOC [LOC] packaged media bitstreams.
4.1. LOC packaging
This specification references Low Overhead Container (LOC) [LOC] to
define how audio and video content is packaged. With this packaging
mode, each EncodedAudioChunk or EncodedVideoChunk sample is placed in
a separate MOQT Object. Samples that belong to the same Group of
Pictures (GOP) MUST be placed within the same MOQT Group.
When LOC packaging is used for a track, the catalog packaging
attribute (Section 5.2.4) MUST be present and it MUST be populated
with a value of "loc".
4.2. Time-alignment
MSF Tracks MAY be time-aligned. Those that are, are subject to the
following requirements:
* Tracks advertised in the catalog as belonging to a common
alternate group MUST be time-aligned.
* The render duration of the first media object of each equally
numbered MOQT Group, after decoding, SHOULD have overlapping
presentation time.
Law & Nandakumar Expires 4 December 2026 [Page 7]
Internet-Draft MOQT Streaming Format June 2026
A consequence of this restriction is that an MSF receiver SHOULD be
able to cleanly switch between time-aligned media tracks at group
boundaries.
If time-aligned media tracks do not have overlapping presentation
time at equally-numbered group boundaries, then an alternate
mechanism, not defined by this specification, must be provided to the
client to enable it to switch smoothly between time-aligned, but
numerically dissimilar, Group IDs.
4.3. Content protection and encryption
MSF supports end-to-end encryption of media content using MoQ Secure
Objects [SecureObjects]. When encryption is enabled, the payload of
LOC-packaged media objects is encrypted and authenticated, while
relays can still route content based on unencrypted header
information.
4.3.1. Encryption scheme signaling
The encryption scheme and parameters are signaled in the catalog
using the following track-level fields:
* encryptionScheme Section 5.2.38 - identifies the encryption
mechanism
* cipherSuite Section 5.2.39 - specifies the AEAD algorithm
* keyId Section 5.2.40 - identifies the key material for decryption
* trackBaseKey Section 5.2.41 - the base key material for this track
When the encryptionScheme field is present in a track definition,
subscribers MUST decrypt the object payload using the specified
scheme before processing.
4.3.2. Key management
The keyId and trackBaseKey values are obtained from an external key
management system and the mechanism for obtaining these values is out
of scope for this specification. Examples of key management systems
include MLS-based key distribution [E2EE-MLS] or other out-of-band
key exchange mechanisms.
Depending on the key management mechanism in use, a keyId MAY be
scoped to:
* A single track
Law & Nandakumar Expires 4 December 2026 [Page 8]
Internet-Draft MOQT Streaming Format June 2026
* A single MoQ Session
* Multiple tracks across one or more MoQ sessions
Publishers and subscribers MUST use the same key management system
and agree on the keyId scope semantics for interoperable operation.
4.3.3. Recommended encryption scheme
The RECOMMENDED encryption scheme for MSF is "moq-secure-objects".
Implementations supporting content encryption MUST implement the
"moq-secure-objects" scheme as defined in [SecureObjects].
When using the "moq-secure-objects" scheme:
* The cipherSuite field MUST be present and set to a supported
cipher suite value
* The keyId field MUST be present to identify the key material
* The trackBaseKey field MUST be present to provide the base key
material
4.3.4. Encrypted object structure
For LOC-packaged tracks with encryption enabled (see [SecureObjects],
Section 4):
* The immutable header extensions (including Group ID and Object ID)
remain in plaintext and are authenticated
* The object payload is encrypted and authenticated using the
specified cipher
* Private header extensions (type 0xA) are encrypted alongside the
payload
5. Catalog
A Catalog is an MOQT Track that provides information about the other
tracks being produced by a MSF publisher. A Catalog is used by MSF
publishers for advertising their output and for subscribers in
consuming that output. The payload of the Catalog object is opaque
to Relays and can be end-to-end encrypted. The Catalog provides the
names and namespaces of the tracks being produced, along with the
relationship between tracks, properties of the tracks that consumers
may use for selection and any relevant initialization data.
Law & Nandakumar Expires 4 December 2026 [Page 9]
Internet-Draft MOQT Streaming Format June 2026
The catalog track MUST have a case-sensitive Track Name of "catalog".
A catalog object MAY be independent of other catalog objects or it
MAY represent a delta update of a prior catalog object. The first
catalog object published within a new group MUST be independent and
MUST provide a complete catalog that does not require any prior
catalog object for interpretation. Any catalog updates that precede
the first Object of the latest Group MUST be ignored.
A catalog object SHOULD be published only when the availability of
tracks changes, or after a period of time has passed such that the
catalog object might fall out of cache in a delivery network.
Each catalog update MUST be mapped to an MOQT Object. All catalog
updates, both independent and delta, MUST be mapped to MOQT sub-group
0. The first Object (with Object ID 0) in any Group in a catalog
track MUST hold an independent copy of the catalog. All subsequent
Objects within that Group (i.e Objects IDs >= 1) MUST hold a delta
update. As soon as an independent update is produced, it MUST be
placed at the start of a new Group.
Subscribers accessing the catalog MUST use SUBSCRIBE with a Joining
FETCH (offset = 0) in order to obtain the latest complete catalog
along with all subsequent catalog objects, including delta updates,
that follow.
A catalog is a JSON [JSON] document, comprised of a series of
mandatory and optional fields. At a minimum, a catalog MUST provide
all mandatory fields. Some fields are conditional depending on the
type of content carried. A producer MAY add additional fields to the
ones described in this draft. Custom field names MUST NOT collide
with field names described in this draft.
A parser MUST ignore fields it does not understand.
5.1. Root Catalog Fields
Table 1 lists the fields defined at the root of the catalog JSON
object.
Law & Nandakumar Expires 4 December 2026 [Page 10]
Internet-Draft MOQT Streaming Format June 2026
+==========================+===============+===============+
| Field | Name | Definition |
+==========================+===============+===============+
| MSF version | version | Section 5.1.1 |
+--------------------------+---------------+---------------+
| Generated at | generatedAt | Section 5.1.2 |
+--------------------------+---------------+---------------+
| Is Complete | isComplete | Section 5.1.3 |
+--------------------------+---------------+---------------+
| Tracks | tracks | Section 5.1.4 |
+--------------------------+---------------+---------------+
| Publish tracks | publishTracks | Section 5.1.5 |
+--------------------------+---------------+---------------+
| Delta update | deltaUpdate | Section 5.1.6 |
+--------------------------+---------------+---------------+
| Initialization Data List | initDataList | Section 5.1.7 |
+--------------------------+---------------+---------------+
Table 1
5.1.1. MSF version
Required: Yes JSON Type: String Location: Root Catalog
Specifies the version of MSF referenced by this catalog. There is no
guarantee that future catalog versions are backwards compatible and
field definitions and interpretation may change between versions. A
subscriber MUST NOT attempt to parse a catalog version which it does
not understand.
For usage against IETF Internet-Draft releases, follow the convention
of specifying the version as "draft-XX". For example "draft-03"
refers to the -03 draft release.
5.1.2. Generated at
Required: Optional JSON Type: Number Location: Root Catalog
The wallclock time at which this catalog instance was generated,
expressed as the number of milliseconds that have elapsed since
January 1, 1970 (midnight UTC/GMT). This field SHOULD NOT be
included if the isLive field is false.
5.1.3. Is Complete
Required: Optional JSON Type: Boolean Location: Root Catalog
Law & Nandakumar Expires 4 December 2026 [Page 11]
Internet-Draft MOQT Streaming Format June 2026
A catalog-level indication that the broadcast is complete. This is a
commitment that all tracks are complete, no new tracks will be added
to the catalog, and no new content will be published on any track.
Note that even if all individual tracks have isLive Section 5.2.7 set
to FALSE, new tracks could still be added to the catalog until
isComplete is set to TRUE. This field MUST NOT be included if it is
FALSE. This field MUST NOT be removed from a catalog once it has
been added.
5.1.4. Tracks
Required: Yes JSON Type: Array Location: Root Catalog
An array of track objects Section 5.2.1.
5.1.5. Publish tracks
Location: R Required: Optional JSON Type: Array
An array of publish track objects. Publish tracks define tracks to
which the subscriber can publish data, such as logs, metrics, or
other QoE data. This enables bi-directional communication where the
subscriber acts as a publisher for specific tracks. Each publish
track object follows the same structure as a regular track object
Section 5.2.1 but is used for the reverse direction of data flow.
5.1.6. Delta update
Required: Optional JSON Type: Array Location: Root Catalog
An ordered Array of operation objects that specify changes to apply
to the catalog. If this field is present, the catalog represents a
delta (or partial) update with a restricted set of fields and special
processing rules - see Section 5.3. If this field is absent, the
catalog is independent.
Operations are applied sequentially in the order they appear in the
array. Each operation object MUST contain an "op" field indicating
the operation type, and a "tracks" field containing an Array of track
objects Section 5.2.1. The following operation types are defined:
* "add" - Add new tracks that have not previously been declared.
The value of the "tracks" field is an Array of track objects
Section 5.2.1.
Law & Nandakumar Expires 4 December 2026 [Page 12]
Internet-Draft MOQT Streaming Format June 2026
* "remove" - Remove tracks that have been previously declared. The
value of the "tracks" field is an Array of track objects
Section 5.2.1. Each track object MUST include a Track Name
Section 5.2.3 field, MAY include a Track Namespace Section 5.2.2
field, and MUST NOT hold any other fields.
* "clone" - Clone new tracks from previously declared tracks. The
value of the "tracks" field is an Array of track objects
Section 5.2.1. Each track object MUST include a Parent Name
Section 5.2.33 field and MAY include a Parent namespace
Section 5.2.34 field. The cloned track inherits all attributes
from the parent except the Track Name which MUST be new.
Attributes redefined in the track object override inherited
values.
5.1.7. Initialization Data List
Required: Optional JSON Type: Array Location: Root Catalog
An array of initialization reference objects. Each initialization
reference object has the following fields:
* id : a string defining a reference to this initialization data
which is unique within the scope of the catalog.
* type: as string defining the type of reference. This version of
the specification defines a single allowed type, per the table
below
+========+=============================================+
| Type | Data field definition |
+========+=============================================+
| inline | Base64 [BASE64] encoded initialization data |
+--------+---------------------------------------------+
Table 2
* data: a string holding the init payload as defined by the type.
The Initialization Data List, if present, MUST be located after the
tracks array in the root of the JSON catalog. The purpose of this is
to improve the human readability of the catalog tracks by moving the
verbose init data towards the end of the document.
5.2. Track Object Fields
Table 2 lists the fields defined within each track object.
Law & Nandakumar Expires 4 December 2026 [Page 13]
Internet-Draft MOQT Streaming Format June 2026
+========================+==================+================+
| Field | Name | Definition |
+========================+==================+================+
| Track namespace | namespace | Section 5.2.2 |
+------------------------+------------------+----------------+
| Track name | name | Section 5.2.3 |
+------------------------+------------------+----------------+
| Packaging | packaging | Section 5.2.4 |
+------------------------+------------------+----------------+
| Event timeline type | eventType | Section 5.2.5 |
+------------------------+------------------+----------------+
| Is Live | isLive | Section 5.2.7 |
+------------------------+------------------+----------------+
| Target latency | targetLatency | Section 5.2.8 |
+------------------------+------------------+----------------+
| Buffers | buffers | Section 5.2.9 |
+------------------------+------------------+----------------+
| Track role | role | Section 5.2.6 |
+------------------------+------------------+----------------+
| Track label | label | Section 5.2.10 |
+------------------------+------------------+----------------+
| Render group | renderGroup | Section 5.2.11 |
+------------------------+------------------+----------------+
| Alternate group | altGroup | Section 5.2.12 |
+------------------------+------------------+----------------+
| Initialization ref | initRef | Section 5.2.13 |
+------------------------+------------------+----------------+
| Dependencies | depends | Section 5.2.14 |
+------------------------+------------------+----------------+
| Temporal ID | temporalId | Section 5.2.16 |
+------------------------+------------------+----------------+
| Spatial ID | spatialId | Section 5.2.17 |
+------------------------+------------------+----------------+
| Codec | codec | Section 5.2.18 |
+------------------------+------------------+----------------+
| Mime type | mimeType | Section 5.2.19 |
+------------------------+------------------+----------------+
| Framerate | framerate | Section 5.2.20 |
+------------------------+------------------+----------------+
| Timescale | timescale | Section 5.2.21 |
+------------------------+------------------+----------------+
| Maximum Bitrate | bitrate | Section 5.2.22 |
+------------------------+------------------+----------------+
| Average Bitrate | avgBitrate | Section 5.2.23 |
+------------------------+------------------+----------------+
| Maximum GOP Duration | maxGopDuration | Section 5.2.24 |
+------------------------+------------------+----------------+
| Maximum Group Duration | maxGroupDuration | Section 5.2.25 |
Law & Nandakumar Expires 4 December 2026 [Page 14]
Internet-Draft MOQT Streaming Format June 2026
+------------------------+------------------+----------------+
| Width | width | Section 5.2.26 |
+------------------------+------------------+----------------+
| Height | height | Section 5.2.27 |
+------------------------+------------------+----------------+
| Audio sample rate | samplerate | Section 5.2.28 |
+------------------------+------------------+----------------+
| Channel configuration | channelConfig | Section 5.2.29 |
+------------------------+------------------+----------------+
| Display width | displayWidth | Section 5.2.30 |
+------------------------+------------------+----------------+
| Display height | displayHeight | Section 5.2.31 |
+------------------------+------------------+----------------+
| Language | lang | Section 5.2.32 |
+------------------------+------------------+----------------+
| Parent name | parentName | Section 5.2.33 |
+------------------------+------------------+----------------+
| Parent namespace | parentNamespace | Section 5.2.34 |
+------------------------+------------------+----------------+
| Track duration | trackDuration | Section 5.2.35 |
+------------------------+------------------+----------------+
| Authorization Info | authInfo | Section 5.2.42 |
+------------------------+------------------+----------------+
| Accessibility | accessibility | Section 5.2.44 |
+------------------------+------------------+----------------+
Table 3
5.2.1. Tracks object
A track object is a JSON Object containing a collection of fields
whose location is specified in Table 2.
5.2.2. Track namespace
Required: Optional JSON Type: String Location: Track Object
The name space under which the track name is defined. See section
2.3 of [MoQTransport]. The track namespace is optional. If it is
not declared within a track, then each track MUST inherit the
namespace of the catalog track. A namespace declared in a track
object overrides any inherited name space.
5.2.3. Track name
Required: Yes JSON Type: String Location: Track Object
Law & Nandakumar Expires 4 December 2026 [Page 15]
Internet-Draft MOQT Streaming Format June 2026
A string defining the name of the track. See section 2.3 of
[MoQTransport]. Within the catalog, track names MUST be unique per
namespace.
5.2.4. Packaging
Required: Yes JSON Type: String Location: Track Object
A string defining the type of payload encapsulation. Allowed values
are strings as defined in Table 3.
+================+===============+==================+
| Name | Value | Reference |
+================+===============+==================+
| LOC | loc | See RFC XXXX |
+----------------+---------------+------------------+
| Media Timeline | mediatimeline | See Section 7 |
+----------------+---------------+------------------+
| Event Timeline | eventtimeline | See Section 8 |
+----------------+---------------+------------------+
| MoQ Log | moqlog | See [MOQLOG] |
+----------------+---------------+------------------+
| MoQ Metrics | moqmetrics | See [MOQMETRICS] |
+----------------+---------------+------------------+
Table 4
Table 3: Allowed packaging values
5.2.5. Event timeline type
Required: Optional JSON Type: String Location: Track Object
A String defining the type & structure of the data contained within
the data field of the Event timeline track. Types are defined by the
application provider and are not centrally registered. Implementers
are encouraged to use a unique naming scheme, such as Reverse Domain
Name Notation, where domain name components are listed in reverse
order (e.g., "com.example.myeventtype"), to avoid naming collisions.
This field is required if the Section 5.2.4 value is "eventtimeline".
This field MUST NOT be used if the packaging value is not
"eventtimeline".
5.2.6. Track role
Required: Optional JSON Type: String Location: Track Object
Law & Nandakumar Expires 4 December 2026 [Page 16]
Internet-Draft MOQT Streaming Format June 2026
A string defining the role of content carried by the track.
Specified roles are described in Table 4. These role values are
case-sensitive.
This role field MAY be used in conjunction with the Mimetype
Section 5.2.19 to fully describe the content of the track.
Table 4: Reserved track roles
+==================+==========================+
| Role | Description |
+==================+==========================+
| audiodescription | An audio description for |
| | visually impaired users |
+------------------+--------------------------+
| video | Visual content |
+------------------+--------------------------+
| audio | Audio content |
+------------------+--------------------------+
| mediatimeline | An MSF media timeline |
| | Section 7 |
+------------------+--------------------------+
| eventtimeline | An MSF event timeline |
| | Section 8 |
+------------------+--------------------------+
| caption | A textual representation |
| | of the audio track |
+------------------+--------------------------+
| subtitle | A transcription of the |
| | spoken dialogue |
+------------------+--------------------------+
| signlanguage | A visual track for |
| | hearing impaired users. |
+------------------+--------------------------+
| log | A log publishing track |
| | per [MOQLOG]. |
+------------------+--------------------------+
| metrics | A metrics publishing |
| | track per [MOQMETRICS]. |
+------------------+--------------------------+
Table 5
Custom roles MAY be used as long as they do not collide with the
specified roles.
Law & Nandakumar Expires 4 December 2026 [Page 17]
Internet-Draft MOQT Streaming Format June 2026
5.2.7. Is Live
Required: Yes JSON Type: Boolean Location: Track Object
A track-level indication of whether new Objects will be added to this
specific track. True if new Objects will be added to the track.
False if no new Objects will be added to the track. A False value is
sent under two possible conditions: * the publisher of a previously
live track has ended the track. * the track is Video-On-Demand (VOD)
and was never live. A True value MUST never follow a False value.
5.2.8. Target latency
Required: Optional JSON Type: Number Location: Track Object
The target latency in milliseconds. Target latency is defined as the
offset in wallclock time between when content was encoded and when it
is displayed to the end user. For example, if a frame of video is
encoded at 10:08:32.638 UTC and the target latency is 5000, then that
frame should be rendered to the end-user at 10:08:37.638 UTC. If
isLive is FALSE, this field MUST be ignored. All tracks belonging to
the same render group MUST have identical target latencies. All
tracks belonging to the same alternate group MUST have identical
target latencies. If this field is absent from the track definition,
and isLive is TRUE, then the player MAY choose the latency with which
it renders the content.
This property MUST NOT be present if the buffers Section 5.2.9
property is present within a track definition.
5.2.9. Buffers
Required: Optional JSON Type: Object Location: Track Object
An object defining a set of target buffers. Buffer is defined as the
duration of media data that MUST be buffered before decoding
commences. This is typically known as a forward or jitter-buffer in
a media player.Players with identical buffer lengths are likely to be
synchronized. The target buffer object has these keys:
* target : defines the target buffer in integer milliseconds.
Players SHOULD attempt to stabilize playback at this value.
* min : defines the minimum buffer in milliseconds. Players SHOULD