@@ -3,6 +3,7 @@ import { lexicalParse } from "./lexical-parse";
33import type { Tag } from "./lexical-parse" ;
44import type {
55 DateRange ,
6+ Key ,
67 MasterPlaylist ,
78 MediaInitializationSection ,
89 MediaPlaylist ,
@@ -90,12 +91,18 @@ function formatMediaPlaylist(tags: Tag[]): MediaPlaylist {
9091 let segmentStart = - 1 ;
9192
9293 let map : MediaInitializationSection | undefined ;
94+ let key : Key | undefined ;
9395 tags . forEach ( ( [ name , value ] , index ) => {
9496 if ( name === "EXT-X-MAP" ) {
9597 // TODO: We might be better off passing on segments to |parseSegment| and look up
9698 // the last valid map.
9799 map = value ;
98100 }
101+ if ( name === "EXT-X-KEY" ) {
102+ // TODO: We might be better off passing on segments to |parseSegment| and look up
103+ // the last valid key.
104+ key = value ;
105+ }
99106
100107 // TODO: When we have EXT-X-KEY support, we're better off passing a full list of segments
101108 // to |parseSegment|, maybe?
@@ -114,7 +121,7 @@ function formatMediaPlaylist(tags: Tag[]): MediaPlaylist {
114121 const segmentTags = tags . slice ( segmentStart , index + 1 ) ;
115122 const uri = nextLiteral ( segmentTags , segmentTags . length - 2 ) ;
116123
117- const segment = parseSegment ( segmentTags , uri , map ) ;
124+ const segment = parseSegment ( segmentTags , uri , map , key ) ;
118125 segments . push ( segment ) ;
119126
120127 segmentStart = - 1 ;
@@ -164,6 +171,7 @@ function isSegmentTag(name: Tag[0]) {
164171 case "EXT-X-MAP" :
165172 case "EXT-X-CUE-OUT" :
166173 case "EXT-X-CUE-IN" :
174+ case "EXT-X-KEY" :
167175 return true ;
168176 }
169177 return false ;
@@ -173,6 +181,7 @@ function parseSegment(
173181 tags : Tag [ ] ,
174182 uri : string ,
175183 map ?: MediaInitializationSection ,
184+ key ?: Key ,
176185) : Segment {
177186 let duration : number | undefined ;
178187 let discontinuity : boolean | undefined ;
@@ -204,6 +213,7 @@ function parseSegment(
204213 duration,
205214 discontinuity,
206215 map,
216+ key,
207217 programDateTime,
208218 spliceInfo,
209219 } ;
0 commit comments