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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
|
Independent Submission R. Pantos, Ed.
Request for Comments: 8216 Apple, Inc.
Category: Informational W. May
ISSN: 2070-1721 MLB Advanced Media
August 2017
HTTP Live Streaming
Abstract
This document describes a protocol for transferring unbounded streams
of multimedia data. It specifies the data format of the files and
the actions to be taken by the server (sender) and the clients
(receivers) of the streams. It describes version 7 of this protocol.
Status of This Memo
This document is not an Internet Standards Track specification; it is
published for informational purposes.
This is a contribution to the RFC Series, independently of any other
RFC stream. The RFC Editor has chosen to publish this document at
its discretion and makes no statement about its value for
implementation or deployment. Documents approved for publication by
the RFC Editor are not a candidate for any level of Internet
Standard; see Section 2 of RFC 7841.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc8216.
Copyright Notice
Copyright (c) 2017 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
(http://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.
This document may not be modified, and derivative works of it may not
be created, except to format it for publication as an RFC or to
translate it into languages other than English.
Pantos & May Informational [Page 1]
^L
RFC 8216 HTTP Live Streaming August 2017
Table of Contents
1. Introduction to HTTP Live Streaming .............................4
2. Overview ........................................................4
3. Media Segments ..................................................6
3.1. Supported Media Segment Formats ............................6
3.2. MPEG-2 Transport Streams ...................................7
3.3. Fragmented MPEG-4 ..........................................7
3.4. Packed Audio ...............................................8
3.5. WebVTT .....................................................8
4. Playlists .......................................................9
4.1. Definition of a Playlist ..................................10
4.2. Attribute Lists ...........................................11
4.3. Playlist Tags .............................................12
4.3.1. Basic Tags .........................................12
4.3.1.1. EXTM3U ....................................12
4.3.1.2. EXT-X-VERSION .............................12
4.3.2. Media Segment Tags .................................13
4.3.2.1. EXTINF ....................................13
4.3.2.2. EXT-X-BYTERANGE ...........................14
4.3.2.3. EXT-X-DISCONTINUITY .......................14
4.3.2.4. EXT-X-KEY .................................15
4.3.2.5. EXT-X-MAP .................................17
4.3.2.6. EXT-X-PROGRAM-DATE-TIME ...................18
4.3.2.7. EXT-X-DATERANGE ...........................18
4.3.2.7.1. Mapping SCTE-35 into
EXT-X-DATERANGE ................20
4.3.3. Media Playlist Tags ................................22
4.3.3.1. EXT-X-TARGETDURATION ......................22
4.3.3.2. EXT-X-MEDIA-SEQUENCE ......................22
4.3.3.3. EXT-X-DISCONTINUITY-SEQUENCE ..............23
4.3.3.4. EXT-X-ENDLIST .............................23
4.3.3.5. EXT-X-PLAYLIST-TYPE .......................24
4.3.3.6. EXT-X-I-FRAMES-ONLY .......................24
4.3.4. Master Playlist Tags ...............................25
4.3.4.1. EXT-X-MEDIA ...............................25
4.3.4.1.1. Rendition Groups ...............28
4.3.4.2. EXT-X-STREAM-INF ..........................29
4.3.4.2.1. Alternative Renditions .........32
4.3.4.3. EXT-X-I-FRAME-STREAM-INF ..................33
4.3.4.4. EXT-X-SESSION-DATA ........................34
4.3.4.5. EXT-X-SESSION-KEY .........................35
4.3.5. Media or Master Playlist Tags ......................35
4.3.5.1. EXT-X-INDEPENDENT-SEGMENTS ................35
4.3.5.2. EXT-X-START ...............................36
Pantos & May Informational [Page 2]
^L
RFC 8216 HTTP Live Streaming August 2017
5. Key Files ......................................................37
5.1. Structure of Key Files ....................................37
5.2. IV for AES-128 ............................................37
6. Client/Server Responsibilities .................................37
6.1. Introduction ..............................................37
6.2. Server Responsibilities ...................................37
6.2.1. General Server Responsibilities ....................37
6.2.2. Live Playlists .....................................40
6.2.3. Encrypting Media Segments ..........................41
6.2.4. Providing Variant Streams ..........................42
6.3. Client Responsibilities ...................................44
6.3.1. General Client Responsibilities ....................44
6.3.2. Loading the Media Playlist File ....................44
6.3.3. Playing the Media Playlist File ....................45
6.3.4. Reloading the Media Playlist File ..................46
6.3.5. Determining the Next Segment to Load ...............47
6.3.6. Decrypting Encrypted Media Segments ................47
7. Protocol Version Compatibility .................................48
8. Playlist Examples ..............................................50
8.1. Simple Media Playlist .....................................50
8.2. Live Media Playlist Using HTTPS ...........................50
8.3. Playlist with Encrypted Media Segments ....................51
8.4. Master Playlist ...........................................51
8.5. Master Playlist with I-Frames .............................51
8.6. Master Playlist with Alternative Audio ....................52
8.7. Master Playlist with Alternative Video ....................52
8.8. Session Data in a Master Playlist .........................53
8.9. CHARACTERISTICS Attribute Containing Multiple
Characteristics ...........................................54
8.10. EXT-X-DATERANGE Carrying SCTE-35 Tags ....................54
9. IANA Considerations ............................................54
10. Security Considerations .......................................55
11. References ....................................................56
11.1. Normative References .....................................56
11.2. Informative References ...................................59
Contributors ......................................................60
Authors' Addresses ................................................60
Pantos & May Informational [Page 3]
^L
RFC 8216 HTTP Live Streaming August 2017
1. Introduction to HTTP Live Streaming
HTTP Live Streaming provides a reliable, cost-effective means of
delivering continuous and long-form video over the Internet. It
allows a receiver to adapt the bit rate of the media to the current
network conditions in order to maintain uninterrupted playback at the
best possible quality. It supports interstitial content boundaries.
It provides a flexible framework for media encryption. It can
efficiently offer multiple renditions of the same content, such as
audio translations. It offers compatibility with large-scale HTTP
caching infrastructure to support delivery to large audiences.
Since the Internet-Draft was first posted in 2009, HTTP Live
Streaming has been implemented and deployed by a wide array of
content producers, tools vendors, distributors, and device
manufacturers. In the subsequent eight years, the protocol has been
refined by extensive review and discussion with a variety of media
streaming implementors.
The purpose of this document is to facilitate interoperability
between HTTP Live Streaming implementations by describing the media
transmission protocol. Using this protocol, a client can receive a
continuous stream of media from a server for concurrent presentation.
This document describes version 7 of the protocol.
2. Overview
A multimedia presentation is specified by a Uniform Resource
Identifier (URI) [RFC3986] to a Playlist.
A Playlist is either a Media Playlist or a Master Playlist. Both are
UTF-8 text files containing URIs and descriptive tags.
A Media Playlist contains a list of Media Segments, which, when
played sequentially, will play the multimedia presentation.
Pantos & May Informational [Page 4]
^L
RFC 8216 HTTP Live Streaming August 2017
Here is an example of a Media Playlist:
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
The first line is the format identifier tag #EXTM3U. The line
containing #EXT-X-TARGETDURATION says that all Media Segments will be
10 seconds long or less. Then, three Media Segments are declared.
The first and second are 9.009 seconds long; the third is 3.003
seconds.
To play this Playlist, the client first downloads it and then
downloads and plays each Media Segment declared within it. The
client reloads the Playlist as described in this document to discover
any added segments. Data SHOULD be carried over HTTP [RFC7230], but,
in general, a URI can specify any protocol that can reliably transfer
the specified resource on demand.
A more complex presentation can be described by a Master Playlist. A
Master Playlist provides a set of Variant Streams, each of which
describes a different version of the same content.
A Variant Stream includes a Media Playlist that specifies media
encoded at a particular bit rate, in a particular format, and at a
particular resolution for media containing video.
A Variant Stream can also specify a set of Renditions. Renditions
are alternate versions of the content, such as audio produced in
different languages or video recorded from different camera angles.
Clients should switch between different Variant Streams to adapt to
network conditions. Clients should choose Renditions based on user
preferences.
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.
Pantos & May Informational [Page 5]
^L
RFC 8216 HTTP Live Streaming August 2017
3. Media Segments
A Media Playlist contains a series of Media Segments that make up the
overall presentation. A Media Segment is specified by a URI and
optionally a byte range.
The duration of each Media Segment is indicated in the Media Playlist
by its EXTINF tag (Section 4.3.2.1).
Each segment in a Media Playlist has a unique integer Media Sequence
Number. The Media Sequence Number of the first segment in the Media
Playlist is either 0 or declared in the Playlist (Section 4.3.3.2).
The Media Sequence Number of every other segment is equal to the
Media Sequence Number of the segment that precedes it plus one.
Each Media Segment MUST carry the continuation of the encoded
bitstream from the end of the segment with the previous Media
Sequence Number, where values in a series such as timestamps and
Continuity Counters MUST continue uninterrupted. The only exceptions
are the first Media Segment ever to appear in a Media Playlist and
Media Segments that are explicitly signaled as discontinuities
(Section 4.3.2.3). Unmarked media discontinuities can trigger
playback errors.
Any Media Segment that contains video SHOULD include enough
information to initialize a video decoder and decode a continuous set
of frames that includes the final frame in the Segment; network
efficiency is optimized if there is enough information in the Segment
to decode all frames in the Segment. For example, any Media Segment
containing H.264 video SHOULD contain an Instantaneous Decoding
Refresh (IDR); frames prior to the first IDR will be downloaded but
possibly discarded.
3.1. Supported Media Segment Formats
All Media Segments MUST be in a format described in this section.
Transport of other media file formats is not defined.
Some media formats require a common sequence of bytes to initialize a
parser before a Media Segment can be parsed. This format-specific
sequence is called the Media Initialization Section. The Media
Initialization Section can be specified by an EXT-X-MAP tag
(Section 4.3.2.5). The Media Initialization Section MUST NOT contain
sample data.
Pantos & May Informational [Page 6]
^L
RFC 8216 HTTP Live Streaming August 2017
3.2. MPEG-2 Transport Streams
MPEG-2 Transport Streams are specified by [ISO_13818].
The Media Initialization Section of an MPEG-2 Transport Stream
Segment is a Program Association Table (PAT) followed by a Program
Map Table (PMT).
Transport Stream Segments MUST contain a single MPEG-2 Program;
playback of Multi-Program Transport Streams is not defined. Each
Transport Stream Segment MUST contain a PAT and a PMT, or have an
EXT-X-MAP tag (Section 4.3.2.5) applied to it. The first two
Transport Stream packets in a Segment without an EXT-X-MAP tag SHOULD
be a PAT and a PMT.
3.3. Fragmented MPEG-4
MPEG-4 Fragments are specified by the ISO Base Media File Format
[ISOBMFF]. Unlike regular MPEG-4 files that have a Movie Box
('moov') that contains sample tables and a Media Data Box ('mdat')
containing the corresponding samples, an MPEG-4 Fragment consists of
a Movie Fragment Box ('moof') containing a subset of the sample table
and a Media Data Box containing those samples. Use of MPEG-4
Fragments does require a Movie Box for initialization, but that Movie
Box contains only non-sample-specific information such as track and
sample descriptions.
A Fragmented MPEG-4 (fMP4) Segment is a "segment" as defined by
Section 3 of [ISOBMFF], including the constraints on Media Data Boxes
in Section 8.16 of [ISOBMFF].
The Media Initialization Section for an fMP4 Segment is an ISO Base
Media File that can initialize a parser for that Segment.
Broadly speaking, fMP4 Segments and Media Initialization Sections are
[ISOBMFF] files that also satisfy the constraints described in this
section.
The Media Initialization Section for an fMP4 Segment MUST contain a
File Type Box ('ftyp') containing a brand that is compatible with
'iso6' or higher. The File Type Box MUST be followed by a Movie Box.
The Movie Box MUST contain a Track Box ('trak') for every Track
Fragment Box ('traf') in the fMP4 Segment, with matching track_ID.
Each Track Box SHOULD contain a sample table, but its sample count
MUST be zero. Movie Header Boxes ('mvhd') and Track Header Boxes
('tkhd') MUST have durations of zero. A Movie Extends Box ('mvex')
MUST follow the last Track Box. Note that a Common Media Application
Format (CMAF) Header [CMAF] meets all these requirements.
Pantos & May Informational [Page 7]
^L
RFC 8216 HTTP Live Streaming August 2017
In an fMP4 Segment, every Track Fragment Box MUST contain a Track
Fragment Decode Time Box ('tfdt'). fMP4 Segments MUST use movie-
fragment-relative addressing. fMP4 Segments MUST NOT use external
data references. Note that a CMAF Segment meets these requirements.
An fMP4 Segment in a Playlist containing the EXT-X-I-FRAMES-ONLY tag
(Section 4.3.3.6) MAY omit the portion of the Media Data Box
following the intra-coded frame (I-frame) sample data.
Each fMP4 Segment in a Media Playlist MUST have an EXT-X-MAP tag
applied to it.
3.4. Packed Audio
A Packed Audio Segment contains encoded audio samples and ID3 tags
that are simply packed together with minimal framing and no per-
sample timestamps. Supported Packed Audio formats are Advanced Audio
Coding (AAC) with Audio Data Transport Stream (ADTS) framing
[ISO_13818_7], MP3 [ISO_13818_3], AC-3 [AC_3], and Enhanced AC-3
[AC_3].
A Packed Audio Segment has no Media Initialization Section.
Each Packed Audio Segment MUST signal the timestamp of its first
sample with an ID3 Private frame (PRIV) tag [ID3] at the beginning of
the segment. The ID3 PRIV owner identifier MUST be
"com.apple.streaming.transportStreamTimestamp". The ID3 payload MUST
be a 33-bit MPEG-2 Program Elementary Stream timestamp expressed as a
big-endian eight-octet number, with the upper 31 bits set to zero.
Clients SHOULD NOT play Packed Audio Segments without this ID3 tag.
3.5. WebVTT
A WebVTT Segment is a section of a WebVTT [WebVTT] file. WebVTT
Segments carry subtitles.
The Media Initialization Section of a WebVTT Segment is the WebVTT
header.
Each WebVTT Segment MUST contain all subtitle cues that are intended
to be displayed during the period indicated by the segment EXTINF
duration. The start time offset and end time offset of each cue MUST
indicate the total display time for that cue, even if part of the cue
time range is outside the Segment period. A WebVTT Segment MAY
contain no cues; this indicates that no subtitles are to be displayed
during that period.
Pantos & May Informational [Page 8]
^L
RFC 8216 HTTP Live Streaming August 2017
Each WebVTT Segment MUST either start with a WebVTT header or have an
EXT-X-MAP tag applied to it.
In order to synchronize timestamps between audio/video and subtitles,
an X-TIMESTAMP-MAP metadata header SHOULD be added to each WebVTT
header. This header maps WebVTT cue timestamps to MPEG-2 (PES)
timestamps in other Renditions of the Variant Stream. Its format is:
X-TIMESTAMP-MAP=LOCAL:<cue time>,MPEGTS:<MPEG-2 time>
e.g., X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:900000
The cue timestamp in the LOCAL attribute MAY fall outside the range
of time covered by the segment.
If a WebVTT segment does not have the X-TIMESTAMP-MAP, the client
MUST assume that the WebVTT cue time of 0 maps to an MPEG-2 timestamp
of 0.
When synchronizing WebVTT with PES timestamps, clients SHOULD account
for cases where the 33-bit PES timestamps have wrapped and the WebVTT
cue times have not.
4. Playlists
This section describes the Playlist files used by HTTP Live
Streaming. In this section, "MUST" and "MUST NOT" specify the rules
for the syntax and structure of legal Playlist files. Playlists that
violate these rules are invalid; clients MUST fail to parse them.
See Section 6.3.2.
The format of the Playlist files is derived from the M3U [M3U]
playlist file format and inherits two tags from that earlier file
format: EXTM3U (Section 4.3.1.1) and EXTINF (Section 4.3.2.1).
In the specification of tag syntax, a string enclosed by <>
identifies a tag parameter; its specific format is described in its
tag definition. If a parameter is further surrounded by [], it is
optional; otherwise, it is required.
Each Playlist file MUST be identifiable either by the path component
of its URI or by HTTP Content-Type. In the first case, the path MUST
end with either .m3u8 or .m3u. In the second, the HTTP Content-Type
MUST be "application/vnd.apple.mpegurl" or "audio/mpegurl". Clients
SHOULD refuse to parse Playlists that are not so identified.
Pantos & May Informational [Page 9]
^L
RFC 8216 HTTP Live Streaming August 2017
4.1. Definition of a Playlist
Playlist files MUST be encoded in UTF-8 [RFC3629]. They MUST NOT
contain any Byte Order Mark (BOM); clients SHOULD fail to parse
Playlists that contain a BOM or do not parse as UTF-8. Playlist
files MUST NOT contain UTF-8 control characters (U+0000 to U+001F and
U+007F to U+009F), with the exceptions of CR (U+000D) and LF
(U+000A). All character sequences MUST be normalized according to
Unicode normalization form "NFC" [UNICODE]. Note that US-ASCII
[US_ASCII] conforms to these rules.
Lines in a Playlist file are terminated by either a single line feed
character or a carriage return character followed by a line feed
character. Each line is a URI, is blank, or starts with the
character '#'. Blank lines are ignored. Whitespace MUST NOT be
present, except for elements in which it is explicitly specified.
Lines that start with the character '#' are either comments or tags.
Tags begin with #EXT. They are case sensitive. All other lines that
begin with '#' are comments and SHOULD be ignored.
A URI line identifies a Media Segment or a Playlist file (see
Section 4.3.4.2). Each Media Segment is specified by a URI and the
tags that apply to it.
A Playlist is a Media Playlist if all URI lines in the Playlist
identify Media Segments. A Playlist is a Master Playlist if all URI
lines in the Playlist identify Media Playlists. A Playlist MUST be
either a Media Playlist or a Master Playlist; all other Playlists are
invalid.
A URI in a Playlist, whether it is a URI line or part of a tag, MAY
be relative. Any relative URI is considered to be relative to the
URI of the Playlist that contains it.
The duration of a Media Playlist is the sum of the durations of the
Media Segments within it.
The segment bit rate of a Media Segment is the size of the Media
Segment divided by its EXTINF duration (Section 4.3.2.1). Note that
this includes container overhead but does not include overhead
imposed by the delivery system, such as HTTP, TCP, or IP headers.
The peak segment bit rate of a Media Playlist is the largest bit rate
of any contiguous set of segments whose total duration is between 0.5
and 1.5 times the target duration. The bit rate of a set is
calculated by dividing the sum of the segment sizes by the sum of the
segment durations.
Pantos & May Informational [Page 10]
^L
RFC 8216 HTTP Live Streaming August 2017
The average segment bit rate of a Media Playlist is the sum of the
sizes (in bits) of every Media Segment in the Media Playlist, divided
by the Media Playlist duration. Note that this includes container
overhead, but not HTTP or other overhead imposed by the delivery
system.
4.2. Attribute Lists
Certain tags have values that are attribute-lists. An attribute-list
is a comma-separated list of attribute/value pairs with no
whitespace.
An attribute/value pair has the following syntax:
AttributeName=AttributeValue
An AttributeName is an unquoted string containing characters from the
set [A..Z], [0..9] and '-'. Therefore, AttributeNames contain only
uppercase letters, not lowercase. There MUST NOT be any whitespace
between the AttributeName and the '=' character, nor between the '='
character and the AttributeValue.
An AttributeValue is one of the following:
o decimal-integer: an unquoted string of characters from the set
[0..9] expressing an integer in base-10 arithmetic in the range
from 0 to 2^64-1 (18446744073709551615). A decimal-integer may be
from 1 to 20 characters long.
o hexadecimal-sequence: an unquoted string of characters from the
set [0..9] and [A..F] that is prefixed with 0x or 0X. The maximum
length of a hexadecimal-sequence depends on its AttributeNames.
o decimal-floating-point: an unquoted string of characters from the
set [0..9] and '.' that expresses a non-negative floating-point
number in decimal positional notation.
o signed-decimal-floating-point: an unquoted string of characters
from the set [0..9], '-', and '.' that expresses a signed
floating-point number in decimal positional notation.
o quoted-string: a string of characters within a pair of double
quotes (0x22). The following characters MUST NOT appear in a
quoted-string: line feed (0xA), carriage return (0xD), or double
quote (0x22). Quoted-string AttributeValues SHOULD be constructed
so that byte-wise comparison is sufficient to test two quoted-
string AttributeValues for equality. Note that this implies case-
sensitive comparison.
Pantos & May Informational [Page 11]
^L
RFC 8216 HTTP Live Streaming August 2017
o enumerated-string: an unquoted character string from a set that is
explicitly defined by the AttributeName. An enumerated-string
will never contain double quotes ("), commas (,), or whitespace.
o decimal-resolution: two decimal-integers separated by the "x"
character. The first integer is a horizontal pixel dimension
(width); the second is a vertical pixel dimension (height).
The type of the AttributeValue for a given AttributeName is specified
by the attribute definition.
A given AttributeName MUST NOT appear more than once in a given
attribute-list. Clients SHOULD refuse to parse such Playlists.
4.3. Playlist Tags
Playlist tags specify either global parameters of the Playlist or
information about the Media Segments or Media Playlists that appear
after them.
4.3.1. Basic Tags
These tags are allowed in both Media Playlists and Master Playlists.
4.3.1.1. EXTM3U
The EXTM3U tag indicates that the file is an Extended M3U [M3U]
Playlist file. It MUST be the first line of every Media Playlist and
every Master Playlist. Its format is:
#EXTM3U
4.3.1.2. EXT-X-VERSION
The EXT-X-VERSION tag indicates the compatibility version of the
Playlist file, its associated media, and its server.
The EXT-X-VERSION tag applies to the entire Playlist file. Its
format is:
#EXT-X-VERSION:<n>
where n is an integer indicating the protocol compatibility version
number.
Pantos & May Informational [Page 12]
^L
RFC 8216 HTTP Live Streaming August 2017
It MUST appear in all Playlists containing tags or attributes that
are not compatible with protocol version 1 to support
interoperability with older clients. Section 7 specifies the minimum
value of the compatibility version number for any given Playlist
file.
A Playlist file MUST NOT contain more than one EXT-X-VERSION tag. If
a client encounters a Playlist with multiple EXT-X-VERSION tags, it
MUST fail to parse it.
4.3.2. Media Segment Tags
Each Media Segment is specified by a series of Media Segment tags
followed by a URI. Some Media Segment tags apply to just the next
segment; others apply to all subsequent segments until another
instance of the same tag.
A Media Segment tag MUST NOT appear in a Master Playlist. Clients
MUST fail to parse Playlists that contain both Media Segment tags and
Master Playlist tags (Section 4.3.4).
4.3.2.1. EXTINF
The EXTINF tag specifies the duration of a Media Segment. It applies
only to the next Media Segment. This tag is REQUIRED for each Media
Segment. Its format is:
#EXTINF:<duration>,[<title>]
where duration is a decimal-floating-point or decimal-integer number
(as described in Section 4.2) that specifies the duration of the
Media Segment in seconds. Durations SHOULD be decimal-floating-
point, with enough accuracy to avoid perceptible error when segment
durations are accumulated. However, if the compatibility version
number is less than 3, durations MUST be integers. Durations that
are reported as integers SHOULD be rounded to the nearest integer.
The remainder of the line following the comma is an optional human-
readable informative title of the Media Segment expressed as UTF-8
text.
Pantos & May Informational [Page 13]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.2.2. EXT-X-BYTERANGE
The EXT-X-BYTERANGE tag indicates that a Media Segment is a sub-range
of the resource identified by its URI. It applies only to the next
URI line that follows it in the Playlist. Its format is:
#EXT-X-BYTERANGE:<n>[@<o>]
where n is a decimal-integer indicating the length of the sub-range
in bytes. If present, o is a decimal-integer indicating the start of
the sub-range, as a byte offset from the beginning of the resource.
If o is not present, the sub-range begins at the next byte following
the sub-range of the previous Media Segment.
If o is not present, a previous Media Segment MUST appear in the
Playlist file and MUST be a sub-range of the same media resource, or
the Media Segment is undefined and the client MUST fail to parse the
Playlist.
A Media Segment without an EXT-X-BYTERANGE tag consists of the entire
resource identified by its URI.
Use of the EXT-X-BYTERANGE tag REQUIRES a compatibility version
number of 4 or greater.
4.3.2.3. EXT-X-DISCONTINUITY
The EXT-X-DISCONTINUITY tag indicates a discontinuity between the
Media Segment that follows it and the one that preceded it.
Its format is:
#EXT-X-DISCONTINUITY
The EXT-X-DISCONTINUITY tag MUST be present if there is a change in
any of the following characteristics:
o file format
o number, type, and identifiers of tracks
o timestamp sequence
Pantos & May Informational [Page 14]
^L
RFC 8216 HTTP Live Streaming August 2017
The EXT-X-DISCONTINUITY tag SHOULD be present if there is a change in
any of the following characteristics:
o encoding parameters
o encoding sequence
See Sections 3, 6.2.1, and 6.3.3 for more information about the EXT-
X-DISCONTINUITY tag.
4.3.2.4. EXT-X-KEY
Media Segments MAY be encrypted. The EXT-X-KEY tag specifies how to
decrypt them. It applies to every Media Segment and to every Media
Initialization Section declared by an EXT-X-MAP tag that appears
between it and the next EXT-X-KEY tag in the Playlist file with the
same KEYFORMAT attribute (or the end of the Playlist file). Two or
more EXT-X-KEY tags with different KEYFORMAT attributes MAY apply to
the same Media Segment if they ultimately produce the same decryption
key. The format is:
#EXT-X-KEY:<attribute-list>
The following attributes are defined:
METHOD
The value is an enumerated-string that specifies the encryption
method. This attribute is REQUIRED.
The methods defined are: NONE, AES-128, and SAMPLE-AES.
An encryption method of NONE means that Media Segments are not
encrypted. If the encryption method is NONE, other attributes
MUST NOT be present.
An encryption method of AES-128 signals that Media Segments are
completely encrypted using the Advanced Encryption Standard (AES)
[AES_128] with a 128-bit key, Cipher Block Chaining (CBC), and
Public-Key Cryptography Standards #7 (PKCS7) padding [RFC5652].
CBC is restarted on each segment boundary, using either the
Initialization Vector (IV) attribute value or the Media Sequence
Number as the IV; see Section 5.2.
An encryption method of SAMPLE-AES means that the Media Segments
contain media samples, such as audio or video, that are encrypted
using the Advanced Encryption Standard [AES_128]. How these media
streams are encrypted and encapsulated in a segment depends on the
Pantos & May Informational [Page 15]
^L
RFC 8216 HTTP Live Streaming August 2017
media encoding and the media format of the segment. fMP4 Media
Segments are encrypted using the 'cbcs' scheme of Common
Encryption [COMMON_ENC]. Encryption of other Media Segment
formats containing H.264 [H_264], AAC [ISO_14496], AC-3 [AC_3],
and Enhanced AC-3 [AC_3] media streams is described in the HTTP
Live Streaming (HLS) Sample Encryption specification [SampleEnc].
The IV attribute MAY be present; see Section 5.2.
URI
The value is a quoted-string containing a URI that specifies how
to obtain the key. This attribute is REQUIRED unless the METHOD
is NONE.
IV
The value is a hexadecimal-sequence that specifies a 128-bit
unsigned integer Initialization Vector to be used with the key.
Use of the IV attribute REQUIRES a compatibility version number of
2 or greater. See Section 5.2 for when the IV attribute is used.
KEYFORMAT
The value is a quoted-string that specifies how the key is
represented in the resource identified by the URI; see Section 5
for more detail. This attribute is OPTIONAL; its absence
indicates an implicit value of "identity". Use of the KEYFORMAT
attribute REQUIRES a compatibility version number of 5 or greater.
KEYFORMATVERSIONS
The value is a quoted-string containing one or more positive
integers separated by the "/" character (for example, "1", "1/2",
or "1/2/5"). If more than one version of a particular KEYFORMAT
is defined, this attribute can be used to indicate which
version(s) this instance complies with. This attribute is
OPTIONAL; if it is not present, its value is considered to be "1".
Use of the KEYFORMATVERSIONS attribute REQUIRES a compatibility
version number of 5 or greater.
If the Media Playlist file does not contain an EXT-X-KEY tag, then
Media Segments are not encrypted.
See Section 5 for the format of the Key file and Sections 5.2, 6.2.3,
and 6.3.6 for additional information on Media Segment encryption.
Pantos & May Informational [Page 16]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.2.5. EXT-X-MAP
The EXT-X-MAP tag specifies how to obtain the Media Initialization
Section (Section 3) required to parse the applicable Media Segments.
It applies to every Media Segment that appears after it in the
Playlist until the next EXT-X-MAP tag or until the end of the
Playlist.
Its format is:
#EXT-X-MAP:<attribute-list>
The following attributes are defined:
URI
The value is a quoted-string containing a URI that identifies a
resource that contains the Media Initialization Section. This
attribute is REQUIRED.
BYTERANGE
The value is a quoted-string specifying a byte range into the
resource identified by the URI attribute. This range SHOULD
contain only the Media Initialization Section. The format of the
byte range is described in Section 4.3.2.2. This attribute is
OPTIONAL; if it is not present, the byte range is the entire
resource indicated by the URI.
An EXT-X-MAP tag SHOULD be supplied for Media Segments in Playlists
with the EXT-X-I-FRAMES-ONLY tag when the first Media Segment (i.e.,
I-frame) in the Playlist (or the first segment following an EXT-
X-DISCONTINUITY tag) does not immediately follow the Media
Initialization Section at the beginning of its resource.
Use of the EXT-X-MAP tag in a Media Playlist that contains the EXT-
X-I-FRAMES-ONLY tag REQUIRES a compatibility version number of 5 or
greater. Use of the EXT-X-MAP tag in a Media Playlist that DOES NOT
contain the EXT-X-I-FRAMES-ONLY tag REQUIRES a compatibility version
number of 6 or greater.
If the Media Initialization Section declared by an EXT-X-MAP tag is
encrypted with a METHOD of AES-128, the IV attribute of the EXT-X-KEY
tag that applies to the EXT-X-MAP is REQUIRED.
Pantos & May Informational [Page 17]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.2.6. EXT-X-PROGRAM-DATE-TIME
The EXT-X-PROGRAM-DATE-TIME tag associates the first sample of a
Media Segment with an absolute date and/or time. It applies only to
the next Media Segment. Its format is:
#EXT-X-PROGRAM-DATE-TIME:<date-time-msec>
where date-time-msec is an ISO/IEC 8601:2004 [ISO_8601] date/time
representation, such as YYYY-MM-DDThh:mm:ss.SSSZ. It SHOULD indicate
a time zone and fractional parts of seconds, to millisecond accuracy.
For example:
#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00
See Sections 6.2.1 and 6.3.3 for more information on the EXT-X-
PROGRAM-DATE-TIME tag.
4.3.2.7. EXT-X-DATERANGE
The EXT-X-DATERANGE tag associates a Date Range (i.e., a range of
time defined by a starting and ending date) with a set of attribute/
value pairs. Its format is:
#EXT-X-DATERANGE:<attribute-list>
where the defined attributes are:
ID
A quoted-string that uniquely identifies a Date Range in the
Playlist. This attribute is REQUIRED.
CLASS
A client-defined quoted-string that specifies some set of
attributes and their associated value semantics. All Date Ranges
with the same CLASS attribute value MUST adhere to these
semantics. This attribute is OPTIONAL.
START-DATE
A quoted-string containing the ISO-8601 date at which the Date
Range begins. This attribute is REQUIRED.
Pantos & May Informational [Page 18]
^L
RFC 8216 HTTP Live Streaming August 2017
END-DATE
A quoted-string containing the ISO-8601 date at which the Date
Range ends. It MUST be equal to or later than the value of the
START-DATE attribute. This attribute is OPTIONAL.
DURATION
The duration of the Date Range expressed as a decimal-floating-
point number of seconds. It MUST NOT be negative. A single
instant in time (e.g., crossing a finish line) SHOULD be
represented with a duration of 0. This attribute is OPTIONAL.
PLANNED-DURATION
The expected duration of the Date Range expressed as a decimal-
floating-point number of seconds. It MUST NOT be negative. This
attribute SHOULD be used to indicate the expected duration of a
Date Range whose actual duration is not yet known. It is
OPTIONAL.
X-<client-attribute>
The "X-" prefix defines a namespace reserved for client-defined
attributes. The client-attribute MUST be a legal AttributeName.
Clients SHOULD use a reverse-DNS syntax when defining their own
attribute names to avoid collisions. The attribute value MUST be
a quoted-string, a hexadecimal-sequence, or a decimal-floating-
point. An example of a client-defined attribute is X-COM-EXAMPLE-
AD-ID="XYZ123". These attributes are OPTIONAL.
SCTE35-CMD, SCTE35-OUT, SCTE35-IN
Used to carry SCTE-35 data; see Section 4.3.2.7.1 for more
information. These attributes are OPTIONAL.
END-ON-NEXT
An enumerated-string whose value MUST be YES. This attribute
indicates that the end of the range containing it is equal to the
START-DATE of its Following Range. The Following Range is the
Date Range of the same CLASS that has the earliest START-DATE
after the START-DATE of the range in question. This attribute is
OPTIONAL.
An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST have a
CLASS attribute. Other EXT-X-DATERANGE tags with the same CLASS
attribute MUST NOT specify Date Ranges that overlap.
Pantos & May Informational [Page 19]
^L
RFC 8216 HTTP Live Streaming August 2017
An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST NOT
contain DURATION or END-DATE attributes.
A Date Range with neither a DURATION, an END-DATE, nor an END-ON-
NEXT=YES attribute has an unknown duration, even if it has a PLANNED-
DURATION.
If a Playlist contains an EXT-X-DATERANGE tag, it MUST also contain
at least one EXT-X-PROGRAM-DATE-TIME tag.
If a Playlist contains two EXT-X-DATERANGE tags with the same ID
attribute value, then any AttributeName that appears in both tags
MUST have the same AttributeValue.
If a Date Range contains both a DURATION attribute and an END-DATE
attribute, the value of the END-DATE attribute MUST be equal to the
value of the START-DATE attribute plus the value of the DURATION
attribute.
Clients SHOULD ignore EXT-X-DATERANGE tags with illegal syntax.
4.3.2.7.1. Mapping SCTE-35 into EXT-X-DATERANGE
Splice information carried in source media according to the SCTE-35
specification [SCTE35] MAY be represented in a Media Playlist using
EXT-X-DATERANGE tags.
Each SCTE-35 splice_info_section() containing a splice_null(),
splice_schedule(), bandwidth_reservation(), or private_cmd() SHOULD
be represented by an EXT-X-DATERANGE tag with an SCTE35-CMD attribute
whose value is the big-endian binary representation of the
splice_info_section(), expressed as a hexadecimal-sequence.
An SCTE-35 splice out/in pair signaled by a pair of splice_insert()
commands SHOULD be represented by one or more EXT-X-DATERANGE tags
carrying the same ID attribute, which MUST be unique to that splice
out/in pair. The "out" splice_info_section() (with
out_of_network_indicator set to 1) MUST be placed in an SCTE35-OUT
attribute, with the same formatting as SCTE35-CMD. The "in"
splice_info_section() (with out_of_network_indicator set to 0) MUST
be placed in an SCTE35-IN attribute, with the same formatting as
SCTE35-CMD.
An SCTE-35 splice out/in pair signaled by a pair of time_signal()
commands, each carrying a single segmentation_descriptor(), SHOULD be
represented by one or more EXT-X-DATERANGE tags carrying the same ID
attribute, which MUST be unique to that splice out/in pair. The
Pantos & May Informational [Page 20]
^L
RFC 8216 HTTP Live Streaming August 2017
"out" splice_info_section() MUST be placed in an SCTE35-OUT
attribute; the "in" splice_info_section() MUST be placed in an
SCTE35-IN attribute.
Different types of segmentation, as indicated by the
segmentation_type_id in the segmentation_descriptor(), SHOULD be
represented by separate EXT-X-DATERANGE tags, even if two or more
segmentation_descriptor()s arrive in the same splice_info_section().
In that case, each EXT-X-DATERANGE tag will have an SCTE35-OUT,
SCTE35-IN, or SCTE35-CMD attribute whose value is the entire
splice_info_section().
An SCTE-35 time_signal() command that does not signal a splice out or
in point SHOULD be represented by an EXT-X-DATERANGE tag with an
SCTE35-CMD attribute.
The START-DATE of an EXT-X-DATERANGE tag containing an SCTE35-OUT
attribute MUST be the date and time that corresponds to the program
time of that splice.
The START-DATE of an EXT-X-DATERANGE tag containing an SCTE35-CMD
MUST be the date and time specified by the splice_time() in the
command or the program time at which the command appeared in the
source stream if the command does not specify a splice_time().
An EXT-X-DATERANGE tag containing an SCTE35-OUT attribute MAY contain
a PLANNED-DURATION attribute. Its value MUST be the planned duration
of the splice.
The DURATION of an EXT-X-DATERANGE tag containing an SCTE35-IN
attribute MUST be the actual (not planned) program duration between
the corresponding out-point and that in-point.
The END-DATE of an EXT-X-DATERANGE tag containing an SCTE35-IN
attribute MUST be the actual (not planned) program date and time of
that in-point.
If the actual end date and time is not known when an SCTE35-OUT
attribute is added to the Playlist, the DURATION attribute and the
END-TIME attribute MUST NOT be present; the actual end date of the
splice SHOULD be signaled by another EXT-X-DATERANGE tag once it has
been established.
A canceled splice SHOULD NOT appear in the Playlist as an EXT-
X-DATERANGE tag.
Pantos & May Informational [Page 21]
^L
RFC 8216 HTTP Live Streaming August 2017
An EXT-X-DATERANGE tag announcing a splice SHOULD be added to a
Playlist at the same time as the last pre-splice Media Segment, or
earlier if possible.
The ID attribute of an EXT-X-DATERANGE tag MAY contain a
splice_event_id and/or a segmentation_event_id, but it MUST be unique
in the Playlist. If there is a possibility that an SCTE-35 id will
be reused, the ID attribute value MUST include disambiguation, such
as a date or sequence number.
4.3.3. Media Playlist Tags
Media Playlist tags describe global parameters of the Media Playlist.
There MUST NOT be more than one Media Playlist tag of each type in
any Media Playlist.
A Media Playlist tag MUST NOT appear in a Master Playlist.
4.3.3.1. EXT-X-TARGETDURATION
The EXT-X-TARGETDURATION tag specifies the maximum Media Segment
duration. The EXTINF duration of each Media Segment in the Playlist
file, when rounded to the nearest integer, MUST be less than or equal
to the target duration; longer segments can trigger playback stalls
or other errors. It applies to the entire Playlist file. Its format
is:
#EXT-X-TARGETDURATION:<s>
where s is a decimal-integer indicating the target duration in
seconds. The EXT-X-TARGETDURATION tag is REQUIRED.
4.3.3.2. EXT-X-MEDIA-SEQUENCE
The EXT-X-MEDIA-SEQUENCE tag indicates the Media Sequence Number of
the first Media Segment that appears in a Playlist file. Its format
is:
#EXT-X-MEDIA-SEQUENCE:<number>
where number is a decimal-integer.
If the Media Playlist file does not contain an EXT-X-MEDIA-SEQUENCE
tag, then the Media Sequence Number of the first Media Segment in the
Media Playlist SHALL be considered to be 0. A client MUST NOT assume
that segments with the same Media Sequence Number in different Media
Playlists contain matching content (see Section 6.3.2).
Pantos & May Informational [Page 22]
^L
RFC 8216 HTTP Live Streaming August 2017
A URI for a Media Segment is not required to contain its Media
Sequence Number.
See Sections 6.2.1 and 6.3.5 for more information on setting the EXT-
X-MEDIA-SEQUENCE tag.
The EXT-X-MEDIA-SEQUENCE tag MUST appear before the first Media
Segment in the Playlist.
4.3.3.3. EXT-X-DISCONTINUITY-SEQUENCE
The EXT-X-DISCONTINUITY-SEQUENCE tag allows synchronization between
different Renditions of the same Variant Stream or different Variant
Streams that have EXT-X-DISCONTINUITY tags in their Media Playlists.
Its format is:
#EXT-X-DISCONTINUITY-SEQUENCE:<number>
where number is a decimal-integer.
If the Media Playlist does not contain an EXT-X-DISCONTINUITY-
SEQUENCE tag, then the Discontinuity Sequence Number of the first
Media Segment in the Playlist SHALL be considered to be 0.
The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before the first
Media Segment in the Playlist.
The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before any EXT-
X-DISCONTINUITY tag.
See Sections 6.2.1 and 6.2.2 for more information about setting the
value of the EXT-X-DISCONTINUITY-SEQUENCE tag.
4.3.3.4. EXT-X-ENDLIST
The EXT-X-ENDLIST tag indicates that no more Media Segments will be
added to the Media Playlist file. It MAY occur anywhere in the Media
Playlist file. Its format is:
#EXT-X-ENDLIST
Pantos & May Informational [Page 23]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.3.5. EXT-X-PLAYLIST-TYPE
The EXT-X-PLAYLIST-TYPE tag provides mutability information about the
Media Playlist file. It applies to the entire Media Playlist file.
It is OPTIONAL. Its format is:
#EXT-X-PLAYLIST-TYPE:<type-enum>
where type-enum is either EVENT or VOD.
Section 6.2.1 defines the implications of the EXT-X-PLAYLIST-TYPE
tag.
If the EXT-X-PLAYLIST-TYPE value is EVENT, Media Segments can only be
added to the end of the Media Playlist. If the EXT-X-PLAYLIST-TYPE
value is Video On Demand (VOD), the Media Playlist cannot change.
If the EXT-X-PLAYLIST-TYPE tag is omitted from a Media Playlist, the
Playlist can be updated according to the rules in Section 6.2.1 with
no additional restrictions. For example, a live Playlist
(Section 6.2.2) MAY be updated to remove Media Segments in the order
that they appeared.
4.3.3.6. EXT-X-I-FRAMES-ONLY
The EXT-X-I-FRAMES-ONLY tag indicates that each Media Segment in the
Playlist describes a single I-frame. I-frames are encoded video
frames whose encoding does not depend on any other frame. I-frame
Playlists can be used for trick play, such as fast forward, rapid
reverse, and scrubbing.
The EXT-X-I-FRAMES-ONLY tag applies to the entire Playlist. Its
format is:
#EXT-X-I-FRAMES-ONLY
In a Playlist with the EXT-X-I-FRAMES-ONLY tag, the Media Segment
duration (EXTINF tag value) is the time between the presentation time
of the I-frame in the Media Segment and the presentation time of the
next I-frame in the Playlist, or the end of the presentation if it is
the last I-frame in the Playlist.
Media resources containing I-frame segments MUST begin with either a
Media Initialization Section (Section 3) or be accompanied by an EXT-
X-MAP tag indicating the Media Initialization Section so that clients
can load and decode I-frame segments in any order. The byte range of
an I-frame segment with an EXT-X-BYTERANGE tag applied to it
(Section 4.3.2.2) MUST NOT include its Media Initialization Section;
Pantos & May Informational [Page 24]
^L
RFC 8216 HTTP Live Streaming August 2017
clients can assume that the Media Initialization Section is defined
by the EXT-X-MAP tag or is located from the start of the resource to
the offset of the first I-frame segment in that resource.
Use of the EXT-X-I-FRAMES-ONLY REQUIRES a compatibility version
number of 4 or greater.
4.3.4. Master Playlist Tags
Master Playlist tags define the Variant Streams, Renditions, and
other global parameters of the presentation.
Master Playlist tags MUST NOT appear in a Media Playlist; clients
MUST fail to parse any Playlist that contains both a Master Playlist
tag and either a Media Playlist tag or a Media Segment tag.
4.3.4.1. EXT-X-MEDIA
The EXT-X-MEDIA tag is used to relate Media Playlists that contain
alternative Renditions (Section 4.3.4.2.1) of the same content. For
example, three EXT-X-MEDIA tags can be used to identify audio-only
Media Playlists that contain English, French, and Spanish Renditions
of the same presentation. Or, two EXT-X-MEDIA tags can be used to
identify video-only Media Playlists that show two different camera
angles.
Its format is:
#EXT-X-MEDIA:<attribute-list>
The following attributes are defined:
TYPE
The value is an enumerated-string; valid strings are AUDIO, VIDEO,
SUBTITLES, and CLOSED-CAPTIONS. This attribute is REQUIRED.
Typically, closed-caption [CEA608] media is carried in the video
stream. Therefore, an EXT-X-MEDIA tag with TYPE of CLOSED-
CAPTIONS does not specify a Rendition; the closed-caption media is
present in the Media Segments of every video Rendition.
URI
The value is a quoted-string containing a URI that identifies the
Media Playlist file. This attribute is OPTIONAL; see
Section 4.3.4.2.1. If the TYPE is CLOSED-CAPTIONS, the URI
attribute MUST NOT be present.
Pantos & May Informational [Page 25]
^L
RFC 8216 HTTP Live Streaming August 2017
GROUP-ID
The value is a quoted-string that specifies the group to which the
Rendition belongs. See Section 4.3.4.1.1. This attribute is
REQUIRED.
LANGUAGE
The value is a quoted-string containing one of the standard Tags
for Identifying Languages [RFC5646], which identifies the primary
language used in the Rendition. This attribute is OPTIONAL.
ASSOC-LANGUAGE
The value is a quoted-string containing a language tag [RFC5646]
that identifies a language that is associated with the Rendition.
An associated language is often used in a different role than the
language specified by the LANGUAGE attribute (e.g., written versus
spoken or a fallback dialect). This attribute is OPTIONAL.
The LANGUAGE and ASSOC-LANGUAGE attributes can be used, for
example, to link Norwegian Renditions that use different spoken
and written languages.
NAME
The value is a quoted-string containing a human-readable
description of the Rendition. If the LANGUAGE attribute is
present, then this description SHOULD be in that language. This
attribute is REQUIRED.
DEFAULT
The value is an enumerated-string; valid strings are YES and NO.
If the value is YES, then the client SHOULD play this Rendition of
the content in the absence of information from the user indicating
a different choice. This attribute is OPTIONAL. Its absence
indicates an implicit value of NO.
AUTOSELECT
The value is an enumerated-string; valid strings are YES and NO.
This attribute is OPTIONAL. Its absence indicates an implicit
value of NO. If the value is YES, then the client MAY choose to
play this Rendition in the absence of explicit user preference
because it matches the current playback environment, such as
chosen system language.
Pantos & May Informational [Page 26]
^L
RFC 8216 HTTP Live Streaming August 2017
If the AUTOSELECT attribute is present, its value MUST be YES if
the value of the DEFAULT attribute is YES.
FORCED
The value is an enumerated-string; valid strings are YES and NO.
This attribute is OPTIONAL. Its absence indicates an implicit
value of NO. The FORCED attribute MUST NOT be present unless the
TYPE is SUBTITLES.
A value of YES indicates that the Rendition contains content that
is considered essential to play. When selecting a FORCED
Rendition, a client SHOULD choose the one that best matches the
current playback environment (e.g., language).
A value of NO indicates that the Rendition contains content that
is intended to be played in response to explicit user request.
INSTREAM-ID
The value is a quoted-string that specifies a Rendition within the
segments in the Media Playlist. This attribute is REQUIRED if the
TYPE attribute is CLOSED-CAPTIONS, in which case it MUST have one
of the values: "CC1", "CC2", "CC3", "CC4", or "SERVICEn" where n
MUST be an integer between 1 and 63 (e.g., "SERVICE3" or
"SERVICE42").
The values "CC1", "CC2", "CC3", and "CC4" identify a Line 21 Data
Services channel [CEA608]. The "SERVICE" values identify a
Digital Television Closed Captioning [CEA708] service block
number.
For all other TYPE values, the INSTREAM-ID MUST NOT be specified.
CHARACTERISTICS
The value is a quoted-string containing one or more Uniform Type
Identifiers [UTI] separated by comma (,) characters. This
attribute is OPTIONAL. Each UTI indicates an individual
characteristic of the Rendition.
A SUBTITLES Rendition MAY include the following characteristics:
"public.accessibility.transcribes-spoken-dialog",
"public.accessibility.describes-music-and-sound", and
"public.easy-to-read" (which indicates that the subtitles have
been edited for ease of reading).
Pantos & May Informational [Page 27]
^L
RFC 8216 HTTP Live Streaming August 2017
An AUDIO Rendition MAY include the following characteristic:
"public.accessibility.describes-video".
The CHARACTERISTICS attribute MAY include private UTIs.
CHANNELS
The value is a quoted-string that specifies an ordered, backslash-
separated ("/") list of parameters. If the TYPE attribute is
AUDIO, then the first parameter is a count of audio channels
expressed as a decimal-integer, indicating the maximum number of
independent, simultaneous audio channels present in any Media
Segment in the Rendition. For example, an AC-3 5.1 Rendition
would have a CHANNELS="6" attribute. No other CHANNELS parameters
are currently defined.
All audio EXT-X-MEDIA tags SHOULD have a CHANNELS attribute. If a
Master Playlist contains two Renditions encoded with the same
codec but a different number of channels, then the CHANNELS
attribute is REQUIRED; otherwise, it is OPTIONAL.
4.3.4.1.1. Rendition Groups
A set of one or more EXT-X-MEDIA tags with the same GROUP-ID value
and the same TYPE value defines a Group of Renditions. Each member
of the Group MUST be an alternative Rendition of the same content;
otherwise, playback errors can occur.
All EXT-X-MEDIA tags in a Playlist MUST meet the following
constraints:
o All EXT-X-MEDIA tags in the same Group MUST have different NAME
attributes.
o A Group MUST NOT have more than one member with a DEFAULT
attribute of YES.
o Each EXT-X-MEDIA tag with an AUTOSELECT=YES attribute SHOULD have
a combination of LANGUAGE [RFC5646], ASSOC-LANGUAGE, FORCED, and
CHARACTERISTICS attributes that is distinct from those of other
AUTOSELECT=YES members of its Group.
A Playlist MAY contain multiple Groups of the same TYPE in order to
provide multiple encodings of that media type. If it does so, each
Group of the same TYPE MUST have the same set of members, and each
corresponding member MUST have identical attributes with the
exception of the URI and CHANNELS attributes.
Pantos & May Informational [Page 28]
^L
RFC 8216 HTTP Live Streaming August 2017
Each member in a Group of Renditions MAY have a different sample
format. For example, an English Rendition can be encoded with AC-3
5.1 while a Spanish Rendition is encoded with AAC stereo. However,
any EXT-X-STREAM-INF tag (Section 4.3.4.2) or EXT-X-I-FRAME-STREAM-
INF tag (Section 4.3.4.3) that references such a Group MUST have a
CODECS attribute that lists every sample format present in any
Rendition in the Group, or client playback failures can occur. In
the example above, the CODECS attribute would include
"ac-3,mp4a.40.2".
4.3.4.2. EXT-X-STREAM-INF
The EXT-X-STREAM-INF tag specifies a Variant Stream, which is a set
of Renditions that can be combined to play the presentation. The
attributes of the tag provide information about the Variant Stream.
The URI line that follows the EXT-X-STREAM-INF tag specifies a Media
Playlist that carries a Rendition of the Variant Stream. The URI
line is REQUIRED. Clients that do not support multiple video
Renditions SHOULD play this Rendition.
Its format is:
#EXT-X-STREAM-INF:<attribute-list>
<URI>
The following attributes are defined:
BANDWIDTH
The value is a decimal-integer of bits per second. It represents
the peak segment bit rate of the Variant Stream.
If all the Media Segments in a Variant Stream have already been
created, the BANDWIDTH value MUST be the largest sum of peak
segment bit rates that is produced by any playable combination of
Renditions. (For a Variant Stream with a single Media Playlist,
this is just the peak segment bit rate of that Media Playlist.)
An inaccurate value can cause playback stalls or prevent clients
from playing the variant.
If the Master Playlist is to be made available before all Media
Segments in the presentation have been encoded, the BANDWIDTH
value SHOULD be the BANDWIDTH value of a representative period of
similar content, encoded using the same settings.
Pantos & May Informational [Page 29]
^L
RFC 8216 HTTP Live Streaming August 2017
Every EXT-X-STREAM-INF tag MUST include the BANDWIDTH attribute.
AVERAGE-BANDWIDTH
The value is a decimal-integer of bits per second. It represents
the average segment bit rate of the Variant Stream.
If all the Media Segments in a Variant Stream have already been
created, the AVERAGE-BANDWIDTH value MUST be the largest sum of
average segment bit rates that is produced by any playable
combination of Renditions. (For a Variant Stream with a single
Media Playlist, this is just the average segment bit rate of that
Media Playlist.) An inaccurate value can cause playback stalls or
prevent clients from playing the variant.
If the Master Playlist is to be made available before all Media
Segments in the presentation have been encoded, the AVERAGE-
BANDWIDTH value SHOULD be the AVERAGE-BANDWIDTH value of a
representative period of similar content, encoded using the same
settings.
The AVERAGE-BANDWIDTH attribute is OPTIONAL.
CODECS
The value is a quoted-string containing a comma-separated list of
formats, where each format specifies a media sample type that is
present in one or more Renditions specified by the Variant Stream.
Valid format identifiers are those in the ISO Base Media File
Format Name Space defined by "The 'Codecs' and 'Profiles'
Parameters for "Bucket" Media Types" [RFC6381].
For example, a stream containing AAC low complexity (AAC-LC) audio
and H.264 Main Profile Level 3.0 video would have a CODECS value
of "mp4a.40.2,avc1.4d401e".
Every EXT-X-STREAM-INF tag SHOULD include a CODECS attribute.
RESOLUTION
The value is a decimal-resolution describing the optimal pixel
resolution at which to display all the video in the Variant
Stream.
The RESOLUTION attribute is OPTIONAL but is recommended if the
Variant Stream includes video.
Pantos & May Informational [Page 30]
^L
RFC 8216 HTTP Live Streaming August 2017
FRAME-RATE
The value is a decimal-floating-point describing the maximum frame
rate for all the video in the Variant Stream, rounded to three
decimal places.
The FRAME-RATE attribute is OPTIONAL but is recommended if the
Variant Stream includes video. The FRAME-RATE attribute SHOULD be
included if any video in a Variant Stream exceeds 30 frames per
second.
HDCP-LEVEL
The value is an enumerated-string; valid strings are TYPE-0 and
NONE. This attribute is advisory; a value of TYPE-0 indicates
that the Variant Stream could fail to play unless the output is
protected by High-bandwidth Digital Content Protection (HDCP) Type
0 [HDCP] or equivalent. A value of NONE indicates that the
content does not require output copy protection.
Encrypted Variant Streams with different HDCP levels SHOULD use
different media encryption keys.
The HDCP-LEVEL attribute is OPTIONAL. It SHOULD be present if any
content in the Variant Stream will fail to play without HDCP.
Clients without output copy protection SHOULD NOT load a Variant
Stream with an HDCP-LEVEL attribute unless its value is NONE.
AUDIO
The value is a quoted-string. It MUST match the value of the
GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
Playlist whose TYPE attribute is AUDIO. It indicates the set of
audio Renditions that SHOULD be used when playing the
presentation. See Section 4.3.4.2.1.
The AUDIO attribute is OPTIONAL.
VIDEO
The value is a quoted-string. It MUST match the value of the
GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
Playlist whose TYPE attribute is VIDEO. It indicates the set of
video Renditions that SHOULD be used when playing the
presentation. See Section 4.3.4.2.1.
The VIDEO attribute is OPTIONAL.
Pantos & May Informational [Page 31]
^L
RFC 8216 HTTP Live Streaming August 2017
SUBTITLES
The value is a quoted-string. It MUST match the value of the
GROUP-ID attribute of an EXT-X-MEDIA tag elsewhere in the Master
Playlist whose TYPE attribute is SUBTITLES. It indicates the set
of subtitle Renditions that can be used when playing the
presentation. See Section 4.3.4.2.1.
The SUBTITLES attribute is OPTIONAL.
CLOSED-CAPTIONS
The value can be either a quoted-string or an enumerated-string
with the value NONE. If the value is a quoted-string, it MUST
match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag
elsewhere in the Playlist whose TYPE attribute is CLOSED-CAPTIONS,
and it indicates the set of closed-caption Renditions that can be
used when playing the presentation. See Section 4.3.4.2.1.
If the value is the enumerated-string value NONE, all EXT-X-
STREAM-INF tags MUST have this attribute with a value of NONE,
indicating that there are no closed captions in any Variant Stream
in the Master Playlist. Having closed captions in one Variant
Stream but not another can trigger playback inconsistencies.
The CLOSED-CAPTIONS attribute is OPTIONAL.
4.3.4.2.1. Alternative Renditions
When an EXT-X-STREAM-INF tag contains an AUDIO, VIDEO, SUBTITLES, or
CLOSED-CAPTIONS attribute, it indicates that alternative Renditions
of the content are available for playback of that Variant Stream.
When defining alternative Renditions, the following constraints MUST
be met to prevent client playback errors:
o All playable combinations of Renditions associated with an EXT-X-
STREAM-INF tag MUST have an aggregate bandwidth less than or equal
to the BANDWIDTH attribute of the EXT-X-STREAM-INF tag.
o If an EXT-X-STREAM-INF tag contains a RESOLUTION attribute and a
VIDEO attribute, then every alternative video Rendition MUST have
an optimal display resolution matching the value of the RESOLUTION
attribute.
o Every alternative Rendition associated with an EXT-X-STREAM-INF
tag MUST meet the constraints for a Variant Stream described in
Section 6.2.4.
Pantos & May Informational [Page 32]
^L
RFC 8216 HTTP Live Streaming August 2017
The URI attribute of the EXT-X-MEDIA tag is REQUIRED if the media
type is SUBTITLES, but OPTIONAL if the media type is VIDEO or AUDIO.
If the media type is VIDEO or AUDIO, a missing URI attribute
indicates that the media data for this Rendition is included in the
Media Playlist of any EXT-X-STREAM-INF tag referencing this EXT-
X-MEDIA tag. If the media TYPE is AUDIO and the URI attribute is
missing, clients MUST assume that the audio data for this Rendition
is present in every video Rendition specified by the EXT-X-STREAM-INF
tag.
The URI attribute of the EXT-X-MEDIA tag MUST NOT be included if the
media type is CLOSED-CAPTIONS.
4.3.4.3. EXT-X-I-FRAME-STREAM-INF
The EXT-X-I-FRAME-STREAM-INF tag identifies a Media Playlist file
containing the I-frames of a multimedia presentation. It stands
alone, in that it does not apply to a particular URI in the Master
Playlist. Its format is:
#EXT-X-I-FRAME-STREAM-INF:<attribute-list>
All attributes defined for the EXT-X-STREAM-INF tag (Section 4.3.4.2)
are also defined for the EXT-X-I-FRAME-STREAM-INF tag, except for the
FRAME-RATE, AUDIO, SUBTITLES, and CLOSED-CAPTIONS attributes. In
addition, the following attribute is defined:
URI
The value is a quoted-string containing a URI that identifies the
I-frame Media Playlist file. That Playlist file MUST contain an
EXT-X-I-FRAMES-ONLY tag.
Every EXT-X-I-FRAME-STREAM-INF tag MUST include a BANDWIDTH attribute
and a URI attribute.
The provisions in Section 4.3.4.2.1 also apply to EXT-X-I-FRAME-
STREAM-INF tags with a VIDEO attribute.
A Master Playlist that specifies alternative VIDEO Renditions and
I-frame Playlists SHOULD include an alternative I-frame VIDEO
Rendition for each regular VIDEO Rendition, with the same NAME and
LANGUAGE attributes.
Pantos & May Informational [Page 33]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.4.4. EXT-X-SESSION-DATA
The EXT-X-SESSION-DATA tag allows arbitrary session data to be
carried in a Master Playlist.
Its format is:
#EXT-X-SESSION-DATA:<attribute-list>
The following attributes are defined:
DATA-ID
The value of DATA-ID is a quoted-string that identifies a
particular data value. The DATA-ID SHOULD conform to a reverse
DNS naming convention, such as "com.example.movie.title"; however,
there is no central registration authority, so Playlist authors
SHOULD take care to choose a value that is unlikely to collide
with others. This attribute is REQUIRED.
VALUE
VALUE is a quoted-string. It contains the data identified by
DATA-ID. If the LANGUAGE is specified, VALUE SHOULD contain a
human-readable string written in the specified language.
URI
The value is a quoted-string containing a URI. The resource
identified by the URI MUST be formatted as JSON [RFC7159];
otherwise, clients may fail to interpret the resource.
LANGUAGE
The value is a quoted-string containing a language tag [RFC5646]
that identifies the language of the VALUE. This attribute is
OPTIONAL.
Each EXT-X-SESSION-DATA tag MUST contain either a VALUE or URI
attribute, but not both.
A Playlist MAY contain multiple EXT-X-SESSION-DATA tags with the same
DATA-ID attribute. A Playlist MUST NOT contain more than one EXT-X-
SESSION-DATA tag with the same DATA-ID attribute and the same
LANGUAGE attribute.
Pantos & May Informational [Page 34]
^L
RFC 8216 HTTP Live Streaming August 2017
4.3.4.5. EXT-X-SESSION-KEY
The EXT-X-SESSION-KEY tag allows encryption keys from Media Playlists
to be specified in a Master Playlist. This allows the client to
preload these keys without having to read the Media Playlist(s)
first.
Its format is:
#EXT-X-SESSION-KEY:<attribute-list>
All attributes defined for the EXT-X-KEY tag (Section 4.3.2.4) are
also defined for the EXT-X-SESSION-KEY, except that the value of the
METHOD attribute MUST NOT be NONE. If an EXT-X-SESSION-KEY is used,
the values of the METHOD, KEYFORMAT, and KEYFORMATVERSIONS attributes
MUST match any EXT-X-KEY with the same URI value.
EXT-X-SESSION-KEY tags SHOULD be added if multiple Variant Streams or
Renditions use the same encryption keys and formats. An EXT-X-
SESSION-KEY tag is not associated with any particular Media Playlist.
A Master Playlist MUST NOT contain more than one EXT-X-SESSION-KEY
tag with the same METHOD, URI, IV, KEYFORMAT, and KEYFORMATVERSIONS
attribute values.
The EXT-X-SESSION-KEY tag is optional.
4.3.5. Media or Master Playlist Tags
The tags in this section can appear in either Master Playlists or
Media Playlists. If one of these tags appears in a Master Playlist,
it SHOULD NOT appear in any Media Playlist referenced by that Master
Playlist. A tag that appears in both MUST have the same value;
otherwise, clients SHOULD ignore the value in the Media Playlist(s).
These tags MUST NOT appear more than once in a Playlist. If a tag
appears more than once, clients MUST fail to parse the Playlist.
4.3.5.1. EXT-X-INDEPENDENT-SEGMENTS
The EXT-X-INDEPENDENT-SEGMENTS tag indicates that all media samples
in a Media Segment can be decoded without information from other
segments. It applies to every Media Segment in the Playlist.
Its format is:
#EXT-X-INDEPENDENT-SEGMENTS
Pantos & May Informational [Page 35]
^L
RFC 8216 HTTP Live Streaming August 2017
If the EXT-X-INDEPENDENT-SEGMENTS tag appears in a Master Playlist,
it applies to every Media Segment in every Media Playlist in the
Master Playlist.
4.3.5.2. EXT-X-START
The EXT-X-START tag indicates a preferred point at which to start
playing a Playlist. By default, clients SHOULD start playback at
this point when beginning a playback session. This tag is OPTIONAL.
Its format is:
#EXT-X-START:<attribute-list>
The following attributes are defined:
TIME-OFFSET
The value of TIME-OFFSET is a signed-decimal-floating-point number
of seconds. A positive number indicates a time offset from the
beginning of the Playlist. A negative number indicates a negative
time offset from the end of the last Media Segment in the
Playlist. This attribute is REQUIRED.
The absolute value of TIME-OFFSET SHOULD NOT be larger than the
Playlist duration. If the absolute value of TIME-OFFSET exceeds
the duration of the Playlist, it indicates either the end of the
Playlist (if positive) or the beginning of the Playlist (if
negative).
If the Playlist does not contain the EXT-X-ENDLIST tag, the TIME-
OFFSET SHOULD NOT be within three target durations of the end of
the Playlist file.
PRECISE
The value is an enumerated-string; valid strings are YES and NO.
If the value is YES, clients SHOULD start playback at the Media
Segment containing the TIME-OFFSET, but SHOULD NOT render media
samples in that segment whose presentation times are prior to the
TIME-OFFSET. If the value is NO, clients SHOULD attempt to render
every media sample in that segment. This attribute is OPTIONAL.
If it is missing, its value should be treated as NO.
Pantos & May Informational [Page 36]
^L
RFC 8216 HTTP Live Streaming August 2017
5. Key Files
5.1. Structure of Key Files
An EXT-X-KEY tag with a URI attribute identifies a Key file. A Key
file contains a cipher key that can decrypt Media Segments in the
Playlist.
[AES_128] encryption uses 16-octet keys. If the KEYFORMAT of an EXT-
X-KEY tag is "identity", the Key file is a single packed array of 16
octets in binary format.
5.2. IV for AES-128
[AES_128] REQUIRES the same 16-octet IV to be supplied when
encrypting and decrypting. Varying this IV increases the strength of
the cipher.
An IV attribute on an EXT-X-KEY tag with a KEYFORMAT of "identity"
specifies an IV that can be used when decrypting Media Segments
encrypted with that Key file. IV values for AES-128 are 128-bit
numbers.
An EXT-X-KEY tag with a KEYFORMAT of "identity" that does not have an
IV attribute indicates that the Media Sequence Number is to be used
as the IV when decrypting a Media Segment, by putting its big-endian
binary representation into a 16-octet (128-bit) buffer and padding
(on the left) with zeros.
6. Client/Server Responsibilities
6.1. Introduction
This section describes how the server generates the Playlist and
Media Segments and how the client should download them for playback.
6.2. Server Responsibilities
6.2.1. General Server Responsibilities
The production of the source media is outside the scope of this
document, which simply presumes a source of continuous encoded media
containing the presentation.
The server MUST divide the source media into individual Media
Segments whose duration is less than or equal to a constant target
duration. Segments that are longer than the planned target duration
can trigger playback stalls and other errors.
Pantos & May Informational [Page 37]
^L
RFC 8216 HTTP Live Streaming August 2017
The server SHOULD attempt to divide the source media at points that
support effective decode of individual Media Segments, e.g., on
packet and key frame boundaries.
The server MUST create a URI for every Media Segment that enables its
clients to obtain the segment data. If a server supports partial
loading of resources (e.g., via HTTP Range requests), it MAY specify
segments as sub-ranges of larger resources using the EXT-X-BYTERANGE
tag.
Any Media Segment that is specified in a Playlist loaded by a client
MUST be available for immediate download, or playback errors can
occur. Once download starts, its transfer rate SHOULD NOT be
constrained by the segment production process.
HTTP servers SHOULD transfer text files -- such as Playlists and
WebVTT segments -- using the "gzip" Content-Encoding if the client
indicates that it is prepared to accept it.
The server must create a Media Playlist file (Section 4) that
contains a URI for each Media Segment that the server wishes to make
available, in the order in which they are to be played.
The value of the EXT-X-VERSION tag (Section 4.3.1.2) SHOULD NOT be
greater than what is required for the tags and attributes in the
Playlist (see Section 7).
Changes to the Playlist file MUST be made atomically from the point
of view of the clients, or playback errors MAY occur.
The server MUST NOT change the Media Playlist file, except to:
o Append lines to it (Section 6.2.1).
o Remove Media Segment URIs from the Playlist in the order that they
appear, along with any tags that apply only to those segments
(Section 6.2.2).
o Increment the value of the EXT-X-MEDIA-SEQUENCE or EXT-X-
DISCONTINUITY-SEQUENCE tags (Section 6.2.2).
o Add an EXT-X-ENDLIST tag to the Playlist (Section 6.2.1).
Pantos & May Informational [Page 38]
^L
RFC 8216 HTTP Live Streaming August 2017
A Media Playlist has further constraints on its updates if it
contains an EXT-X-PLAYLIST-TYPE tag. An EXT-X-PLAYLIST-TYPE tag with
a value of VOD indicates that the Playlist file MUST NOT change. An
EXT-X-PLAYLIST-TYPE tag with a value of EVENT indicates that the
server MUST NOT change or delete any part of the Playlist file; it
MAY append lines to it.
The value of the EXT-X-TARGETDURATION tag in the Media Playlist MUST
NOT change. A typical target duration is 10 seconds.
Playlist changes other than those allowed here can trigger playback
errors and inconsistent client behavior.
Each Media Segment in a Media Playlist has an integer Discontinuity
Sequence Number. The Discontinuity Sequence Number can be used in
addition to the timestamps within the media to synchronize Media
Segments across different Renditions.
A segment's Discontinuity Sequence Number is the value of the EXT-X-
DISCONTINUITY-SEQUENCE tag (or zero if none) plus the number of EXT-
X-DISCONTINUITY tags in the Playlist preceding the URI line of the
segment.
The server MAY associate an absolute date and time with a Media
Segment by applying an EXT-X-PROGRAM-DATE-TIME tag to it. This
defines an informative mapping of the (wall-clock) date and time
specified by the tag to the first media timestamp in the segment,
which may be used as a basis for seeking, for display, or for other
purposes. If a server provides this mapping, it SHOULD apply an EXT-
X-PROGRAM-DATE-TIME tag to every segment that has an EXT-
X-DISCONTINUITY tag applied to it.
The Server MUST NOT add any EXT-X-PROGRAM-DATE-TIME tag to a Playlist
that would cause the mapping between program date and Media Segment
to become ambiguous.
The server MUST NOT remove an EXT-X-DATERANGE tag from a Playlist if
any date in the range maps to a Media Segment in the Playlist.
The server MUST NOT reuse the ID attribute value of an EXT-
X-DATERANGE tag for any new Date Range in the same Playlist.
Once the Following Range of a Date Range with an END-ON-NEXT=YES
attribute is added to a Playlist, the Server MUST NOT subsequently
add a Date Range with the same CLASS attribute whose START-DATE is
between that of the END-ON-NEXT=YES range and its Following Range.
Pantos & May Informational [Page 39]
^L
RFC 8216 HTTP Live Streaming August 2017
For Date Ranges with a PLANNED-DURATION attribute, the Server SHOULD
signal the actual end of the range once it has been established. It
can do so by adding another EXT-X-DATERANGE tag with the same ID
attribute value and either a DURATION or an END-DATE attribute or, if
the Date Range has an END-ON-NEXT=YES attribute, by adding a
Following Range.
If the Media Playlist contains the final Media Segment of the
presentation, then the Playlist file MUST contain the EXT-X-ENDLIST
tag; this allows clients to minimize unproductive Playlist reloads.
If a Media Playlist does not contain the EXT-X-ENDLIST tag, the
server MUST make a new version of the Playlist file available that
contains at least one new Media Segment. It MUST be made available
relative to the time that the previous version of the Playlist file
was made available: no earlier than one-half the target duration
after that time, and no later than 1.5 times the target duration
after that time. This allows clients to utilize the network
efficiently.
If the server wishes to remove an entire presentation, it SHOULD
provide a clear indication to clients that the Playlist file is no
longer available (e.g., with an HTTP 404 or 410 response). It MUST
ensure that all Media Segments in the Playlist file remain available
to clients for at least the duration of the Playlist file at the time
of removal to prevent interruption of in-progress playback.
6.2.2. Live Playlists
The server MAY limit the availability of Media Segments by removing
Media Segments from the Playlist file (Section 6.2.1). If Media
Segments are to be removed, the Playlist file MUST contain an EXT-X-
MEDIA-SEQUENCE tag. Its value MUST be incremented by 1 for every
Media Segment that is removed from the Playlist file; it MUST NOT
decrease or wrap. Clients can malfunction if each Media Segment does
not have a consistent, unique Media Sequence Number.
Media Segments MUST be removed from the Playlist file in the order
that they appear in the Playlist; otherwise, client playback can
malfunction.
The server MUST NOT remove a Media Segment from a Playlist file
without an EXT-X-ENDLIST tag if that would produce a Playlist whose
duration is less than three times the target duration. Doing so can
trigger playback stalls.
Pantos & May Informational [Page 40]
^L
RFC 8216 HTTP Live Streaming August 2017
When the server removes a Media Segment URI from the Playlist, the
corresponding Media Segment MUST remain available to clients for a
period of time equal to the duration of the segment plus the duration
of the longest Playlist file distributed by the server containing
that segment. Removing a Media Segment earlier than that can
interrupt in-progress playback.
If the server wishes to remove segments from a Media Playlist
containing an EXT-X-DISCONTINUITY tag, the Media Playlist MUST
contain an EXT-X-DISCONTINUITY-SEQUENCE tag. Without the EXT-X-
DISCONTINUITY-SEQUENCE tag, it can be impossible for a client to
locate corresponding segments between Renditions.
If the server removes an EXT-X-DISCONTINUITY tag from the Media
Playlist, it MUST increment the value of the EXT-X-DISCONTINUITY-
SEQUENCE tag so that the Discontinuity Sequence Numbers of the
segments still in the Media Playlist remain unchanged. The value of
the EXT-X-DISCONTINUITY-SEQUENCE tag MUST NOT decrease or wrap.
Clients can malfunction if each Media Segment does not have a
consistent Discontinuity Sequence Number.
If a server plans to remove a Media Segment after it is delivered to
clients over HTTP, it SHOULD ensure that the HTTP response contains
an Expires header that reflects the planned time-to-live.
A Live Playlist MUST NOT contain the EXT-X-PLAYLIST-TYPE tag, as no
value of that tag allows Media Segments to be removed.
6.2.3. Encrypting Media Segments
Media Segments MAY be encrypted. Every encrypted Media Segment MUST
have an EXT-X-KEY tag (Section 4.3.2.4) applied to it with a URI that
the client can use to obtain a Key file (Section 5) containing the
decryption key.
A Media Segment can only be encrypted with one encryption METHOD,
using one encryption key and IV. However, a server MAY offer
multiple ways to retrieve that key by providing multiple EXT-X-KEY
tags, each with a different KEYFORMAT attribute value.
The server MAY set the HTTP Expires header in the key response to
indicate the duration for which the key can be cached.
Any unencrypted Media Segment in a Playlist that is preceded by an
encrypted Media Segment MUST have an EXT-X-KEY tag applied to it with
a METHOD attribute of NONE. Otherwise, the client will misinterpret
those segments as encrypted.
Pantos & May Informational [Page 41]
^L
RFC 8216 HTTP Live Streaming August 2017
If the encryption METHOD is AES-128 and the Playlist does not contain
the EXT-X-I-FRAMES-ONLY tag, AES encryption as described in
Section 4.3.2.4 SHALL be applied to individual Media Segments.
If the encryption METHOD is AES-128 and the Playlist contains an EXT-
X-I-FRAMES-ONLY tag, the entire resource MUST be encrypted using
AES-128 CBC with PKCS7 padding [RFC5652]. Encryption MAY be
restarted on 16-byte block boundaries, unless the first block
contains an I-frame. The IV used for encryption MUST be either the
Media Sequence Number of the Media Segment or the value of the IV
attribute of the EXT-X-KEY tag, as described in Section 5.2. These
constraints allow a client to load and decrypt individual I-frames
specified as sub-ranges of regular encrypted Media Segments, and
their Media Initialization Sections.
If the encryption METHOD is SAMPLE-AES, media samples MAY be
encrypted prior to encapsulation in a Media Segment.
The server MUST NOT remove an EXT-X-KEY tag from the Playlist file if
it applies to any Media Segment in the Playlist file, or clients who
subsequently load that Playlist will be unable to decrypt those Media
Segments.
6.2.4. Providing Variant Streams
A server MAY offer multiple Media Playlist files to provide different
encodings of the same presentation. If it does so, it SHOULD provide
a Master Playlist file that lists each Variant Stream to allow
clients to switch between encodings dynamically.
Master Playlists describe regular Variant Streams with EXT-X-STREAM-
INF tags and I-frame Variant Streams with EXT-X-I-FRAME-STREAM-INF
tags.
If an EXT-X-STREAM-INF tag or EXT-X-I-FRAME-STREAM-INF tag contains
the CODECS attribute, the attribute value MUST include every media
format [RFC6381] present in any Media Segment in any of the
Renditions specified by the Variant Stream.
Pantos & May Informational [Page 42]
^L
RFC 8216 HTTP Live Streaming August 2017
The server MUST meet the following constraints when producing Variant
Streams in order to allow clients to switch between them seamlessly:
o Each Variant Stream MUST present the same content.
o Matching content in Variant Streams MUST have matching timestamps.
This allows clients to synchronize the media.
o Matching content in Variant Streams MUST have matching
Discontinuity Sequence Numbers (see Section 4.3.3.3).
o Each Media Playlist in each Variant Stream MUST have the same
target duration. The only exceptions are SUBTITLES Renditions and
Media Playlists containing an EXT-X-I-FRAMES-ONLY tag, which MAY
have different target durations if they have an EXT-X-PLAYLIST-
TYPE of VOD.
o Content that appears in a Media Playlist of one Variant Stream but
not in another MUST appear either at the beginning or at the end
of the Media Playlist file and MUST NOT be longer than the target
duration.
o If any Media Playlists have an EXT-X-PLAYLIST-TYPE tag, all Media
Playlists MUST have an EXT-X-PLAYLIST-TYPE tag with the same
value.
o If the Playlist contains an EXT-X-PLAYLIST-TYPE tag with the value
of VOD, the first segment of every Media Playlist in every Variant
Stream MUST start at the same media timestamp.
o If any Media Playlist in a Master Playlist contains an EXT-X-
PROGRAM-DATE-TIME tag, then all Media Playlists in that Master
Playlist MUST contain EXT-X-PROGRAM-DATE-TIME tags with consistent
mappings of date and time to media timestamps.
o Each Variant Stream MUST contain the same set of Date Ranges, each
one identified by an EXT-X-DATERANGE tag(s) with the same ID
attribute value and containing the same set of attribute/value
pairs.
In addition, for broadest compatibility, Variant Streams SHOULD
contain the same encoded audio bitstream. This allows clients to
switch between Variant Streams without audible glitching.
The rules for Variant Streams also apply to alternative Renditions
(see Section 4.3.4.2.1).
Pantos & May Informational [Page 43]
^L
RFC 8216 HTTP Live Streaming August 2017
6.3. Client Responsibilities
6.3.1. General Client Responsibilities
How the client obtains the URI to the Playlist file is outside the
scope of this document; it is presumed to have done so.
The client obtains the Playlist file from the URI. If the Playlist
file so obtained is a Master Playlist, the client can select a
Variant Stream to load from the Master Playlist.
Clients MUST ensure that loaded Playlists comply with Section 4 and
that the EXT-X-VERSION tag, if present, specifies a protocol version
supported by the client; if either check fails, the client MUST NOT
attempt to use the Playlist, or unintended behavior could occur.
If any URI element in a Playlist contains an URI scheme that the
client cannot handle, the client MUST stop playback. All clients
MUST support HTTP schemes.
To support forward compatibility, when parsing Playlists, clients
MUST:
o ignore any unrecognized tags.
o ignore any attribute/value pair with an unrecognized
AttributeName.
o ignore any tag containing an attribute/value pair of type
enumerated-string whose AttributeName is recognized but whose
AttributeValue is not recognized, unless the definition of the
attribute says otherwise.
Algorithms used by the client to switch between Variant Streams are
beyond the scope of this document.
6.3.2. Loading the Media Playlist File
Every time a Media Playlist is loaded or reloaded from a Playlist
URI, the client MUST determine the next Media Segment to load, as
described in Section 6.3.5, if it intends to play the presentation
normally (i.e., in Playlist order at the nominal playback rate).
If the Media Playlist contains the EXT-X-MEDIA-SEQUENCE tag, the
client SHOULD assume that each Media Segment in it will become
unavailable at the time that the Playlist file was loaded plus the
duration of the Playlist file.
Pantos & May Informational [Page 44]
^L
RFC 8216 HTTP Live Streaming August 2017
A client MAY use the segment Media Sequence Number to track the
location of a Media Segment within a Playlist when the Playlist is
reloaded.
A client MUST NOT assume that segments with the same Media Sequence
Number in different Variant Streams or Renditions have the same
position in the presentation; Playlists MAY have independent Media
Sequence Numbers. Instead, a client MUST use the relative position
of each segment on the Playlist timeline and its Discontinuity
Sequence Number to locate corresponding segments.
A client MUST load the Media Playlist file of every Rendition
selected for playback in order to locate the media specific to that
Rendition. But, to prevent unnecessary load on the server, it SHOULD
NOT load the Playlist file of any other Rendition.
For some Variant Streams, it is possible to select Renditions that do
not include the Rendition specified by the EXT-X-STREAM-INF tag. As
noted above, the client SHOULD NOT load that Rendition in those
cases.
6.3.3. Playing the Media Playlist File
The client SHALL choose which Media Segment to play first from the
Media Playlist when playback starts. If the EXT-X-ENDLIST tag is not
present and the client intends to play the media normally, the client
SHOULD NOT choose a segment that starts less than three target
durations from the end of the Playlist file. Doing so can trigger
playback stalls.
Normal playback can be achieved by playing the Media Segments in the
order that they appear in the Playlist. The client MAY present the
available media in any way it wishes, including normal playback,
random access, and trick modes.
The encoding parameters for samples in a Media Segment and across
multiple Media Segments in a Media Playlist SHOULD remain consistent.
However, clients SHOULD deal with encoding changes as they are
encountered, for example, by scaling video content to accommodate a
resolution change. If the Variant Stream includes a RESOLUTION
attribute, clients SHOULD display all video within a rectangle with
the same proportions as that resolution.
Clients SHOULD be prepared to handle multiple tracks of a particular
type (e.g., audio or video). A client with no other preference
SHOULD choose the track with the lowest numerical track identifier
that it can play.
Pantos & May Informational [Page 45]
^L
RFC 8216 HTTP Live Streaming August 2017
Clients SHOULD ignore private streams inside Transport Streams that
they do not recognize. Private streams can be used to support
different devices with the same stream, although stream authors
SHOULD be sensitive to the additional network load that this imposes.
The client MUST be prepared to reset its parser(s) and decoder(s)
before playing a Media Segment that has an EXT-X-DISCONTINUITY tag
applied to it; otherwise, playback errors can occur.
The client SHOULD attempt to load Media Segments in advance of when
they will be required for uninterrupted playback to compensate for
temporary variations in latency and throughput.
The client MAY use the value of the EXT-X-PROGRAM-DATE-TIME tag to
display the program origination time to the user. If the value
includes time zone information, the client SHALL take it into
account; if it does not, the client MAY assume the time to be local.
Note that dates in Playlists can refer to when the content was
produced (or to other times), which have no relation to the time of
playback.
If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after
one or more Media Segment URIs, the client SHOULD extrapolate
backward from that tag (using EXTINF durations and/or media
timestamps) to associate dates with those segments. To associate a
date with any other Media Segment that does not have an EXT-X-
PROGRAM-DATE-TIME tag applied to it directly, the client SHOULD
extrapolate forward from the last EXT-X-PROGRAM-DATE-TIME tag
appearing before that segment in the Playlist.
6.3.4. Reloading the Media Playlist File
The client MUST periodically reload a Media Playlist file to learn
what media is currently available, unless it contains an EXT-X-
PLAYLIST-TYPE tag with a value of VOD, or a value of EVENT and the
EXT-X-ENDLIST tag is also present.
However, the client MUST NOT attempt to reload the Playlist file more
frequently than specified by this section, in order to limit the
collective load on the server.
When a client loads a Playlist file for the first time or reloads a
Playlist file and finds that it has changed since the last time it
was loaded, the client MUST wait for at least the target duration
before attempting to reload the Playlist file again, measured from
the last time the client began loading the Playlist file.
Pantos & May Informational [Page 46]
^L
RFC 8216 HTTP Live Streaming August 2017
If the client reloads a Playlist file and finds that it has not
changed, then it MUST wait for a period of one-half the target
duration before retrying.
After reloading a Media Playlist, the client SHOULD verify that each
Media Segment in it has the same URI (and byte range, if specified)
as the Media Segment with the same Media Sequence Number in the
previous Media Playlist. It SHOULD halt playback if it does not, as
this normally indicates a server error.
In order to reduce server load, the client SHOULD NOT reload the
Playlist files of Variant Streams or alternate Renditions that are
not currently being played. If it decides to switch playback to a
different Variant Stream, it SHOULD stop reloading the Playlist of
the old Variant Stream and begin loading the Playlist of the new
Variant Stream. It can use the EXTINF durations and the constraints
in Section 6.2.4 to determine the approximate location of
corresponding media. Once media from the new Variant Stream has been
loaded, the timestamps in the Media Segments can be used to
synchronize the old and new timelines precisely.
A client MUST NOT attempt to use the Media Sequence Number to
synchronize between streams (see Section 6.3.2).
6.3.5. Determining the Next Segment to Load
The client MUST examine the Media Playlist file every time it is
loaded or reloaded to determine the next Media Segment to load, as
the set of available media MAY have changed.
The first segment to load is generally the segment that the client
has chosen to play first (see Section 6.3.3).
In order to play the presentation normally, the next Media Segment to
load is the one with the lowest Media Sequence Number that is greater
than the Media Sequence Number of the last Media Segment loaded.
6.3.6. Decrypting Encrypted Media Segments
If a Media Playlist file contains an EXT-X-KEY tag that specifies a
Key file URI, the client can obtain that Key file and use the key
inside it to decrypt all Media Segments to which that EXT-X-KEY tag
applies.
Pantos & May Informational [Page 47]
^L
RFC 8216 HTTP Live Streaming August 2017
A client MUST ignore any EXT-X-KEY tag with an unsupported or
unrecognized KEYFORMAT attribute, to allow for cross-device
addressability. If the Playlist contains a Media Segment to which
only EXT-X-KEY tags with unrecognized or unsupported KEYFORMAT
attributes are applied, playback SHOULD fail.
A client MUST NOT attempt to decrypt any segments whose EXT-X-KEY tag
has a METHOD attribute that it does not recognize.
If the encryption METHOD is AES-128, AES-128 CBC decryption SHALL be
applied to individual Media Segments, whose encryption format is
described in Section 4.3.2.4.
If the encryption METHOD is AES-128 and the Media Segment is part of
an I-frame Playlist (Section 4.3.3.6) and it has an EXT-X-BYTERANGE
tag applied to it, special care needs to be taken in loading and
decrypting the segment, because the resource identified by the URI is
encrypted in 16-byte blocks from the start of the resource.
The decrypted I-frame can be recovered by first widening its byte
range, as specified by the EXT-X-BYTERANGE tag, so that it starts and
ends on 16-byte boundaries from the start of the resource.
Next, the byte range is widened further to include a 16-byte block at
the beginning of the range. This 16-byte block allows the correct IV
for the following block to be calculated.
The widened byte range can then be loaded and decrypted with AES-128
CBC using an arbitrary IV. The number of bytes added to the
beginning and the end of the original byte range are discarded from
the decrypted bytes; what remains is the decrypted I-frame.
If the encryption METHOD is SAMPLE-AES, AES-128 decryption SHALL be
applied to encrypted media samples within the Media Segment.
An EXT-X-KEY tag with a METHOD of NONE indicates that the Media
Segments it applies to are not encrypted.
7. Protocol Version Compatibility
Protocol compatibility is specified by the EXT-X-VERSION tag. A
Playlist that contains tags or attributes that are not compatible
with protocol version 1 MUST include an EXT-X-VERSION tag.
A client MUST NOT attempt playback if it does not support the
protocol version specified by the EXT-X-VERSION tag, or unintended
behavior could occur.
Pantos & May Informational [Page 48]
^L
RFC 8216 HTTP Live Streaming August 2017
A Media Playlist MUST indicate an EXT-X-VERSION of 2 or higher if it
contains:
o The IV attribute of the EXT-X-KEY tag.
A Media Playlist MUST indicate an EXT-X-VERSION of 3 or higher if it
contains:
o Floating-point EXTINF duration values.
A Media Playlist MUST indicate an EXT-X-VERSION of 4 or higher if it
contains:
o The EXT-X-BYTERANGE tag.
o The EXT-X-I-FRAMES-ONLY tag.
A Media Playlist MUST indicate an EXT-X-VERSION of 5 or higher if it
contains:
o The KEYFORMAT and KEYFORMATVERSIONS attributes of the EXT-X-KEY
tag.
o The EXT-X-MAP tag.
A Media Playlist MUST indicate an EXT-X-VERSION of 6 or higher if it
contains:
o The EXT-X-MAP tag in a Media Playlist that does not contain EXT-
X-I-FRAMES-ONLY.
A Master Playlist MUST indicate an EXT-X-VERSION of 7 or higher if it
contains:
o "SERVICE" values for the INSTREAM-ID attribute of the EXT-X-MEDIA
tag.
The EXT-X-MEDIA tag and the AUDIO, VIDEO, and SUBTITLES attributes of
the EXT-X-STREAM-INF tag are backward compatible to protocol version
1, but playback on older clients may not be desirable. A server MAY
consider indicating an EXT-X-VERSION of 4 or higher in the Master
Playlist but is not required to do so.
The PROGRAM-ID attribute of the EXT-X-STREAM-INF and the EXT-X-I-
FRAME-STREAM-INF tags was removed in protocol version 6.
The EXT-X-ALLOW-CACHE tag was removed in protocol version 7.
Pantos & May Informational [Page 49]
^L
RFC 8216 HTTP Live Streaming August 2017
8. Playlist Examples
8.1. Simple Media Playlist
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
#EXT-X-ENDLIST
8.2. Live Media Playlist Using HTTPS
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:2680
#EXTINF:7.975,
https://priv.example.com/fileSequence2680.ts
#EXTINF:7.941,
https://priv.example.com/fileSequence2681.ts
#EXTINF:7.975,
https://priv.example.com/fileSequence2682.ts
Pantos & May Informational [Page 50]
^L
RFC 8216 HTTP Live Streaming August 2017
8.3. Playlist with Encrypted Media Segments
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:7794
#EXT-X-TARGETDURATION:15
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"
#EXTINF:2.833,
http://media.example.com/fileSequence52-A.ts
#EXTINF:15.0,
http://media.example.com/fileSequence52-B.ts
#EXTINF:13.333,
http://media.example.com/fileSequence52-C.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"
#EXTINF:15.0,
http://media.example.com/fileSequence53-A.ts
8.4. Master Playlist
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,AVERAGE-BANDWIDTH=2000000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000,AVERAGE-BANDWIDTH=6000000
http://example.com/hi.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
http://example.com/audio-only.m3u8
8.5. Master Playlist with I-Frames
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000
low/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=86000,URI="low/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2560000
mid/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=150000,URI="mid/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=7680000
hi/audio-video.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=550000,URI="hi/iframe.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5"
audio-only.m3u8
Pantos & May Informational [Page 51]
^L
RFC 8216 HTTP Live Streaming August 2017
8.6. Master Playlist with Alternative Audio
In this example, the CODECS attributes have been condensed for space.
A '\' is used to indicate that the tag continues on the following
line with whitespace removed:
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="English", \
DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en", \
URI="main/english-audio.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Deutsch", \
DEFAULT=NO,AUTOSELECT=YES,LANGUAGE="de", \
URI="main/german-audio.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="Commentary", \
DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="en", \
URI="commentary/audio-only.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",AUDIO="aac"
low/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",AUDIO="aac"
mid/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",AUDIO="aac"
hi/video-only.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=65000,CODECS="mp4a.40.5",AUDIO="aac"
main/english-audio.m3u8
8.7. Master Playlist with Alternative Video
This example shows three different video Renditions (Main,
Centerfield, and Dugout) and three different Variant Streams (low,
mid, and high). In this example, clients that did not support the
EXT-X-MEDIA tag and the VIDEO attribute of the EXT-X-STREAM-INF tag
would only be able to play the video Rendition "Main".
Since the EXT-X-STREAM-INF tag has no AUDIO attribute, all video
Renditions would be required to contain the audio.
Pantos & May Informational [Page 52]
^L
RFC 8216 HTTP Live Streaming August 2017
In this example, the CODECS attributes have been condensed for space.
A '\' is used to indicate that the tag continues on the following
line with whitespace removed:
#EXTM3U
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Main", \
DEFAULT=YES,URI="low/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Centerfield", \
DEFAULT=NO,URI="low/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="low",NAME="Dugout", \
DEFAULT=NO,URI="low/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=1280000,CODECS="...",VIDEO="low"
low/main/audio-video.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Main", \
DEFAULT=YES,URI="mid/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Centerfield", \
DEFAULT=NO,URI="mid/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="mid",NAME="Dugout", \
DEFAULT=NO,URI="mid/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2560000,CODECS="...",VIDEO="mid"
mid/main/audio-video.m3u8
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Main", \
DEFAULT=YES,URI="hi/main/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Centerfield", \
DEFAULT=NO,URI="hi/centerfield/audio-video.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="hi",NAME="Dugout", \
DEFAULT=NO,URI="hi/dugout/audio-video.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=7680000,CODECS="...",VIDEO="hi"
hi/main/audio-video.m3u8
8.8. Session Data in a Master Playlist
In this example, only the EXT-X-SESSION-DATA is shown:
#EXT-X-SESSION-DATA:DATA-ID="com.example.lyrics",URI="lyrics.json"
#EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="en", \
VALUE="This is an example"
#EXT-X-SESSION-DATA:DATA-ID="com.example.title",LANGUAGE="es", \
VALUE="Este es un ejemplo"
Pantos & May Informational [Page 53]
^L
RFC 8216 HTTP Live Streaming August 2017
8.9. CHARACTERISTICS Attribute Containing Multiple Characteristics
Certain characteristics are valid in combination, as in:
CHARACTERISTICS=
"public.accessibility.transcribes-spoken-dialog,public.easy-to-read"
8.10. EXT-X-DATERANGE Carrying SCTE-35 Tags
This example shows two EXT-X-DATERANGE tags that describe a single
Date Range, with an SCTE-35 "out" splice_insert() command that is
subsequently updated with an SCTE-35 "in" splice_insert() command.
#EXTM3U
...
#EXT-X-DATERANGE:ID="splice-6FFFFFF0",START-DATE="2014-03-05T11:
15:00Z",PLANNED-DURATION=59.993,SCTE35-OUT=0xFC002F0000000000FF0
00014056FFFFFF000E011622DCAFF000052636200000000000A0008029896F50
000008700000000
... Media Segment declarations for 60s worth of media
#EXT-X-DATERANGE:ID="splice-6FFFFFF0",DURATION=59.993,SCTE35-IN=
0xFC002A0000000000FF00000F056FFFFFF000401162802E6100000000000A00
08029896F50000008700000000
...
9. IANA Considerations
IANA has registered the following media type [RFC2046]:
Type name: application
Subtype name: vnd.apple.mpegurl
Required parameters: none
Optional parameters: none
Encoding considerations: encoded as UTF-8, which is 8-bit text. This
media type may require encoding on transports not capable of handling
8-bit text. See Section 4 for more information.
Security considerations: See Section 10.
Compression: this media type does not employ compression.
Pantos & May Informational [Page 54]
^L
RFC 8216 HTTP Live Streaming August 2017
Interoperability considerations: There are no byte-ordering issues,
since files are 8-bit text. Applications could encounter
unrecognized tags, which SHOULD be ignored.
Published specification: see Section 4.
Applications that use this media type: Multimedia applications such
as the iPhone media player in iOS 3.0 and later and QuickTime Player
in Mac OS X version 10.6 and later.
Fragment identifier considerations: no Fragment Identifiers are
defined for this media type.
Additional information:
Deprecated alias names for this type: none
Magic number(s): #EXTM3U
File extension(s): .m3u8, .m3u (see Section 4)
Macintosh file type code(s): none
Person & email address to contact for further information: David
Singer, singer@apple.com.
Intended usage: LIMITED USE
Restrictions on usage: none
Author: Roger Pantos
Change Controller: David Singer
10. Security Considerations
Since the protocol generally uses HTTP to transfer data, most of the
same security considerations apply. See Section 15 of HTTP
[RFC7230].
Media file parsers are typically subject to "fuzzing" attacks.
Implementors SHOULD pay particular attention to code that will parse
data received from a server and ensure that all possible inputs are
handled correctly.
Playlist files contain URIs, which clients will use to make network
requests of arbitrary entities. Clients SHOULD range-check responses
to prevent buffer overflows. See also the Security Considerations
section of "Uniform Resource Identifier (URI): Generic Syntax"
[RFC3986].
Pantos & May Informational [Page 55]
^L
RFC 8216 HTTP Live Streaming August 2017
Apart from URL resolution, this format does not employ any form of
active content.
Clients SHOULD limit each playback session to a reasonable number of
concurrent downloads (e.g., four) to avoid contributing to denial-of-
service attacks.
HTTP requests often include session state ("cookies"), which may
contain private user data. Implementations MUST follow cookie
restriction and expiry rules specified by "HTTP State Management
Mechanism" [RFC6265] to protect themselves from attack. See also the
Security Considerations section of that document, and "Use of HTTP
State Management" [RFC2964].
Encryption keys are specified by URI. The delivery of these keys
SHOULD be secured by a mechanism such as HTTP Over TLS [RFC2818]
(formerly SSL) in conjunction with a secure realm or a session token.
11. References
11.1. Normative References
[AC_3] Advanced Television Systems Committee, "Digital Audio
Compression (AC-3) (E-AC-3) Standard", ATSC
Standard A/52:2010, November 2010, <http://atsc.org/
wp-content/uploads/2015/03/A52-201212-17.pdf>.
[AES_128] National Institute of Standards and Technology, "Advanced
Encryption Standard (AES)", FIPS PUB 197,
DOI 10.6028/NIST.FIPS.197, November 2001,
<http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf>.
[CEA608] Consumer Electronics Association, "ANSI/CEA 608-E: Line 21
Data Services", April 2008.
[CEA708] Consumer Technology Association, "Digital Television (DTV)
Closed Captioning", ANSI/CTA Standard CEA-708-E, August
2013, <https://standards.cta.tech/kwspub/published_docs/
ANSI-CTA-708-E-Preview.pdf>.
[COMMON_ENC]
International Organization for Standardization,
"Information technology -- MPEG systems technologies --
Part 7: Common encryption in ISO base media file format
files", ISO/IEC 23001-7:2016, February 2016,
<http://www.iso.org/iso/
catalogue_detail.htm?csnumber=68042>.
Pantos & May Informational [Page 56]
^L
RFC 8216 HTTP Live Streaming August 2017
[H_264] International Telecommunications Union, "Advanced video
coding for generic audiovisual services", January 2012,
<http://www.itu.int/rec/T-REC-H.264>.
[HDCP] Digital Content Protection LLC, "High-bandwidth Digital
Content Protection System - Mapping HDCP to HDMI",
February 2013, <http://www.digital-cp.com/
sites/default/files/specifications/
HDCP%20on%20HDMI%20Specification%20Rev2_2_Final1.pdf>.
[ISO_13818]
International Organization for Standardization, "Generic
coding of moving pictures and associated audio
information", ISO/IEC International Standard 13818,
October 2007,
<http://www.iso.org/iso/catalogue_detail?csnumber=44169>.
[ISO_13818_3]
International Organization for Standardization, "ISO/IEC
International Standard 13818-3:1998; Generic coding of
moving pictures and associated audio information - Part 3:
Audio", April 1998,
<http://www.iso.org/iso/home/store/catalogue_tc/
catalogue_detail.htm?csnumber=26797>.
[ISO_13818_7]
International Organization for Standardization, "Generic
coding of moving pictures and associated audio information
- Part 7: Advanced Audio Coding (AAC)", ISO/IEC
International Standard 13818-3:2006, January 2006,
<http://www.iso.org/iso/home/store/catalogue_tc/
catalogue_detail.htm?csnumber=43345>.
[ISO_14496]
International Organization for Standardization,
"Information technology -- Coding of audio-visual objects
-- Part 3: Audio", ISO/IEC 14496-3:2009, 2009,
<http://www.iso.org/iso/catalogue_detail?csnumber=53943>.
[ISO_8601] International Organization for Standardization, "Data
elements and interchange formats -- Information
interchange -- Representation of dates and times", ISO/IEC
International Standard 8601:2004, December 2004,
<http://www.iso.org/iso/catalogue_detail?csnumber=40874>.
Pantos & May Informational [Page 57]
^L
RFC 8216 HTTP Live Streaming August 2017
[ISOBMFF] International Organization for Standardization,
"Information technology -- Coding of audio-visual objects
-- Part 12: ISO base media file format",
ISO/IEC 14496-12:2015, December 2015,
<http://www.iso.org/iso/
catalogue_detail.htm?csnumber=68960>.
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
DOI 10.17487/RFC2046, November 1996,
<https://www.rfc-editor.org/info/rfc2046>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC2818] Rescorla, E., "HTTP Over TLS", RFC 2818,
DOI 10.17487/RFC2818, May 2000,
<https://www.rfc-editor.org/info/rfc2818>.
[RFC2964] Moore, K. and N. Freed, "Use of HTTP State Management",
BCP 44, RFC 2964, DOI 10.17487/RFC2964, October 2000,
<https://www.rfc-editor.org/info/rfc2964>.
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
2003, <https://www.rfc-editor.org/info/rfc3629>.
[RFC3986] Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform
Resource Identifier (URI): Generic Syntax", STD 66,
RFC 3986, DOI 10.17487/RFC3986, January 2005,
<https://www.rfc-editor.org/info/rfc3986>.
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
September 2009, <https://www.rfc-editor.org/info/rfc5646>.
[RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70,
RFC 5652, DOI 10.17487/RFC5652, September 2009,
<https://www.rfc-editor.org/info/rfc5652>.
[RFC6265] Barth, A., "HTTP State Management Mechanism", RFC 6265,
DOI 10.17487/RFC6265, April 2011,
<https://www.rfc-editor.org/info/rfc6265>.
Pantos & May Informational [Page 58]
^L
RFC 8216 HTTP Live Streaming August 2017
[RFC6381] Gellens, R., Singer, D., and P. Frojdh, "The 'Codecs' and
'Profiles' Parameters for "Bucket" Media Types", RFC 6381,
DOI 10.17487/RFC6381, August 2011,
<https://www.rfc-editor.org/info/rfc6381>.
[RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data
Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March
2014, <https://www.rfc-editor.org/info/rfc7159>.
[RFC7230] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer
Protocol (HTTP/1.1): Message Syntax and Routing",
RFC 7230, DOI 10.17487/RFC7230, June 2014,
<https://www.rfc-editor.org/info/rfc7230>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[SCTE35] Society of Cable Telecommunications Engineers, "Digital
Program Insertion Cueing Message for Cable", ANSI/SCTE 35,
August 2014, <http://www.scte.org/documents/pdf/Standards/
ANSI_SCTE%2035%202014.pdf>.
[US_ASCII] American National Standard for Information Systems, "Coded
Character Sets - 7-Bit American National Standard Code for
Information Interchange (7-Bit ASCII)", ANSI X3.4,
December 1986.
[WebVTT] World Wide Web Consortium (W3C), "WebVTT: The Web Video
Text Tracks Format", Draft Community Group Report, June
2017, <http://dev.w3.org/html5/webvtt/>.
11.2. Informative References
[CMAF] International Organization for Standardization,
"Information technology -- Multimedia application format
(MPEG-A) -- Part 19: Common media application format
(CMAF) for segmented media", ISO/IEC FDIS 23000-19,
<https://www.iso.org/standard/71975.html>.
[ID3] ID3.org, "The ID3 audio file data tagging format",
<http://www.id3.org/Developer_Information>.
[M3U] Nullsoft, Inc., "The M3U Playlist format, originally
invented for the Winamp media player",
<https://en.wikipedia.org/w/
index.php?title=M3U7amp;oldid=786631666>.
Pantos & May Informational [Page 59]
^L
RFC 8216 HTTP Live Streaming August 2017
[SampleEnc]
Apple Inc., "MPEG-2 Stream Encryption Format for HTTP Live
Streaming",
<https://developer.apple.com/library/ios/documentation/
AudioVideo/Conceptual/HLS_Sample_Encryption/>.
[UNICODE] The Unicode Consortium, "The Unicode Standard",
<http://www.unicode.org/versions/latest/>.
[UTI] Apple Inc., "Uniform Type Identifier",
<http://developer.apple.com/library/ios/#documentation/
general/conceptual/DevPedia-CocoaCore/
UniformTypeIdentifier.html>.
Contributors
Significant contributions to the design of this protocol were made by
Jim Batson, David Biderman, Bill May, Roger Pantos, Alan Tseng, and
Eryk Vershen. Stuart Cheshire helped edit the specification.
Authors' Addresses
Roger Pantos (editor)
Apple, Inc.
Cupertino, California
United States of America
Email: http-live-streaming-review@group.apple.com
William May, Jr.
Major League Baseball Advanced Media
New York, New York
United States of America
Email: bill.may@mlb.com
Pantos & May Informational [Page 60]
^L
|