diff --git a/sample-playlists/media-playlist-with-cues.m3u8 b/sample-playlists/media-playlist-with-cues.m3u8 index b20902b..d47af77 100644 --- a/sample-playlists/media-playlist-with-cues.m3u8 +++ b/sample-playlists/media-playlist-with-cues.m3u8 @@ -1,3 +1,4 @@ +#EXTM3U #EXTINF:10, http://media.example.com/fileSequence7796.ts #EXTINF:6, diff --git a/sample-playlists/media-playlist-with-discontinuity.m3u8 b/sample-playlists/media-playlist-with-discontinuity.m3u8 index a570537..21c6c1f 100644 --- a/sample-playlists/media-playlist-with-discontinuity.m3u8 +++ b/sample-playlists/media-playlist-with-discontinuity.m3u8 @@ -1,5 +1,3 @@ -# https://developer.apple.com/library/ios/technotes/tn2288/_index.html -# #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 @@ -12,4 +10,4 @@ ad1.ts #EXTINF:10.0, movieA.ts #EXTINF:10.0, -movieB.ts \ No newline at end of file +movieB.ts diff --git a/src/parser.rs b/src/parser.rs index 4abd4e8..562b129 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -157,7 +157,13 @@ pub fn parse_playlist_res(input: &[u8]) -> Result IResult<&[u8], MasterPlaylist> { - map(parse_master_playlist_tags, master_playlist_from_tags)(input) + map( + pair( + complete(pair(m3u_tag, multispace0)), + parse_master_playlist_tags, + ), + |(_, tags)| master_playlist_from_tags(tags), + )(input) } /// Parse input as a master playlist @@ -173,7 +179,13 @@ pub fn parse_master_playlist_res( /// Parse input as a media playlist pub fn parse_media_playlist(input: &[u8]) -> IResult<&[u8], MediaPlaylist> { - map(parse_media_playlist_tags, media_playlist_from_tags)(input) + map( + pair( + complete(pair(m3u_tag, multispace0)), + parse_media_playlist_tags, + ), + |(_, tags)| media_playlist_from_tags(tags), + )(input) } /// Parse input as a media playlist @@ -271,7 +283,6 @@ pub fn parse_master_playlist_tags(i: &[u8]) -> IResult<&[u8], Vec IResult<&[u8], MasterPlaylistTag> { peek(take(1usize))(i)?; alt(( - map(m3u_tag, MasterPlaylistTag::M3U), map(version_tag, MasterPlaylistTag::Version), map(variant_stream_tag, MasterPlaylistTag::VariantStream), map(variant_i_frame_stream_tag, MasterPlaylistTag::VariantStream), @@ -404,7 +414,6 @@ pub fn parse_media_playlist_tags(i: &[u8]) -> IResult<&[u8], Vec IResult<&[u8], MediaPlaylistTag> { peek(take(1usize))(i)?; alt(( - map(m3u_tag, MediaPlaylistTag::M3U), map(version_tag, MediaPlaylistTag::Version), map( pair(tag("#EXT-X-TARGETDURATION:"), float), @@ -624,8 +632,8 @@ pub fn extmap(i: &[u8]) -> IResult<&[u8], Map> { // Basic tags // ----------------------------------------------------------------------------------------------- -pub fn m3u_tag(i: &[u8]) -> IResult<&[u8], String> { - map_res(tag("#EXTM3U"), from_utf8_slice)(i) +pub fn m3u_tag(i: &[u8]) -> IResult<&[u8], ()> { + map(tag("#EXTM3U"), |_| ())(i) } pub fn version_tag(i: &[u8]) -> IResult<&[u8], usize> {