@@ -19,12 +19,14 @@ pub fn parse_playlist_res(input: &[u8]) -> Result<Playlist, M3u8ParseError> {
1919
2020 // media playlist
2121 let mut media_sequence = 0 ;
22+ let mut discontinuity_sequence = 0 ;
2223 let mut segments: Vec < MediaSegment > = Vec :: new ( ) ;
2324 let mut end_list = false ;
2425
2526 // Maps(initial segment information) and keys(encryption information)
2627 let mut current_key: Option < Key > = None ;
2728 let mut current_map: Option < Map > = None ;
29+ let mut current_part_index = 0 ;
2830
2931 // Pending tags, which should be cleared after the URI line is processed
3032 let mut pending_inf: Option < hls:: Inf > = None ;
@@ -35,6 +37,13 @@ pub fn parse_playlist_res(input: &[u8]) -> Result<Playlist, M3u8ParseError> {
3537 match line {
3638 HlsLine :: KnownTag ( KnownTag :: Hls ( tag) ) => match tag {
3739 hls:: Tag :: MediaSequence ( seq) => media_sequence = seq. media_sequence ( ) ,
40+ hls:: Tag :: DiscontinuitySequence ( seq) => {
41+ discontinuity_sequence = seq. discontinuity_sequence ( ) ;
42+ current_part_index = discontinuity_sequence;
43+ }
44+ hls:: Tag :: Discontinuity ( _) => {
45+ current_part_index += 1 ;
46+ }
3847 hls:: Tag :: Inf ( inf) => pending_inf = Some ( inf) ,
3948 hls:: Tag :: Byterange ( range) => pending_byterange = Some ( range. into ( ) ) ,
4049 hls:: Tag :: Key ( key) => current_key = Some ( key. into ( ) ) ,
@@ -63,6 +72,7 @@ pub fn parse_playlist_res(input: &[u8]) -> Result<Playlist, M3u8ParseError> {
6372 pending_byterange. take ( ) ,
6473 current_key. clone ( ) ,
6574 current_map. clone ( ) ,
75+ current_part_index,
6676 )
6777 . into ( ) ,
6878 ) ;
@@ -83,6 +93,7 @@ pub fn parse_playlist_res(input: &[u8]) -> Result<Playlist, M3u8ParseError> {
8393 } else {
8494 Playlist :: MediaPlaylist ( MediaPlaylist {
8595 media_sequence,
96+ discontinuity_sequence,
8697 segments,
8798 end_list,
8899 } )
0 commit comments