From e4e1717b0a25f6dc7a26d61d2cad23cf34d69c86 Mon Sep 17 00:00:00 2001 From: Vadim Getmanshchuk Date: Wed, 26 Feb 2020 17:17:13 -0800 Subject: [PATCH] Back ported 1.0.6 release --- src/playlist.rs | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/src/playlist.rs b/src/playlist.rs index a8799da..509d7f9 100644 --- a/src/playlist.rs +++ b/src/playlist.rs @@ -14,13 +14,13 @@ macro_rules! write_some_attribute_quoted { ($w:expr, $tag:expr, $o:expr) => ( if let &Some(ref v) = $o { write!($w, "{}=\"{}\"", $tag, v) } else { Ok(()) } ); -} +} macro_rules! write_some_attribute { ($w:expr, $tag:expr, $o:expr) => ( if let &Some(ref v) = $o { write!($w, "{}={}", $tag, v) } else { Ok(()) } ); -} +} macro_rules! bool_default_false { ($optional:expr) => ( @@ -29,7 +29,7 @@ macro_rules! bool_default_false { Some(_) | None => false, } ); -} +} /// [Playlist](https://tools.ietf.org/html/draft-pantos-http-live-streaming-19#section-4.1), /// can either be a `MasterPlaylist` or a `MediaPlaylist`. @@ -78,7 +78,6 @@ impl MasterPlaylist { let mut alternatives = vec![]; while let Some(tag) = tags.pop() { - match tag { MasterPlaylistTag::Version(v) => { master_playlist.version = v; @@ -138,7 +137,7 @@ impl MasterPlaylist { if let Some(ref start) = self.start { start.write_to(w)?; } - if self.independent_segments { + if self.independent_segments { writeln!(w, "#EXT-X-INDEPENDENT-SEGMENTS")?; } @@ -171,7 +170,7 @@ pub struct VariantStream { // pub bandwidth: String, pub average_bandwidth: Option, - pub codecs: String, + pub codecs: Option, pub resolution: Option, pub frame_rate: Option, pub audio: Option, @@ -190,7 +189,7 @@ impl VariantStream { uri: attrs.remove("URI").unwrap_or_else(String::new), bandwidth: attrs.remove("BANDWIDTH").unwrap_or_else(String::new), average_bandwidth: attrs.remove("AVERAGE-BANDWIDTH"), - codecs: attrs.remove("CODECS").unwrap_or_else(String::new), + codecs: attrs.remove("CODECS"), resolution: attrs.remove("RESOLUTION"), frame_rate: attrs.remove("FRAME-RATE"), audio: attrs.remove("AUDIO"), @@ -204,7 +203,7 @@ impl VariantStream { pub fn write_to(&self, w: &mut T) -> std::io::Result<()> { for alternative in &self.alternatives { - alternative.write_to(w)?; + alternative.write_to(w)?; } if self.is_i_frame { @@ -226,7 +225,7 @@ impl VariantStream { fn write_stream_inf_common_attributes(&self, w: &mut T) -> std::io::Result<()> { write!(w, "BANDWIDTH={}", &self.bandwidth)?; write_some_attribute!(w, ",AVERAGE-BANDWIDTH", &self.average_bandwidth)?; - write!(w, ",CODECS=\"{}\"", &self.codecs)?; + write_some_attribute_quoted!(w, ",CODECS", &self.codecs)?; write_some_attribute!(w, ",RESOLUTION", &self.resolution)?; write_some_attribute!(w, ",FRAME-RATE", &self.frame_rate)?; write_some_attribute_quoted!(w, ",VIDEO", &self.video) @@ -331,7 +330,7 @@ impl fmt::Display for AlternativeMediaType { &AlternativeMediaType::Subtitles => "SUBTITLES", &AlternativeMediaType::ClosedCaptions => "CLOSEDCAPTIONS", }) - } + } } @@ -420,7 +419,7 @@ impl MediaPlaylist { let mut map = None; while let Some(tag) = tags.pop() { - + match tag { MediaPlaylistTag::Version(v) => { media_playlist.version = v; @@ -496,25 +495,25 @@ impl MediaPlaylist { writeln!(w, "#EXT-X-VERSION:{}", self.version)?; writeln!(w, "#EXT-X-TARGETDURATION:{}", self.target_duration)?; - if self.media_sequence != 0 { + if self.media_sequence != 0 { writeln!(w, "#EXT-X-MEDIA-SEQUENCE:{}", self.media_sequence)?; } if self.discontinuity_sequence != 0 { writeln!(w, "#EXT-X-DISCONTINUITY-SEQUENCE:{}", self.discontinuity_sequence)?; } - if self.end_list { - writeln!(w, "#EXT-X-ENDLIST")?; + if self.end_list { + writeln!(w, "#EXT-X-ENDLIST")?; } if let Some(ref v) = self.playlist_type { writeln!(w, "#EXT-X-PLAYLIST-TYPE:{}", v)?; } - if self.i_frames_only { + if self.i_frames_only { writeln!(w, "#EXT-X-I-FRAMES-ONLY")?; } if let Some(ref start) = self.start { start.write_to(w)?; } - if self.independent_segments { + if self.independent_segments { writeln!(w, "#EXT-X-INDEPENDENT-SEGMENTS")?; } for segment in &self.segments { @@ -551,7 +550,7 @@ impl fmt::Display for MediaPlaylistType { &MediaPlaylistType::Event => "EVENT", &MediaPlaylistType::Vod => "VOD", }) - } + } } impl Default for MediaPlaylistType { @@ -599,8 +598,8 @@ impl MediaSegment { byte_range.write_value_to(w)?; write!(w, "\n")?; } - if self.discontinuity { - writeln!(w, "{}", "#EXT-X-DISCONTINUITY")?; + if self.discontinuity { + writeln!(w, "{}", "#EXT-X-DISCONTINUITY")?; } if let Some(ref key) = self.key { write!(w, "#EXT-X-KEY:")?; @@ -617,7 +616,7 @@ impl MediaSegment { } if let Some(ref v) = self.daterange { writeln!(w, "#EXT-X-DATERANGE:{}", v)?; - } + } write!(w, "#EXTINF:{},", self.duration)?; @@ -658,7 +657,7 @@ impl Key { } } - pub fn write_attributes_to(&self, w: &mut T) -> std::io::Result<()> { + pub fn write_attributes_to(&self, w: &mut T) -> std::io::Result<()> { write!(w, "METHOD={}", self.method)?; write_some_attribute_quoted!(w, ",URI", &self.uri)?; write_some_attribute!(w, ",IV", &self.iv)?;