2020-04-22 07:54:48 +00:00
|
|
|
use std::convert::TryFrom;
|
|
|
|
|
2020-03-17 14:58:59 +00:00
|
|
|
use hls_m3u8::tags::{ExtXMedia, VariantStream};
|
|
|
|
use hls_m3u8::types::{MediaType, StreamData};
|
|
|
|
use hls_m3u8::MasterPlaylist;
|
|
|
|
|
|
|
|
use pretty_assertions::assert_eq;
|
|
|
|
|
|
|
|
macro_rules! generate_tests {
|
|
|
|
( $( $fnname:ident => { $struct:expr, $str:expr }),+ $(,)* ) => {
|
|
|
|
$(
|
|
|
|
#[test]
|
|
|
|
fn $fnname() {
|
2020-04-22 07:54:48 +00:00
|
|
|
assert_eq!($struct, TryFrom::try_from($str).unwrap());
|
2020-03-17 14:58:59 +00:00
|
|
|
|
|
|
|
assert_eq!($struct.to_string(), $str.to_string());
|
|
|
|
}
|
|
|
|
)+
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
generate_tests! {
|
|
|
|
test_alternate_audio => {
|
|
|
|
MasterPlaylist::builder()
|
|
|
|
.media(vec![
|
|
|
|
ExtXMedia::builder()
|
|
|
|
.media_type(MediaType::Audio)
|
|
|
|
.group_id("audio")
|
|
|
|
.language("eng")
|
|
|
|
.name("English")
|
|
|
|
.is_autoselect(true)
|
|
|
|
.is_default(true)
|
|
|
|
.uri("eng/prog_index.m3u8")
|
|
|
|
.build()
|
|
|
|
.unwrap(),
|
|
|
|
ExtXMedia::builder()
|
|
|
|
.media_type(MediaType::Audio)
|
|
|
|
.group_id("audio")
|
|
|
|
.language("fre")
|
|
|
|
.name("Français")
|
|
|
|
.is_autoselect(true)
|
|
|
|
.is_default(false)
|
|
|
|
.uri("fre/prog_index.m3u8")
|
|
|
|
.build()
|
|
|
|
.unwrap(),
|
|
|
|
ExtXMedia::builder()
|
|
|
|
.media_type(MediaType::Audio)
|
|
|
|
.group_id("audio")
|
|
|
|
.language("sp")
|
|
|
|
.name("Espanol")
|
|
|
|
.is_autoselect(true)
|
|
|
|
.is_default(false)
|
|
|
|
.uri("sp/prog_index.m3u8")
|
|
|
|
.build()
|
|
|
|
.unwrap(),
|
|
|
|
])
|
|
|
|
.variant_streams(vec![
|
|
|
|
VariantStream::ExtXStreamInf {
|
|
|
|
uri: "lo/prog_index.m3u8".into(),
|
|
|
|
frame_rate: None,
|
|
|
|
audio: Some("audio".into()),
|
|
|
|
subtitles: None,
|
|
|
|
closed_captions: None,
|
|
|
|
stream_data: StreamData::builder()
|
|
|
|
.bandwidth(195023)
|
2024-09-06 11:38:41 +00:00
|
|
|
.codecs(["avc1.42e00a", "mp4a.40.2"])
|
2020-03-17 14:58:59 +00:00
|
|
|
.build()
|
|
|
|
.unwrap()
|
|
|
|
},
|
|
|
|
VariantStream::ExtXStreamInf {
|
|
|
|
uri: "hi/prog_index.m3u8".into(),
|
|
|
|
frame_rate: None,
|
|
|
|
audio: Some("audio".into()),
|
|
|
|
subtitles: None,
|
|
|
|
closed_captions: None,
|
|
|
|
stream_data: StreamData::builder()
|
|
|
|
.bandwidth(591680)
|
2024-09-06 11:38:41 +00:00
|
|
|
.codecs(["avc1.42e01e", "mp4a.40.2"])
|
2020-03-17 14:58:59 +00:00
|
|
|
.build()
|
|
|
|
.unwrap()
|
|
|
|
}
|
|
|
|
])
|
|
|
|
.build()
|
|
|
|
.unwrap(),
|
|
|
|
concat!(
|
|
|
|
"#EXTM3U\n",
|
|
|
|
|
|
|
|
"#EXT-X-MEDIA:",
|
|
|
|
"TYPE=AUDIO,",
|
|
|
|
"URI=\"eng/prog_index.m3u8\",",
|
|
|
|
"GROUP-ID=\"audio\",",
|
|
|
|
"LANGUAGE=\"eng\",",
|
|
|
|
"NAME=\"English\",",
|
|
|
|
"DEFAULT=YES,",
|
|
|
|
"AUTOSELECT=YES",
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"#EXT-X-MEDIA:",
|
|
|
|
"TYPE=AUDIO,",
|
|
|
|
"URI=\"fre/prog_index.m3u8\",",
|
|
|
|
"GROUP-ID=\"audio\",",
|
|
|
|
"LANGUAGE=\"fre\",",
|
|
|
|
"NAME=\"Français\",",
|
|
|
|
"AUTOSELECT=YES",
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"#EXT-X-MEDIA:",
|
|
|
|
"TYPE=AUDIO,",
|
|
|
|
"URI=\"sp/prog_index.m3u8\",",
|
|
|
|
"GROUP-ID=\"audio\",",
|
|
|
|
"LANGUAGE=\"sp\",",
|
|
|
|
"NAME=\"Espanol\",",
|
|
|
|
"AUTOSELECT=YES",
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"#EXT-X-STREAM-INF:",
|
|
|
|
"BANDWIDTH=195023,",
|
|
|
|
"CODECS=\"avc1.42e00a,mp4a.40.2\",",
|
|
|
|
"AUDIO=\"audio\"",
|
|
|
|
"\n",
|
|
|
|
"lo/prog_index.m3u8\n",
|
|
|
|
|
|
|
|
"#EXT-X-STREAM-INF:",
|
|
|
|
"BANDWIDTH=591680,",
|
|
|
|
"CODECS=\"avc1.42e01e,mp4a.40.2\",",
|
|
|
|
"AUDIO=\"audio\"",
|
|
|
|
"\n",
|
|
|
|
"hi/prog_index.m3u8\n"
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|