diff --git a/Cargo.toml b/Cargo.toml index 8532046..a1ac42a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,6 @@ serde_with = { version = "3.0.0", default-features = false, features = [ "macros", "json", ] } -serde_plain = "1.0.1" rand = "0.8.5" time = { version = "0.3.15", features = [ "macros", diff --git a/cli/src/main.rs b/cli/src/main.rs index d205933..44c94eb 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -8,7 +8,7 @@ use reqwest::{Client, ClientBuilder}; use rustypipe::{ client::RustyPipe, model::{UrlTarget, VideoId}, - param::{search_filter, ChannelVideoTab, StreamFilter}, + param::{search_filter, StreamFilter}, }; use serde::Serialize; @@ -113,7 +113,6 @@ enum ChannelTab { Videos, Shorts, Live, - Playlists, Info, } @@ -565,16 +564,8 @@ async fn main() { print_data(&artist, format, pretty); } else { match tab { - ChannelTab::Videos | ChannelTab::Shorts | ChannelTab::Live => { - let video_tab = match tab { - ChannelTab::Videos => ChannelVideoTab::Videos, - ChannelTab::Shorts => ChannelVideoTab::Shorts, - ChannelTab::Live => ChannelVideoTab::Live, - _ => unreachable!(), - }; - let mut channel = - rp.query().channel_videos_tab(&id, video_tab).await.unwrap(); - + ChannelTab::Videos => { + let mut channel = rp.query().channel_videos(&id).await.unwrap(); channel .content .extend_limit(rp.query(), limit) @@ -582,8 +573,23 @@ async fn main() { .unwrap(); print_data(&channel, format, pretty); } - ChannelTab::Playlists => { - let channel = rp.query().channel_playlists(&id).await.unwrap(); + ChannelTab::Shorts => { + let mut channel = rp.query().channel_shorts(&id).await.unwrap(); + channel + .content + .extend_limit(rp.query(), limit) + .await + .unwrap(); + print_data(&channel, format, pretty); + } + ChannelTab::Live => { + let mut channel = + rp.query().channel_livestreams(&id).await.unwrap(); + channel + .content + .extend_limit(rp.query(), limit) + .await + .unwrap(); print_data(&channel, format, pretty); } ChannelTab::Info => { diff --git a/codegen/src/download_testfiles.rs b/codegen/src/download_testfiles.rs index 0e72d08..ad18b7c 100644 --- a/codegen/src/download_testfiles.rs +++ b/codegen/src/download_testfiles.rs @@ -10,7 +10,7 @@ use rustypipe::{ client::{ClientType, RustyPipe}, param::{ search_filter::{self, ItemType, SearchFilter}, - ChannelVideoTab, Country, + Country, }, report::{Report, Reporter}, }; @@ -305,7 +305,7 @@ async fn channel_shorts() { let rp = rp_testfile(&json_path); rp.query() - .channel_videos_tab("UCh8gHdtzO2tXd593_bjErWg", ChannelVideoTab::Shorts) + .channel_shorts("UCh8gHdtzO2tXd593_bjErWg") .await .unwrap(); } @@ -318,7 +318,7 @@ async fn channel_livestreams() { let rp = rp_testfile(&json_path); rp.query() - .channel_videos_tab("UC2DjFE7Xf11URZqWBigcVOQ", ChannelVideoTab::Live) + .channel_livestreams("UC2DjFE7Xf11URZqWBigcVOQ") .await .unwrap(); } diff --git a/codegen/src/gen_locales.rs b/codegen/src/gen_locales.rs index b31a113..2762693 100644 --- a/codegen/src/gen_locales.rs +++ b/codegen/src/gen_locales.rs @@ -1,7 +1,5 @@ use std::collections::BTreeMap; use std::fmt::Write; -use std::fs::File; -use std::io::BufReader; use path_macro::path; use reqwest::header; @@ -11,7 +9,6 @@ use serde_with::serde_as; use serde_with::VecSkipError; use crate::model::Text; -use crate::util::DICT_DIR; use crate::util::SRC_DIR; #[serde_as] @@ -144,45 +141,44 @@ struct LanguageCountryCommand { pub async fn generate_locales() { let (languages, countries) = get_locales().await; - let json_path = path!(*DICT_DIR / "lang_names.json"); - let json_file = File::open(json_path).unwrap(); - let lang_names: BTreeMap = - serde_json::from_reader(BufReader::new(json_file)).unwrap(); - let code_head = r#"// This file is automatically generated. DO NOT EDIT. //! Languages and countries -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use serde::{Deserialize, Serialize}; - -use crate::error::Error; "#; - let code_foot = r#"impl FromStr for Language { - type Err = Error; - - fn from_str(s: &str) -> Result { - let mut sub = s; - loop { - if let Ok(v) = serde_plain::from_str(sub) { - return Ok(v); - } - match sub.rfind('-') { - Some(pos) => { - sub = &sub[..pos]; - } - None => return Err(Error::Other("could not parse language `{s}`".into())), - } - } + let code_foot = r#"impl Display for Language { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str( + &serde_json::to_string(self).map_or("".to_owned(), |s| s[1..s.len() - 1].to_owned()), + ) } } -serde_plain::derive_display_from_serialize!(Language); +impl Display for Country { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str( + &serde_json::to_string(self).map_or("".to_owned(), |s| s[1..s.len() - 1].to_owned()), + ) + } +} -serde_plain::derive_fromstr_from_deserialize!(Country, Error); -serde_plain::derive_display_from_serialize!(Country); +impl FromStr for Language { + type Err = serde_json::Error; + fn from_str(s: &str) -> Result { + serde_json::from_str(&format!("\"{}\"", s)) + } +} + +impl FromStr for Country { + type Err = serde_json::Error; + fn from_str(s: &str) -> Result { + serde_json::from_str(&format!("\"{}\"", s)) + } +} "#; let mut code_langs = r#"/// Available languages @@ -227,8 +223,8 @@ pub enum Country { "# .to_owned(); - languages.iter().for_each(|(code, native_name)| { - let enum_name = code + languages.iter().for_each(|(c, n)| { + let enum_name = c .split('-') .map(|c| { format!( @@ -239,16 +235,10 @@ pub enum Country { }) .collect::(); - let en_name = lang_names.get(code).expect(code); - // Language enum - if en_name == native_name || code.starts_with("en") { - write!(code_langs, " /// {native_name}\n ").unwrap(); - } else { - write!(code_langs, " /// {en_name} / {native_name}\n ").unwrap(); - } - if code.contains('-') { - write!(code_langs, "#[serde(rename = \"{code}\")]\n ").unwrap(); + write!(code_langs, " /// {n}\n ").unwrap(); + if c.contains('-') { + write!(code_langs, "#[serde(rename = \"{c}\")]\n ").unwrap(); } code_langs += &enum_name; code_langs += ",\n"; @@ -259,7 +249,7 @@ pub enum Country { // Language names writeln!( code_lang_names, - " Language::{enum_name} => \"{native_name}\"," + " Language::{enum_name} => \"{n}\"," ) .unwrap(); }); diff --git a/notes/channel_order.md b/notes/channel_order.md deleted file mode 100644 index 1c9b699..0000000 --- a/notes/channel_order.md +++ /dev/null @@ -1,69 +0,0 @@ -# Channel order - -Fields: - -- `2:0:string` Channel ID -- `15:0:embedded` Videos tab -- `10:0:embedded` Shorts tab -- `14:0:embedded` Livestreams tab -- `2:0:string`: targetId for YouTube's web framework (`"\n$"` + any UUID) -- `3:1:varint` Sort order (1: Latest, 2: Popular) - -Popular videos - -```json -{ - "80226972:0:embedded": { - "2:0:string": "UCXuqSBlHAE6Xw-yeJA0Tunw", - "3:1:base64": { - "110:0:embedded": { - "3:0:embedded": { - "15:0:embedded": { - "2:0:string": "\n$6461d7c8-0000-2040-87aa-089e0827e420", - "3:1:varint": 2 - } - } - } - } - } -} -``` - -Popular shorts -```json -{ - "80226972:0:embedded": { - "2:0:string": "UCXuqSBlHAE6Xw-yeJA0Tunw", - "3:1:base64": { - "110:0:embedded": { - "3:0:embedded": { - "10:0:embedded": { - "2:0:string": "\n$64679ffb-0000-26b3-a1bd-582429d2c794", - "3:1:varint": 2 - } - } - } - } - } -} -``` - -Popular streams - -```json -{ - "80226972:0:embedded": { - "2:0:string": "UCXuqSBlHAE6Xw-yeJA0Tunw", - "3:1:base64": { - "110:0:embedded": { - "3:0:embedded": { - "14:0:embedded": { - "2:0:string": "\n$64693069-0000-2a1e-8c7d-582429bd5ba8", - "3:1:varint": 2 - } - } - } - } - } -} -``` diff --git a/src/client/channel.rs b/src/client/channel.rs index 0044f3a..0580f2f 100644 --- a/src/client/channel.rs +++ b/src/client/channel.rs @@ -1,15 +1,14 @@ +use std::borrow::Cow; + use serde::Serialize; use url::Url; use crate::{ error::{Error, ExtractionError}, - model::{ - paginator::{ContinuationEndpoint, Paginator}, - Channel, ChannelInfo, PlaylistItem, VideoItem, YouTubeItem, - }, - param::{ChannelOrder, ChannelVideoTab, Language}, + model::{paginator::Paginator, Channel, ChannelInfo, PlaylistItem, VideoItem, YouTubeItem}, + param::Language, serializer::MapResult, - util::{self, ProtoBuilder}, + util, }; use super::{response, ClientType, MapResponse, RustyPipeQuery, YTContext}; @@ -19,13 +18,13 @@ use super::{response, ClientType, MapResponse, RustyPipeQuery, YTContext}; struct QChannel<'a> { context: YTContext<'a>, browse_id: &'a str, - params: ChannelTab, + params: Params, #[serde(skip_serializing_if = "Option::is_none")] query: Option<&'a str>, } #[derive(Debug, Serialize)] -enum ChannelTab { +enum Params { #[serde(rename = "EgZ2aWRlb3PyBgQKAjoA")] Videos, #[serde(rename = "EgZzaG9ydHPyBgUKA5oBAA%3D%3D")] @@ -40,21 +39,11 @@ enum ChannelTab { Search, } -impl From for ChannelTab { - fn from(value: ChannelVideoTab) -> Self { - match value { - ChannelVideoTab::Videos => Self::Videos, - ChannelVideoTab::Shorts => Self::Shorts, - ChannelVideoTab::Live => Self::Live, - } - } -} - impl RustyPipeQuery { async fn _channel_videos>( &self, channel_id: S, - params: ChannelTab, + params: Params, query: Option<&str>, operation: &str, ) -> Result>, Error> { @@ -82,52 +71,26 @@ impl RustyPipeQuery { &self, channel_id: S, ) -> Result>, Error> { - self._channel_videos(channel_id, ChannelTab::Videos, None, "channel_videos") + self._channel_videos(channel_id, Params::Videos, None, "channel_videos") .await } - /// Get a ordered list of videos from a YouTube channel - /// - /// This function does not return channel metadata. - pub async fn channel_videos_order>( + /// Get the short videos from a YouTube channel + pub async fn channel_shorts>( &self, channel_id: S, - order: ChannelOrder, - ) -> Result, Error> { - self.channel_videos_tab_order(channel_id, ChannelVideoTab::Videos, order) - .await - } - - /// Get the specified video tab from a YouTube channel - pub async fn channel_videos_tab>( - &self, - channel_id: S, - tab: ChannelVideoTab, ) -> Result>, Error> { - self._channel_videos(channel_id, tab.into(), None, "channel_videos") + self._channel_videos(channel_id, Params::Shorts, None, "channel_shorts") .await } - /// Get a ordered list of videos from the specified tab of a YouTube channel - /// - /// This function does not return channel metadata. - pub async fn channel_videos_tab_order>( + /// Get the livestreams from a YouTube channel + pub async fn channel_livestreams>( &self, channel_id: S, - tab: ChannelVideoTab, - order: ChannelOrder, - ) -> Result, Error> { - let visitor_data = match tab { - ChannelVideoTab::Shorts => Some(self.get_visitor_data().await?), - _ => None, - }; - - self.continuation( - order_ctoken(channel_id.as_ref(), tab, order), - ContinuationEndpoint::Browse, - visitor_data.as_deref(), - ) - .await + ) -> Result>, Error> { + self._channel_videos(channel_id, Params::Live, None, "channel_livestreams") + .await } /// Search the videos of a channel @@ -138,7 +101,7 @@ impl RustyPipeQuery { ) -> Result>, Error> { self._channel_videos( channel_id, - ChannelTab::Search, + Params::Search, Some(query.as_ref()), "channel_search", ) @@ -155,7 +118,7 @@ impl RustyPipeQuery { let request_body = QChannel { context, browse_id: channel_id, - params: ChannelTab::Playlists, + params: Params::Playlists, query: None, }; @@ -179,7 +142,7 @@ impl RustyPipeQuery { let request_body = QChannel { context, browse_id: channel_id, - params: ChannelTab::Info, + params: Params::Info, query: None, }; @@ -488,16 +451,16 @@ fn map_channel_content( .or(tab.tab_renderer.content.section_list_renderer) }); - // YouTube may show the "Featured" tab if the requested tab is empty/does not exist - let content = if featured_tab { - MapResult::default() - } else { - match channel_content { - Some(list) => list.contents, - None => { - return Err(ExtractionError::InvalidData( - "could not extract content".into(), - )) + let content = match channel_content { + Some(list) => list.contents, + None => { + // YouTube may show the "Featured" tab if the requested tab is empty/does not exist + if featured_tab { + MapResult::default() + } else { + return Err(ExtractionError::InvalidData(Cow::Borrowed( + "could not extract content", + ))); } } }; @@ -532,47 +495,6 @@ fn combine_channel_data(channel_data: Channel<()>, content: T) -> Channel } } -/// Get the continuation token to fetch channel videos in the given order -fn order_ctoken(channel_id: &str, tab: ChannelVideoTab, order: ChannelOrder) -> String { - _order_ctoken( - channel_id, - tab, - order, - &format!("\n${}", util::random_uuid()), - ) -} - -/// Get the continuation token to fetch channel videos in the given order -/// (fixed targetId for testing) -fn _order_ctoken( - channel_id: &str, - tab: ChannelVideoTab, - order: ChannelOrder, - target_id: &str, -) -> String { - let mut pb_tab = ProtoBuilder::new(); - pb_tab.string(2, target_id); - pb_tab.varint(3, order as u64); - - let mut pb_3 = ProtoBuilder::new(); - pb_3.embedded(tab.order_ctoken_id(), pb_tab); - - let mut pb_110 = ProtoBuilder::new(); - pb_110.embedded(3, pb_3); - - let mut pbi = ProtoBuilder::new(); - pbi.embedded(110, pb_110); - - let mut pb_80226972 = ProtoBuilder::new(); - pb_80226972.string(2, channel_id); - pb_80226972.string(3, &pbi.to_base64()); - - let mut pb = ProtoBuilder::new(); - pb.embedded(80226972, pb_80226972); - - pb.to_base64() -} - #[cfg(test)] mod tests { use std::{fs::File, io::BufReader}; @@ -583,13 +505,11 @@ mod tests { use crate::{ client::{response, MapResponse}, model::{paginator::Paginator, Channel, ChannelInfo, PlaylistItem, VideoItem}, - param::{ChannelOrder, ChannelVideoTab, Language}, + param::Language, serializer::MapResult, util::tests::TESTFILES, }; - use super::_order_ctoken; - #[rstest] #[case::base("videos_base", "UC2DjFE7Xf11URZqWBigcVOQ")] #[case::music("videos_music", "UC_vmjW5e1xEHhYjY2a0kK1A")] @@ -665,33 +585,4 @@ mod tests { ); insta::assert_ron_snapshot!("map_channel_info", map_res.c); } - - #[test] - fn order_ctoken() { - let channel_id = "UCXuqSBlHAE6Xw-yeJA0Tunw"; - - let videos_popular_token = _order_ctoken( - channel_id, - ChannelVideoTab::Videos, - ChannelOrder::Popular, - "\n$6461d7c8-0000-2040-87aa-089e0827e420", - ); - assert_eq!(videos_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXg2S2hJbUNpUTJORFl4WkRkak9DMHdNREF3TFRJd05EQXRPRGRoWVMwd09EbGxNRGd5TjJVME1qQVlBZyUzRCUzRA%3D%3D"); - - let shorts_popular_token = _order_ctoken( - channel_id, - ChannelVideoTab::Shorts, - ChannelOrder::Popular, - "\n$64679ffb-0000-26b3-a1bd-582429d2c794", - ); - assert_eq!(shorts_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXhTS2hJbUNpUTJORFkzT1dabVlpMHdNREF3TFRJMllqTXRZVEZpWkMwMU9ESTBNamxrTW1NM09UUVlBZyUzRCUzRA%3D%3D"); - - let live_popular_token = _order_ctoken( - channel_id, - ChannelVideoTab::Live, - ChannelOrder::Popular, - "\n$64693069-0000-2a1e-8c7d-582429bd5ba8", - ); - assert_eq!(live_popular_token, "4qmFsgJkEhhVQ1h1cVNCbEhBRTZYdy15ZUpBMFR1bncaSDhnWXVHaXh5S2hJbUNpUTJORFk1TXpBMk9TMHdNREF3TFRKaE1XVXRPR00zWkMwMU9ESTBNamxpWkRWaVlUZ1lBZyUzRCUzRA%3D%3D"); - } } diff --git a/src/client/mod.rs b/src/client/mod.rs index edc130e..251157e 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -191,7 +191,6 @@ const CONSENT_COOKIE_YES: &str = "YES+yt.462272069.de+FX+"; const YOUTUBEI_V1_URL: &str = "https://www.youtube.com/youtubei/v1/"; const YOUTUBEI_V1_GAPIS_URL: &str = "https://youtubei.googleapis.com/youtubei/v1/"; const YOUTUBE_MUSIC_V1_URL: &str = "https://music.youtube.com/youtubei/v1/"; -const YOUTUBE_HOME_URL: &str = "https://www.youtube.com/"; const YOUTUBE_MUSIC_HOME_URL: &str = "https://music.youtube.com/"; const DISABLE_PRETTY_PRINT_PARAMETER: &str = "&prettyPrint=false"; @@ -390,17 +389,21 @@ impl RustyPipeBuilder { Box::new(FileStorage::new(cache_file)) }); - let cdata = storage - .as_ref() - .and_then(|storage| storage.read()) - .and_then(|data| match serde_json::from_str::(&data) { - Ok(data) => Some(data), - Err(e) => { - log::error!("Could not deserialize cache. Error: {}", e); - None + let cdata = if let Some(storage) = &storage { + if let Some(data) = storage.read() { + match serde_json::from_str::(&data) { + Ok(data) => data, + Err(e) => { + log::error!("Could not deserialize cache. Error: {}", e); + CacheData::default() + } } - }) - .unwrap_or_default(); + } else { + CacheData::default() + } + } else { + CacheData::default() + }; RustyPipe { inner: Arc::new(RustyPipeRef { @@ -645,7 +648,7 @@ impl RustyPipe { self.extract_client_version( Some("https://www.youtube.com/sw.js"), "https://www.youtube.com/results?search_query=", - YOUTUBE_HOME_URL, + "https://www.youtube.com", None, ) .await @@ -655,8 +658,8 @@ impl RustyPipe { async fn extract_music_client_version(&self) -> Result { self.extract_client_version( Some("https://music.youtube.com/sw.js"), - YOUTUBE_MUSIC_HOME_URL, - YOUTUBE_MUSIC_HOME_URL, + "https://music.youtube.com", + "https://music.youtube.com", None, ) .await @@ -813,7 +816,7 @@ impl RustyPipe { } } - async fn get_visitor_data(&self) -> Result { + async fn get_ytm_visitor_data(&self) -> Result { log::debug!("getting YTM visitor data"); let resp = self.inner.http.get(YOUTUBE_MUSIC_HOME_URL).send().await?; @@ -904,7 +907,7 @@ impl RustyPipeQuery { client_name: "WEB", client_version: Cow::Owned(self.client.get_desktop_client_version().await), platform: "DESKTOP", - original_url: Some(YOUTUBE_HOME_URL), + original_url: Some("https://www.youtube.com/"), visitor_data, hl, gl, @@ -919,7 +922,7 @@ impl RustyPipeQuery { client_name: "WEB_REMIX", client_version: Cow::Owned(self.client.get_music_client_version().await), platform: "DESKTOP", - original_url: Some(YOUTUBE_MUSIC_HOME_URL), + original_url: Some("https://music.youtube.com/"), visitor_data, hl, gl, @@ -943,7 +946,7 @@ impl RustyPipeQuery { request: Some(RequestYT::default()), user: User::default(), third_party: Some(ThirdParty { - embed_url: YOUTUBE_HOME_URL, + embed_url: "https://www.youtube.com/", }), }, ClientType::Android => YTContext { @@ -994,8 +997,8 @@ impl RustyPipeQuery { .post(format!( "{YOUTUBEI_V1_URL}{endpoint}?key={DESKTOP_API_KEY}{DISABLE_PRETTY_PRINT_PARAMETER}" )) - .header(header::ORIGIN, YOUTUBE_HOME_URL) - .header(header::REFERER, YOUTUBE_HOME_URL) + .header(header::ORIGIN, "https://www.youtube.com") + .header(header::REFERER, "https://www.youtube.com") .header(header::COOKIE, self.client.inner.consent_cookie.to_owned()) .header("X-YouTube-Client-Name", "1") .header( @@ -1009,8 +1012,8 @@ impl RustyPipeQuery { .post(format!( "{YOUTUBE_MUSIC_V1_URL}{endpoint}?key={DESKTOP_MUSIC_API_KEY}{DISABLE_PRETTY_PRINT_PARAMETER}" )) - .header(header::ORIGIN, YOUTUBE_MUSIC_HOME_URL) - .header(header::REFERER, YOUTUBE_MUSIC_HOME_URL) + .header(header::ORIGIN, "https://music.youtube.com") + .header(header::REFERER, "https://music.youtube.com") .header(header::COOKIE, self.client.inner.consent_cookie.to_owned()) .header("X-YouTube-Client-Name", "67") .header( @@ -1024,8 +1027,8 @@ impl RustyPipeQuery { .post(format!( "{YOUTUBEI_V1_URL}{endpoint}?key={DESKTOP_API_KEY}{DISABLE_PRETTY_PRINT_PARAMETER}" )) - .header(header::ORIGIN, YOUTUBE_HOME_URL) - .header(header::REFERER, YOUTUBE_HOME_URL) + .header(header::ORIGIN, "https://www.youtube.com") + .header(header::REFERER, "https://www.youtube.com") .header("X-YouTube-Client-Name", "1") .header("X-YouTube-Client-Version", TVHTML5_CLIENT_VERSION), ClientType::Android => self @@ -1061,11 +1064,11 @@ impl RustyPipeQuery { } } - /// Get a YouTube visitor data cookie, which is necessary for certain requests - async fn get_visitor_data(&self) -> Result { + /// Get a YouTube Music visitor data cookie, which is necessary for certain requests + async fn get_ytm_visitor_data(&self) -> Result { match &self.opts.visitor_data { Some(vd) => Ok(vd.to_owned()), - None => self.client.get_visitor_data().await, + None => self.client.get_ytm_visitor_data().await, } } @@ -1305,9 +1308,9 @@ mod tests { } #[test] - fn t_get_visitor_data() { + fn t_get_ytm_visitor_data() { let rp = RustyPipe::new(); - let visitor_data = tokio_test::block_on(rp.get_visitor_data()).unwrap(); + let visitor_data = tokio_test::block_on(rp.get_ytm_visitor_data()).unwrap(); assert!(visitor_data.ends_with("%3D")); assert_eq!(visitor_data.len(), 32) } diff --git a/src/client/music_artist.rs b/src/client/music_artist.rs index 8724dd0..2c8ae8a 100644 --- a/src/client/music_artist.rs +++ b/src/client/music_artist.rs @@ -27,7 +27,7 @@ impl RustyPipeQuery { ) -> Result { let artist_id = artist_id.as_ref(); let visitor_data = match all_albums { - true => Some(self.get_visitor_data().await?), + true => Some(self.get_ytm_visitor_data().await?), false => None, }; diff --git a/src/client/music_details.rs b/src/client/music_details.rs index 342675c..0d35eae 100644 --- a/src/client/music_details.rs +++ b/src/client/music_details.rs @@ -109,7 +109,7 @@ impl RustyPipeQuery { radio_id: S, ) -> Result, Error> { let radio_id = radio_id.as_ref(); - let visitor_data = self.get_visitor_data().await?; + let visitor_data = self.get_ytm_visitor_data().await?; let context = self .get_context(ClientType::DesktopMusic, true, Some(&visitor_data)) .await; diff --git a/src/client/pagination.rs b/src/client/pagination.rs index 6874a21..bfb07cd 100644 --- a/src/client/pagination.rs +++ b/src/client/pagination.rs @@ -102,12 +102,8 @@ impl MapResponse> for response::Continuation { .and_then(|actions| { actions .into_iter() + .next() .map(|action| action.append_continuation_items_action.continuation_items) - .reduce(|mut acc, mut items| { - acc.c.append(&mut items.c); - acc.warnings.append(&mut items.warnings); - acc - }) }) .or_else(|| { self.continuation_contents diff --git a/src/client/player.rs b/src/client/player.rs index d84adfb..367821b 100644 --- a/src/client/player.rs +++ b/src/client/player.rs @@ -12,8 +12,8 @@ use crate::{ deobfuscate::Deobfuscator, error::{internal::DeobfError, Error, ExtractionError, UnavailabilityReason}, model::{ - traits::QualityOrd, AudioCodec, AudioFormat, AudioStream, AudioTrack, ChannelId, Frameset, - Subtitle, VideoCodec, VideoFormat, VideoPlayer, VideoPlayerDetails, VideoStream, + traits::QualityOrd, AudioCodec, AudioFormat, AudioStream, AudioTrack, ChannelId, Subtitle, + VideoCodec, VideoFormat, VideoPlayer, VideoPlayerDetails, VideoStream, }, param::Language, util, @@ -313,54 +313,6 @@ impl MapResponse for response::Player { .collect() }); - let preview_frames = self - .storyboards - .and_then(|sb| { - let spec = sb.player_storyboard_spec_renderer.spec; - let mut spec_parts = spec.split('|'); - let url_tmpl = spec_parts.next()?; - - Some( - spec_parts - .enumerate() - .filter_map(|(i, fs_spec)| { - // Example: 160#90#131#5#5#2000#M$M#rs$AOn4CLCV3TJ2Nty5fbw2r-Lqg4VDOZcVvQ - let mut parts = fs_spec.split('#'); - - let frame_width = parts.next()?.parse().ok()?; - let frame_height = parts.next()?.parse().ok()?; - let total_count = parts.next()?.parse().ok()?; - let frames_per_page_x = parts.next()?.parse().ok()?; - let frames_per_page_y = parts.next()?.parse().ok()?; - let duration_per_frame = parts.next()?.parse().ok()?; - - let n = parts.next()?; - let sigh = parts.next()?; - - let url = url_tmpl.replace("$L", &i.to_string()).replace("$N", n) - + "&sigh=" - + sigh; - - let sprite_count = ((total_count as f64) - / (frames_per_page_x * frames_per_page_y) as f64) - .ceil() as u32; - - Some(Frameset { - url_template: url, - frame_width, - frame_height, - page_count: sprite_count, - total_count, - duration_per_frame, - frames_per_page_x, - frames_per_page_y, - }) - }) - .collect(), - ) - }) - .unwrap_or_default(); - Ok(MapResult { c: VideoPlayer { details: video_info, @@ -371,7 +323,6 @@ impl MapResponse for response::Player { expires_in_seconds: streaming_data.expires_in_seconds, hls_manifest_url: streaming_data.hls_manifest_url, dash_manifest_url: streaming_data.dash_manifest_url, - preview_frames, visitor_data: self.response_context.visitor_data, }, warnings, @@ -426,18 +377,12 @@ fn deobf_nsig( Ok(()) } -struct UrlMapRes { - url: String, - throttled: bool, - xtags: Option, -} - fn map_url( url: &Option, signature_cipher: &Option, deobf: &Deobfuscator, last_nsig: &mut [String; 2], -) -> MapResult> { +) -> MapResult> { let x = match url { Some(url) => util::url_to_params(url).map_err(|_| format!("Could not parse url `{url}`")), None => match signature_cipher { @@ -469,11 +414,7 @@ fn map_url( match Url::parse_with_params(url_base.as_str(), url_params.iter()) { Ok(url) => MapResult { - c: Some(UrlMapRes { - url: url.to_string(), - throttled, - xtags: url_params.get("xtags").cloned(), - }), + c: Some((url.to_string(), throttled)), warnings, }, Err(_) => MapResult { @@ -514,9 +455,9 @@ fn map_video_stream( let map_res = map_url(&f.url, &f.signature_cipher, deobf, last_nsig); match map_res.c { - Some(url) => MapResult { + Some((url, throttled)) => MapResult { c: Some(VideoStream { - url: url.url, + url, itag: f.itag, bitrate: f.bitrate, average_bitrate: f.average_bitrate.unwrap_or(f.bitrate), @@ -535,7 +476,7 @@ fn map_video_stream( mime: f.mime_type.to_owned(), format, codec: get_video_codec(codecs), - throttled: url.throttled, + throttled, }), warnings: map_res.warnings, }, @@ -551,6 +492,8 @@ fn map_audio_stream( deobf: &Deobfuscator, last_nsig: &mut [String; 2], ) -> MapResult> { + static LANG_PATTERN: Lazy = Lazy::new(|| Regex::new(r#"^([a-z]{2,3})\."#).unwrap()); + let (mtype, codecs) = match parse_mime(&f.mime_type) { Some(x) => x, None => { @@ -573,12 +516,11 @@ fn map_audio_stream( } }; let map_res = map_url(&f.url, &f.signature_cipher, deobf, last_nsig); - let mut warnings = map_res.warnings; match map_res.c { - Some(url) => MapResult { + Some((url, throttled)) => MapResult { c: Some(AudioStream { - url: url.url, + url, itag: f.itag, bitrate: f.bitrate, average_bitrate: f.average_bitrate.unwrap_or(f.bitrate), @@ -591,14 +533,29 @@ fn map_audio_stream( codec: get_audio_codec(codecs), channels: f.audio_channels, loudness_db: f.loudness_db, - throttled: url.throttled, - track: f - .audio_track - .map(|t| map_audio_track(t, url.xtags, &mut warnings)), + throttled, + track: match f.audio_track { + Some(t) => { + let lang = LANG_PATTERN + .captures(&t.id) + .map(|m| m.get(1).unwrap().as_str().to_owned()); + + Some(AudioTrack { + id: t.id, + lang, + lang_name: t.display_name, + is_default: t.audio_is_default, + }) + } + None => None, + }, }), - warnings, + warnings: map_res.warnings, + }, + None => MapResult { + c: None, + warnings: map_res.warnings, }, - None => MapResult { c: None, warnings }, } } @@ -661,43 +618,6 @@ fn get_audio_codec(codecs: Vec<&str>) -> AudioCodec { AudioCodec::Unknown } -fn map_audio_track( - track: response::player::AudioTrack, - xtags: Option, - warnings: &mut Vec, -) -> AudioTrack { - let mut lang = None; - let mut track_type = None; - - if let Some(xtags) = xtags { - xtags - .split(':') - .filter_map(|param| param.split_once('=')) - .for_each(|(k, v)| match k { - "lang" => { - lang = Some(v.to_owned()); - } - "acont" => match serde_plain::from_str(v) { - Ok(v) => { - track_type = Some(v); - } - Err(_) => { - warnings.push(format!("could not parse audio track type `{v}`")); - } - }, - _ => {} - }) - } - - AudioTrack { - id: track.id, - lang, - lang_name: track.display_name, - is_default: track.audio_is_default, - track_type, - } -} - #[cfg(test)] mod tests { use std::{fs::File, io::BufReader}; @@ -762,10 +682,10 @@ mod tests { &deobf, &mut last_nsig, ); - let url = map_res.c.unwrap(); + let (url, throttled) = map_res.c.unwrap(); - assert_eq!(url.url, "https://rr5---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=3781277&dur=229.301&ei=vb7nYvH5BMK8gAfBj7ToBQ&expire=1659376413&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-AB_BABwrXZJN428ZwDxq5ScPn2AbcGODnRlTVhCQ3mj2&initcwndbps=1588750&ip=2003%3Ade%3Aaf06%3A6300%3Ac750%3A1b77%3Ac74a%3A80e3&itag=251&keepalive=yes&lmt=1655510291473933&lsig=AG3C_xAwRQIgCKCGJ1iu4wlaGXy3jcJyU3inh9dr1FIfqYOZEG_MdmACIQCbungkQYFk7EhD6K2YvLaHFMjKOFWjw001_tLb0lPDtg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=hH&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5ednsl&ms=au%2Conr&mt=1659354538&mv=m&mvi=5&n=XzXGSfGusw6OCQ&ns=b_Mq_qlTFcSGlG9RpwpM9xQH&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPIsKd7-xi4xVHEC9gb__dU4hzfzsHEj9ytd3nt0gEceAiACJWBcw-wFEq9qir35bwKHJZxtQ9mOL7SKiVkLQNDa6A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khi831z8dTejFIRCvCEwx_6romtM&txp=4532434&vprv=1"); - assert!(!url.throttled); + assert_eq!(url, "https://rr5---sn-h0jelnez.googlevideo.com/videoplayback?c=WEB&clen=3781277&dur=229.301&ei=vb7nYvH5BMK8gAfBj7ToBQ&expire=1659376413&fexp=24001373%2C24007246&fvip=5&gir=yes&id=o-AB_BABwrXZJN428ZwDxq5ScPn2AbcGODnRlTVhCQ3mj2&initcwndbps=1588750&ip=2003%3Ade%3Aaf06%3A6300%3Ac750%3A1b77%3Ac74a%3A80e3&itag=251&keepalive=yes&lmt=1655510291473933&lsig=AG3C_xAwRQIgCKCGJ1iu4wlaGXy3jcJyU3inh9dr1FIfqYOZEG_MdmACIQCbungkQYFk7EhD6K2YvLaHFMjKOFWjw001_tLb0lPDtg%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=hH&mime=audio%2Fwebm&mm=31%2C26&mn=sn-h0jelnez%2Csn-4g5ednsl&ms=au%2Conr&mt=1659354538&mv=m&mvi=5&n=XzXGSfGusw6OCQ&ns=b_Mq_qlTFcSGlG9RpwpM9xQH&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPIsKd7-xi4xVHEC9gb__dU4hzfzsHEj9ytd3nt0gEceAiACJWBcw-wFEq9qir35bwKHJZxtQ9mOL7SKiVkLQNDa6A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khi831z8dTejFIRCvCEwx_6romtM&txp=4532434&vprv=1"); + assert!(!throttled); assert!( map_res.warnings.is_empty(), "deserialization/mapping warnings: {:?}", diff --git a/src/client/response/mod.rs b/src/client/response/mod.rs index a682f95..b321dcc 100644 --- a/src/client/response/mod.rs +++ b/src/client/response/mod.rs @@ -219,7 +219,6 @@ pub(crate) struct Continuation { #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct ContinuationActionWrap { - #[serde(alias = "reloadContinuationItemsCommand")] pub append_continuation_items_action: ContinuationAction, } diff --git a/src/client/response/player.rs b/src/client/response/player.rs index 0de004d..a801a3a 100644 --- a/src/client/response/player.rs +++ b/src/client/response/player.rs @@ -7,7 +7,6 @@ use serde_with::{json::JsonString, DefaultOnError}; use super::{ResponseContext, Thumbnails}; use crate::serializer::{text::Text, MapResult}; -#[serde_as] #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub(crate) struct Player { @@ -15,9 +14,6 @@ pub(crate) struct Player { pub streaming_data: Option, pub captions: Option, pub video_details: Option, - #[serde(default)] - #[serde_as(deserialize_as = "DefaultOnError")] - pub storyboards: Option, pub response_context: ResponseContext, } @@ -250,15 +246,3 @@ pub(crate) struct VideoDetails { pub author: String, pub is_live_content: bool, } - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct Storyboards { - pub player_storyboard_spec_renderer: StoryboardRenderer, -} - -#[derive(Debug, Deserialize)] -#[serde(rename_all = "camelCase")] -pub(crate) struct StoryboardRenderer { - pub spec: String, -} diff --git a/src/client/response/video_item.rs b/src/client/response/video_item.rs index dba27be..b812f2d 100644 --- a/src/client/response/video_item.rs +++ b/src/client/response/video_item.rs @@ -1,3 +1,5 @@ +use once_cell::sync::Lazy; +use regex::Regex; use serde::Deserialize; use serde_with::{ json::JsonString, rust::deserialize_ignore_any, serde_as, DefaultOnError, VecSkipError, @@ -428,17 +430,11 @@ impl YouTubeListMapper { } fn map_video(&mut self, video: VideoRenderer) -> VideoItem { - let is_live = video.thumbnail_overlays.is_live() || video.badges.is_live(); - let is_short = video.thumbnail_overlays.is_short(); - + let mut tn_overlays = video.thumbnail_overlays; let length_text = video.length_text.or_else(|| { - video - .thumbnail_overlays - .into_iter() - .find(|ol| { - ol.thumbnail_overlay_time_status_renderer.style == TimeOverlayStyle::Default - }) - .map(|ol| ol.thumbnail_overlay_time_status_renderer.text) + tn_overlays + .try_swap_remove(0) + .map(|overlay| overlay.thumbnail_overlay_time_status_renderer.text) }); VideoItem { @@ -476,8 +472,8 @@ impl YouTubeListMapper { view_count: video .view_count_text .map(|txt| util::parse_numeric(&txt).unwrap_or_default()), - is_live, - is_short, + is_live: tn_overlays.is_live() || video.badges.is_live(), + is_short: tn_overlays.is_short(), is_upcoming: video.upcoming_event_data.is_some(), short_description: video .detailed_metadata_snippets @@ -487,6 +483,9 @@ impl YouTubeListMapper { } fn map_short_video(&mut self, video: ReelItemRenderer, lang: Language) -> VideoItem { + static ACCESSIBILITY_SEP_REGEX: Lazy = + Lazy::new(|| Regex::new(" [-\u{2013}] ").unwrap()); + let pub_date_txt = video.navigation_endpoint.map(|n| { n.reel_watch_endpoint .overlay @@ -500,7 +499,7 @@ impl YouTubeListMapper { id: video.video_id, name: video.headline, length: video.accessibility.and_then(|acc| { - acc.rsplit(" - ").nth(1).and_then(|s| { + ACCESSIBILITY_SEP_REGEX.split(&acc).nth(1).and_then(|s| { timeago::parse_video_duration_or_warn(self.lang, s, &mut self.warnings) }) }), diff --git a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_live.snap b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_live.snap index 834d87c..835d9ff 100644 --- a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_live.snap +++ b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_live.snap @@ -168,7 +168,7 @@ Channel( publish_date: "[date]", publish_date_txt: None, view_count: Some(94), - is_live: true, + is_live: false, is_short: false, is_upcoming: false, short_description: None, @@ -209,7 +209,7 @@ Channel( publish_date: "[date]", publish_date_txt: None, view_count: Some(381), - is_live: true, + is_live: false, is_short: false, is_upcoming: false, short_description: None, @@ -414,7 +414,7 @@ Channel( publish_date: "[date]", publish_date_txt: None, view_count: Some(2043), - is_live: true, + is_live: false, is_short: false, is_upcoming: false, short_description: None, @@ -783,7 +783,7 @@ Channel( publish_date: "[date]", publish_date_txt: None, view_count: Some(4030), - is_live: true, + is_live: false, is_short: false, is_upcoming: false, short_description: None, diff --git a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_shorts.snap b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_shorts.snap index 0f8a1cb..9912aec 100644 --- a/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_shorts.snap +++ b/src/client/snapshots/rustypipe__client__channel__tests__map_channel_videos_shorts.snap @@ -141,7 +141,7 @@ Channel( publish_date_txt: Some("1 day ago"), view_count: Some(443549), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -167,7 +167,7 @@ Channel( publish_date_txt: Some("2 days ago"), view_count: Some(1154962), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -234,7 +234,7 @@ Channel( publish_date_txt: Some("6 days ago"), view_count: Some(1388173), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -260,7 +260,7 @@ Channel( publish_date_txt: Some("7 days ago"), view_count: Some(1738301), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -286,7 +286,7 @@ Channel( publish_date_txt: Some("9 days ago"), view_count: Some(1316594), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -353,7 +353,7 @@ Channel( publish_date_txt: Some("11 days ago"), view_count: Some(1412213), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -379,7 +379,7 @@ Channel( publish_date_txt: Some("13 days ago"), view_count: Some(1513305), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -405,7 +405,7 @@ Channel( publish_date_txt: Some("2 weeks ago"), view_count: Some(8936223), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -472,7 +472,7 @@ Channel( publish_date_txt: Some("2 weeks ago"), view_count: Some(2769717), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -539,7 +539,7 @@ Channel( publish_date_txt: Some("3 weeks ago"), view_count: Some(572107), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -565,7 +565,7 @@ Channel( publish_date_txt: Some("3 weeks ago"), view_count: Some(1707132), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -591,7 +591,7 @@ Channel( publish_date_txt: Some("3 weeks ago"), view_count: Some(933094), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -617,7 +617,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(5985184), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -643,7 +643,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(14741387), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -669,7 +669,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(2511322), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -695,7 +695,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(2364408), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -762,7 +762,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(1947627), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -788,7 +788,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(4763839), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -814,7 +814,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(1915695), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -840,7 +840,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(7268944), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -866,7 +866,7 @@ Channel( publish_date_txt: Some("1 month ago"), view_count: Some(2539103), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -892,7 +892,7 @@ Channel( publish_date_txt: Some("2 months ago"), view_count: Some(5545680), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -918,7 +918,7 @@ Channel( publish_date_txt: Some("2 months ago"), view_count: Some(2202314), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), @@ -985,7 +985,7 @@ Channel( publish_date_txt: Some("2 months ago"), view_count: Some(6443699), is_live: false, - is_short: true, + is_short: false, is_upcoming: false, short_description: None, ), diff --git a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_android.snap b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_android.snap index 696c919..98168f1 100644 --- a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_android.snap +++ b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_android.snap @@ -450,37 +450,5 @@ VideoPlayer( expires_in_seconds: 21540, hls_manifest_url: None, dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659481355/ei/q1jpYtOPEYSBgQeHmqbwAQ/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr5---sn-h0jeenek.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jeenek%2Csn-h0jelnez/ms/au%2Crdu/mv/m/mvi/5/pl/37/hfr/1/as/fmp4_audio_clear%2Cfmp4_sd_hd_clear/initcwndbps/1527500/vprv/1/mt/1659459429/fvip/4/itag_bl/376%2C377%2C384%2C385%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cvprv%2Citag/sig/AOq0QJ8wRAIgMm4a_MIHA3YUszKeruSy3exs5JwNjJAyLAwxL0yPdNMCIANb9GDMSTp_NT-PPhbvYMwRULJ5a9BO6MYD9FuWprC1/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgETSOwhwWVMy7gmrFXZlJu655ToLzSwOEsT16oRyrWhACIQDkvOEw1fImz5omu4iVIRNFe-z-JC9v8WUyx281dW2NOw%3D%3D"), - preview_frames: [ - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow", - frame_width: 48, - frame_height: 27, - page_count: 1, - total_count: 100, - duration_per_frame: 0, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L1/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCWd3ylPF7ViQFBu5RUODMcusr_5g", - frame_width: 80, - frame_height: 45, - page_count: 1, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L2/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLA6xat5cfw0e3EX_5SW-TPwkmExxA", - frame_width: 160, - frame_height: 90, - page_count: 4, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 5, - frames_per_page_y: 5, - ), - ], visitor_data: Some("Cgt2aHFtQU5YZFBvYyirsaWXBg%3D%3D"), ) diff --git a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktop.snap b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktop.snap index 8de2d4a..56b35be 100644 --- a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktop.snap +++ b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktop.snap @@ -569,37 +569,5 @@ VideoPlayer( expires_in_seconds: 21540, hls_manifest_url: None, dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659481355/ei/q1jpYtq3BJCX1gKVyJGQDg/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr4---sn-h0jelnez.googlevideo.com/mh/mQ/mm/31%2C26/mn/sn-h0jelnez%2Csn-4g5edn6k/ms/au%2Conr/mv/m/mvi/4/pl/37/hfr/all/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/initcwndbps/1513750/spc/lT-KhrZGE2opztWyVdAtyUNlb8dXPDs/vprv/1/mt/1659459429/fvip/4/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cspc%2Cvprv%2Citag/sig/AOq0QJ8wRgIhAPEjHK19PKVHqQeia6WF4qubuMYk74LGi8F8lk5ZMPkFAiEAsaB2pKQWBvuPnNUnbdQXHc-izgsHJUP793woC2xNJlg%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgOY4xu4H9wqPVZ7vF2i0hFcOnqrur1XGoA43a7ZEuuSUCIQCyPxBKXUQrKFmknNEGpX5GSWySKgMw_xHBikWpKpKwvg%3D%3D"), - preview_frames: [ - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow", - frame_width: 48, - frame_height: 27, - page_count: 1, - total_count: 100, - duration_per_frame: 0, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L1/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCWd3ylPF7ViQFBu5RUODMcusr_5g", - frame_width: 80, - frame_height: 45, - page_count: 1, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L2/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLA6xat5cfw0e3EX_5SW-TPwkmExxA", - frame_width: 160, - frame_height: 90, - page_count: 4, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 5, - frames_per_page_y: 5, - ), - ], visitor_data: Some("CgtoS1pCMVJTNUJISSirsaWXBg%3D%3D"), ) diff --git a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktopmusic.snap b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktopmusic.snap index 19b2530..36f191a 100644 --- a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktopmusic.snap +++ b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_desktopmusic.snap @@ -387,37 +387,5 @@ VideoPlayer( expires_in_seconds: 21540, hls_manifest_url: None, dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659487474/ei/knDpYub6BojEgAf6jbLgDw/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr5---sn-h0jeenek.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jeenek%2Csn-h0jelnez/ms/au%2Crdu/mv/m/mvi/5/pl/37/hfr/all/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/initcwndbps/1418750/spc/lT-Khox4YuJQ2wmH79zYALRvsWTPCUc/vprv/1/mt/1659465669/fvip/4/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cspc%2Cvprv%2Citag/sig/AOq0QJ8wRAIgErABhAEaoKHUDu9dDbpxE_8gR4b8WWAi61fnu8UKnuICIEYrEKcHvqHdO4V3R7cvSGwi_HGH34IlQsKbziOfMBov/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgJxHmH0Sxo3cY_pW_ZzQ3hW9-7oz6K_pZWcUdrDDQ2sQCIQDJYNINQwLgKelgbO3CZYx7sMxdUAFpWdokmRBQ77vwvw%3D%3D"), - preview_frames: [ - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLAXobPyrylgm8IEvjlZzqYTiPe1Ow", - frame_width: 48, - frame_height: 27, - page_count: 1, - total_count: 100, - duration_per_frame: 0, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L1/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCWd3ylPF7ViQFBu5RUODMcusr_5g", - frame_width: 80, - frame_height: 45, - page_count: 1, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L2/M$M.jpg?sqp=-oaymwENSDfyq4qpAwVwAcABBqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLA6xat5cfw0e3EX_5SW-TPwkmExxA", - frame_width: 160, - frame_height: 90, - page_count: 4, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 5, - frames_per_page_y: 5, - ), - ], visitor_data: Some("CgszSHZWNWs0SDhpTSiS4aWXBg%3D%3D"), ) diff --git a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_ios.snap b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_ios.snap index c5b2870..771f676 100644 --- a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_ios.snap +++ b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_ios.snap @@ -168,37 +168,5 @@ VideoPlayer( expires_in_seconds: 21540, hls_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/hls_variant/expire/1659481355/ei/q1jpYq-xHs7NgQev0bfwAQ/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr4---sn-h0jelnez.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jelnez%2Csn-h0jeenek/ms/au%2Crdu/mv/m/mvi/4/pl/37/hfr/1/demuxed/1/tts_caps/1/maudio/1/initcwndbps/1513750/vprv/1/go/1/mt/1659459429/fvip/5/nvgoi/1/short_key/1/ncsapi/1/keepalive/yes/fexp/24001373%2C24007246/dover/13/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cdemuxed%2Ctts_caps%2Cmaudio%2Cvprv%2Cgo%2Citag%2Cplaylist_type/sig/AOq0QJ8wRQIhAIYnEHvIgJtJ8hehAXNtVY3qsgsq_GdOhWf2hkJZe6lCAiBxaRY_nubYp6hBizcAg_KFkKnkG-t2XYLRQ5wGdM3AjA%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRgIhAM_91Kk_0VLuSsR6nLCY7LdtWojyRAzXSScd_X9ShRROAiEA1AF4VY04F71NsAI8_j3iqjuXnWL9s6NoXHq7P8-bHx8%3D/file/index.m3u8"), dash_manifest_url: None, - preview_frames: [ - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCsCT8Lprh2S0ptmCRsWH7VtDl3YQ", - frame_width: 48, - frame_height: 27, - page_count: 1, - total_count: 100, - duration_per_frame: 0, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L1/M$M.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLBXrdgfuYV1WLnTGXqZtSAUm8oZCA", - frame_width: 80, - frame_height: 45, - page_count: 1, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L2/M$M.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCRazj84zMuwJLaCCc_PiUakX_YdQ", - frame_width: 160, - frame_height: 90, - page_count: 4, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 5, - frames_per_page_y: 5, - ), - ], visitor_data: Some("Cgs4TXV4dk13WVEyWSirsaWXBg%3D%3D"), ) diff --git a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_tvhtml5embed.snap b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_tvhtml5embed.snap index ab41d4a..5b7fad7 100644 --- a/src/client/snapshots/rustypipe__client__player__tests__map_player_data_tvhtml5embed.snap +++ b/src/client/snapshots/rustypipe__client__player__tests__map_player_data_tvhtml5embed.snap @@ -569,37 +569,5 @@ VideoPlayer( expires_in_seconds: 21540, hls_manifest_url: None, dash_manifest_url: Some("https://manifest.googlevideo.com/api/manifest/dash/expire/1659481355/ei/q1jpYv-eJ9uF6dsPhvyH8As/ip/2003%3Ade%3Aaf0e%3A2f00%3Ade47%3A297%3Aa6db%3A774e/id/a4fbddf14c6649b4/source/youtube/requiressl/yes/playback_host/rr4---sn-h0jelnez.googlevideo.com/mh/mQ/mm/31%2C29/mn/sn-h0jelnez%2Csn-h0jeenek/ms/au%2Crdu/mv/m/mvi/4/pl/37/hfr/all/as/fmp4_audio_clear%2Cfmp4_sd_hd_clear/initcwndbps/1527500/vprv/1/mt/1659459429/fvip/5/keepalive/yes/fexp/24001373%2C24007246/itag/0/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Chfr%2Cas%2Cvprv%2Citag/sig/AOq0QJ8wRQIhANKWS7GCN4pSoHIQ6BMZdOaHAD0I25nHwRj7ds4qrxdEAiBsd9l8WIceqF7-2xyR82DGecCiS9hgUIPJhdNhkwVpHg%3D%3D/lsparams/playback_host%2Cmh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps/lsig/AG3C_xAwRQIgMbu-wTOcXGCwGh27y0YZHktumKM1sopgxfQf8LCcCnECIQDnhFbgddOxwiQbnMOIcCn6ncpN54UyALRNigUSCp9Deg%3D%3D"), - preview_frames: [ - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L0/default.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCsCT8Lprh2S0ptmCRsWH7VtDl3YQ", - frame_width: 48, - frame_height: 27, - page_count: 1, - total_count: 100, - duration_per_frame: 0, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L1/M$M.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLBXrdgfuYV1WLnTGXqZtSAUm8oZCA", - frame_width: 80, - frame_height: 45, - page_count: 1, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 10, - frames_per_page_y: 10, - ), - Frameset( - url_template: "https://i.ytimg.com/sb/pPvd8UxmSbQ/storyboard3_L2/M$M.jpg?sqp=-oaymwGbA0g48quKqQOSA4gBAZUBAAAEQpgBMqABPKgBBLABELABDbABDLABELABFbABH7ABJrABLbABDrABDrABD7ABErABF7ABK7ABLLABKbABD7ABDrABELABFbABH7ABKrABMrABKbABD7ABEbABFLABGLABJrABPbABOLABLbABEbABFLABHrABKrABMbABS7ABR7ABNrABFbABHLABKbABLrABObABR7ABTbABP7ABJbABLrABN7ABPbABR7ABUrABUbABRbABM7ABQLABQrABQ7ABTLABRLABRrABQ7gBEbgBEbgBFbgBI7gBRLgBQ7gBQ7gBQ7gBEbgBE7gBFrgBL7gBQ7gBQ7gBQ7gBQ7gBFbgBFrgBKbgBQ7gBQ7gBQ7gBQ7gBQ7gBI7gBL7gBQ7gBQ7gBQ7gBQ7gBQ7gBQ7gBRLgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQ7gBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQ7gBQ7gBQ7gBQrgBQrgBQrgBQrgBQqLzl_8DBgjf8LPxBQ==&sigh=rs$AOn4CLCRazj84zMuwJLaCCc_PiUakX_YdQ", - frame_width: 160, - frame_height: 90, - page_count: 4, - total_count: 83, - duration_per_frame: 2000, - frames_per_page_x: 5, - frames_per_page_y: 5, - ), - ], visitor_data: Some("CgtacUJOMG81dTI3cyirsaWXBg%3D%3D"), ) diff --git a/src/error.rs b/src/error.rs index 5e10d31..a5b4cc2 100644 --- a/src/error.rs +++ b/src/error.rs @@ -171,12 +171,6 @@ impl From for Error { } } -impl From for Error { - fn from(value: serde_plain::Error) -> Self { - Self::Other(value.to_string().into()) - } -} - impl ExtractionError { pub(crate) fn should_report(&self) -> bool { matches!( diff --git a/src/model/frameset.rs b/src/model/frameset.rs deleted file mode 100644 index cde1278..0000000 --- a/src/model/frameset.rs +++ /dev/null @@ -1,61 +0,0 @@ -use serde::{Deserialize, Serialize}; - -/// Set of video frames for seek preview -/// -/// YouTube generates a set of images containing a grid of frames for each video. -/// These images are used by the player for the seekbar preview. -#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)] -#[non_exhaustive] -pub struct Frameset { - /// Url template of the frameset - /// - /// The `$M` placeholder has to be replaced with the page index (starting from 0). - pub url_template: String, - /// Width of a single frame in pixels - pub frame_width: u32, - /// Height of a single frame in pixels - pub frame_height: u32, - /// Number of pages (individual images) - pub page_count: u32, - /// Total number of frames in the set - pub total_count: u32, - /// Duration per frame in milliseconds - pub duration_per_frame: u32, - /// Number of frames in the x direction - pub frames_per_page_x: u32, - /// Number of frames in the y direction. - pub frames_per_page_y: u32, -} - -/// Iterator producing frameset page urls -pub struct FramesetUrls<'a> { - frameset: &'a Frameset, - i: u32, -} - -impl Frameset { - /// Gets an iterator over the page URLs of the frameset - pub fn urls(&self) -> FramesetUrls { - FramesetUrls { - frameset: self, - i: 0, - } - } -} - -impl Iterator for FramesetUrls<'_> { - type Item = String; - - fn next(&mut self) -> Option { - if self.i < self.frameset.page_count { - let url = self - .frameset - .url_template - .replace("$M", &self.i.to_string()); - self.i += 1; - Some(url) - } else { - None - } - } -} diff --git a/src/model/mod.rs b/src/model/mod.rs index 0250aaa..9d60374 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -1,23 +1,24 @@ //! YouTube API response models mod convert; -mod frameset; mod ordering; pub mod paginator; pub mod richtext; + pub mod traits; -pub use frameset::{Frameset, FramesetUrls}; + +use serde_with::serde_as; use std::{collections::BTreeSet, ops::Range}; use serde::{Deserialize, Serialize}; -use serde_with::serde_as; use time::{Date, OffsetDateTime}; -use self::{paginator::Paginator, richtext::RichText}; use crate::{error::Error, param::Country, serializer::DateYmd, util}; +use self::{paginator::Paginator, richtext::RichText}; + /* #COMMON */ @@ -154,8 +155,6 @@ pub struct VideoPlayer { pub hls_manifest_url: Option, /// Dash manifest URL (for livestreams) pub dash_manifest_url: Option, - /// Video frames for seek preview - pub preview_frames: Vec, /// YouTube visitor data cookie pub visitor_data: Option, } @@ -343,14 +342,14 @@ pub enum VideoFormat { pub struct AudioTrack { /// Track ID (e.g. `en.0`) pub id: String, - /// Language code (e.g. `en-US`, `de`) + /// 2/3 letter language code (e.g. `en`) + /// + /// Extracted from the track ID pub lang: Option, /// Language name (e.g. "English") pub lang_name: String, /// True if this is the default audio track pub is_default: bool, - /// Audio track type (e.g. *Original*, *Dubbed*) - pub track_type: Option, } /// Audio file type @@ -364,25 +363,6 @@ pub enum AudioFormat { Webm, } -/// Audio track type -#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] -#[serde(rename_all = "snake_case")] -#[non_exhaustive] -pub enum AudioTrackType { - /// An original audio track of the video - Original, - /// An audio track with the original voices replaced, typically in a different language - Dubbed, - /// A descriptive audio track - /// - /// A descriptive audio track is an audio track in which descriptions of visual elements of - /// a video are added to the original audio, with the goal to make a video more accessible to - /// blind and visually impaired people. - /// - /// See - Descriptive, -} - /// YouTube provides subtitles in different formats. /// /// srv1 (XML) is the default format, to request a different format you have @@ -870,7 +850,7 @@ pub struct VideoItem { pub publish_date: Option, /// Textual video publish date (e.g. `11 months ago`, depends on language) /// - /// Is [`None`] for livestreams and upcoming videos. + /// Is [`None`] for livestreams. pub publish_date_txt: Option, /// View count /// diff --git a/src/model/paginator.rs b/src/model/paginator.rs index 2139ade..6ca5790 100644 --- a/src/model/paginator.rs +++ b/src/model/paginator.rs @@ -34,7 +34,7 @@ pub struct Paginator { #[serde(skip_serializing_if = "Option::is_none")] pub visitor_data: Option, /// YouTube API endpoint to fetch continuations from - pub endpoint: ContinuationEndpoint, + pub(crate) endpoint: ContinuationEndpoint, } impl Default for Paginator { diff --git a/src/param/locale.rs b/src/param/locale.rs index a9f1be2..14cb41f 100644 --- a/src/param/locale.rs +++ b/src/param/locale.rs @@ -2,12 +2,10 @@ //! Languages and countries -use std::str::FromStr; +use std::{fmt::Display, str::FromStr}; use serde::{Deserialize, Serialize}; -use crate::error::Error; - /// Available languages #[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)] #[serde(rename_all = "lowercase")] @@ -15,31 +13,31 @@ use crate::error::Error; pub enum Language { /// Afrikaans Af, - /// Amharic / አማርኛ + /// አማርኛ Am, - /// Arabic / العربية + /// العربية Ar, - /// Assamese / অসমীয়া + /// অসমীয়া As, - /// Azerbaijani / Azərbaycan + /// Azərbaycan Az, - /// Belarusian / Беларуская + /// Беларуская Be, - /// Bulgarian / Български + /// Български Bg, - /// Bangla / বাংলা + /// বাংলা Bn, - /// Bosnian / Bosanski + /// Bosanski Bs, - /// Catalan / Català + /// Català Ca, - /// Czech / Čeština + /// Čeština Cs, - /// Danish / Dansk + /// Dansk Da, - /// German / Deutsch + /// Deutsch De, - /// Greek / Ελληνικά + /// Ελληνικά El, /// English (US) En, @@ -49,145 +47,145 @@ pub enum Language { /// English (India) #[serde(rename = "en-IN")] EnIn, - /// Spanish / Español (España) + /// Español (España) Es, - /// Latin American Spanish / Español (Latinoamérica) + /// Español (Latinoamérica) #[serde(rename = "es-419")] Es419, - /// Spanish (United States) / Español (US) + /// Español (US) #[serde(rename = "es-US")] EsUs, - /// Estonian / Eesti + /// Eesti Et, - /// Basque / Euskara + /// Euskara Eu, - /// Persian / فارسی + /// فارسی Fa, - /// Finnish / Suomi + /// Suomi Fi, /// Filipino Fil, - /// French / Français + /// Français Fr, - /// Canadian French / Français (Canada) + /// Français (Canada) #[serde(rename = "fr-CA")] FrCa, - /// Galician / Galego + /// Galego Gl, - /// Gujarati / ગુજરાતી + /// ગુજરાતી Gu, - /// Hindi / हिन्दी + /// हिन्दी Hi, - /// Croatian / Hrvatski + /// Hrvatski Hr, - /// Hungarian / Magyar + /// Magyar Hu, - /// Armenian / Հայերեն + /// Հայերեն Hy, - /// Indonesian / Bahasa Indonesia + /// Bahasa Indonesia Id, - /// Icelandic / Íslenska + /// Íslenska Is, - /// Italian / Italiano + /// Italiano It, - /// Hebrew / עברית + /// עברית Iw, - /// Japanese / 日本語 + /// 日本語 Ja, - /// Georgian / ქართული + /// ქართული Ka, - /// Kazakh / Қазақ Тілі + /// Қазақ Тілі Kk, - /// Khmer / ខ្មែរ + /// ខ្មែរ Km, - /// Kannada / ಕನ್ನಡ + /// ಕನ್ನಡ Kn, - /// Korean / 한국어 + /// 한국어 Ko, - /// Kyrgyz / Кыргызча + /// Кыргызча Ky, - /// Lao / ລາວ + /// ລາວ Lo, - /// Lithuanian / Lietuvių + /// Lietuvių Lt, - /// Latvian / Latviešu valoda + /// Latviešu valoda Lv, - /// Macedonian / Македонски + /// Македонски Mk, - /// Malayalam / മലയാളം + /// മലയാളം Ml, - /// Mongolian / Монгол + /// Монгол Mn, - /// Marathi / मराठी + /// मराठी Mr, - /// Malay / Bahasa Malaysia + /// Bahasa Malaysia Ms, - /// Burmese / ဗမာ + /// ဗမာ My, - /// Nepali / नेपाली + /// नेपाली Ne, - /// Dutch / Nederlands + /// Nederlands Nl, - /// Norwegian / Norsk + /// Norsk No, - /// Odia / ଓଡ଼ିଆ + /// ଓଡ଼ିଆ Or, - /// Punjabi / ਪੰਜਾਬੀ + /// ਪੰਜਾਬੀ Pa, - /// Polish / Polski + /// Polski Pl, - /// Portuguese / Português (Brasil) + /// Português (Brasil) Pt, - /// European Portuguese / Português + /// Português #[serde(rename = "pt-PT")] PtPt, - /// Romanian / Română + /// Română Ro, - /// Russian / Русский + /// Русский Ru, - /// Sinhala / සිංහල + /// සිංහල Si, - /// Slovak / Slovenčina + /// Slovenčina Sk, - /// Slovenian / Slovenščina + /// Slovenščina Sl, - /// Albanian / Shqip + /// Shqip Sq, - /// Serbian / Српски + /// Српски Sr, - /// Serbian (Latin) / Srpski + /// Srpski #[serde(rename = "sr-Latn")] SrLatn, - /// Swedish / Svenska + /// Svenska Sv, - /// Swahili / Kiswahili + /// Kiswahili Sw, - /// Tamil / தமிழ் + /// தமிழ் Ta, - /// Telugu / తెలుగు + /// తెలుగు Te, - /// Thai / ภาษาไทย + /// ภาษาไทย Th, - /// Turkish / Türkçe + /// Türkçe Tr, - /// Ukrainian / Українська + /// Українська Uk, - /// Urdu / اردو + /// اردو Ur, - /// Uzbek / O‘zbek + /// O‘zbek Uz, - /// Vietnamese / Tiếng Việt + /// Tiếng Việt Vi, - /// Chinese (China) / 中文 (简体) + /// 中文 (简体) #[serde(rename = "zh-CN")] ZhCn, - /// Chinese (Hong Kong) / 中文 (香港) + /// 中文 (香港) #[serde(rename = "zh-HK")] ZhHk, - /// Chinese (Taiwan) / 中文 (繁體) + /// 中文 (繁體) #[serde(rename = "zh-TW")] ZhTw, - /// Zulu / IsiZulu + /// IsiZulu Zu, } @@ -831,26 +829,32 @@ impl Country { } } -impl FromStr for Language { - type Err = Error; - - fn from_str(s: &str) -> Result { - let mut sub = s; - loop { - if let Ok(v) = serde_plain::from_str(sub) { - return Ok(v); - } - match sub.rfind('-') { - Some(pos) => { - sub = &sub[..pos]; - } - None => return Err(Error::Other("could not parse language `{s}`".into())), - } - } +impl Display for Language { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str( + &serde_json::to_string(self).map_or("".to_owned(), |s| s[1..s.len() - 1].to_owned()), + ) } } -serde_plain::derive_display_from_serialize!(Language); +impl Display for Country { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str( + &serde_json::to_string(self).map_or("".to_owned(), |s| s[1..s.len() - 1].to_owned()), + ) + } +} -serde_plain::derive_fromstr_from_deserialize!(Country, Error); -serde_plain::derive_display_from_serialize!(Country); +impl FromStr for Language { + type Err = serde_json::Error; + fn from_str(s: &str) -> Result { + serde_json::from_str(&format!("\"{s}\"")) + } +} + +impl FromStr for Country { + type Err = serde_json::Error; + fn from_str(s: &str) -> Result { + serde_json::from_str(&format!("\"{s}\"")) + } +} diff --git a/src/param/mod.rs b/src/param/mod.rs index 804c7d8..a3f4708 100644 --- a/src/param/mod.rs +++ b/src/param/mod.rs @@ -7,34 +7,3 @@ pub mod search_filter; pub use locale::{Country, Language}; pub use stream_filter::StreamFilter; - -/// Channel video tab -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum ChannelVideoTab { - /// Regular videos - Videos, - /// Short videos - Shorts, - /// Livestreams - Live, -} - -/// Sort order for channel videos -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum ChannelOrder { - /// Order videos with the latest upload date first (default) - Latest = 1, - /// Order videos with the highest number of views first - Popular = 2, -} - -impl ChannelVideoTab { - /// Get the tab ID used to create ordered continuation tokens - pub(crate) const fn order_ctoken_id(&self) -> u32 { - match self { - ChannelVideoTab::Videos => 15, - ChannelVideoTab::Shorts => 10, - ChannelVideoTab::Live => 14, - } - } -} diff --git a/src/param/search_filter.rs b/src/param/search_filter.rs index 489ae63..84a8034 100644 --- a/src/param/search_filter.rs +++ b/src/param/search_filter.rs @@ -2,7 +2,7 @@ use std::collections::BTreeSet; -use crate::util::ProtoBuilder; +use crate::util::{self, ProtoBuilder}; /// YouTube search filter /// @@ -200,7 +200,8 @@ impl SearchFilter { pb.embedded(8, extras) } - pb.to_base64() + let b64 = util::b64_encode(pb.bytes); + urlencoding::encode(&b64).to_string() } } diff --git a/src/param/stream_filter.rs b/src/param/stream_filter.rs index f060b5b..dc178dd 100644 --- a/src/param/stream_filter.rs +++ b/src/param/stream_filter.rs @@ -352,13 +352,13 @@ mod tests { }); #[rstest] - #[case::default(StreamFilter::default(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104136&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683782301237288&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAPcUhhfkNVA_JcdU6KLTOFjRCnNl6n8gamJA-Q0PgCpIAiBTMV2k2JfHzbHBtsHxuNW7zHvSaYaUbz-dEIQC45o1eA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] - #[case::bitrate(StreamFilter::default().audio_max_bitrate(100000).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8217508&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683782195315620&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIga2iMQsToMxO7hTOx0gNAzhYoV1lL5PpE9lkAuBXt1nkCIQCuFuQXWNixIquEugtkT1C9khuKRP_C-wzSOiUmRp1DRg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] - #[case::m4a_format(StreamFilter::default().audio_formats(&[AudioFormat::M4a]).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390508&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683782363698612&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAMgM470I-QXq4lTRuPtXf5UInHB_tG0tTGXRhVZ6nwImAiEAn0JYRknq5dtTwcmzZheekxVOZKhZ2Rpxc_UyvX2CMRY%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] - #[case::m4a_codec(StreamFilter::default().audio_codecs(&[AudioCodec::Mp4a]).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390508&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683782363698612&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAMgM470I-QXq4lTRuPtXf5UInHB_tG0tTGXRhVZ6nwImAiEAn0JYRknq5dtTwcmzZheekxVOZKhZ2Rpxc_UyvX2CMRY%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] - #[case::french(StreamFilter::default().audio_language("fr").to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=940286&dur=60.101&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774002236584&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAIUUin7WZBnoVDb2p0wuTPc7HZwbF8I5sxzLrVN9WeBwAiBQTZwhxCQ1IdrUkkD1-cSGYBtMF1aKkjPZ-LWeie0aZA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dfr"))] - #[case::br_fallback(StreamFilter::default().audio_max_bitrate(0).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6306327&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683782187865292&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgW1DTCrLV_GyEM1rdjScgyceZE1llb73KJMFXmPm5Y04CIAYOLZuuzFX4ba5720kMOcQ1-Ld1DULs85nLxJglitCl&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] - #[case::lang_fallback(StreamFilter::default().audio_language("xx").to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104136&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683782301237288&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAPcUhhfkNVA_JcdU6KLTOFjRCnNl6n8gamJA-Q0PgCpIAiBTMV2k2JfHzbHBtsHxuNW7zHvSaYaUbz-dEIQC45o1eA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US"))] + #[case::default(StreamFilter::default(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104134&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767097097120&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgW4IxGJJFRAwZefvDdDkJfjhN7y3bPmh96BCFuyFn6pwCIQDW6pVnk_DwMC3FcZy5rXNUULMNWLdadScxwuhFTFR84g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] + #[case::bitrate(StreamFilter::default().audio_max_bitrate(100000).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8217507&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767073159859&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgM9loLjlUtgwrALqSek4vO8KljcCltFjLw1TGX0d9lZ4CICRiTJ8a_KgdafXVo2vKwgLPuH2B7t0hF-ln2k_MI3ds&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] + #[case::m4a_format(StreamFilter::default().audio_formats(&[AudioFormat::M4a]).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390628&dur=1012.691&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659766154827884&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgc8oxPEHDO0cgO3ZcbPmv3nrkzfy52WchpV0HcBcUw24CIEFxLKBcM4vVqGeRkt581dFL2tetvHd93SHCTVEUnIn_&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] + #[case::m4a_codec(StreamFilter::default().audio_codecs(&[AudioCodec::Mp4a]).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390628&dur=1012.691&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659766154827884&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgc8oxPEHDO0cgO3ZcbPmv3nrkzfy52WchpV0HcBcUw24CIEFxLKBcM4vVqGeRkt581dFL2tetvHd93SHCTVEUnIn_&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] + #[case::french(StreamFilter::default().audio_language("fr").to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16357630&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767033119964&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKtzVVyoS46hkuKX31EyUE6X6Q5wotcToOCnYKswX3x_AiB0G2SUdVoso39bYgewd3zT8Pf77DrVtahXh4kVb46T9g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dfr"))] + #[case::br_fallback(StreamFilter::default().audio_max_bitrate(0).to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6297404&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767062297621&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAPm10DeIvOt5Oc7e36cfhPC0ej2PslQqF3-CFVUl5TNfAiEAlgvwjlQK14e_-6j3W_hMvk9KHax8zd5shSVlYSR1P34%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] + #[case::lang_fallback(StreamFilter::default().audio_language("xx").to_owned(), Some("https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104134&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767097097120&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgW4IxGJJFRAwZefvDdDkJfjhN7y3bPmh96BCFuyFn6pwCIQDW6pVnk_DwMC3FcZy5rXNUULMNWLdadScxwuhFTFR84g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den"))] #[case::noformat(StreamFilter::default().audio_formats(&[]).to_owned(), None)] #[case::nocodec(StreamFilter::default().audio_codecs(&[]).to_owned(), None)] fn t_select_audio_stream(#[case] filter: StreamFilter, #[case] expect_url: Option<&str>) { diff --git a/src/util/mod.rs b/src/util/mod.rs index f77e600..a91375f 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -83,18 +83,6 @@ pub fn generate_content_playback_nonce() -> String { random_string(CONTENT_PLAYBACK_NONCE_ALPHABET, 16) } -pub fn random_uuid() -> String { - let mut rng = rand::thread_rng(); - format!( - "{:08x}-{:04x}-{:04x}-{:04x}-{:012x}", - rng.gen::(), - rng.gen::(), - rng.gen::(), - rng.gen::(), - rng.gen::() & 0xffffffffffff, - ) -} - /// Split an URL into its base string and parameter map /// /// Example: @@ -618,16 +606,4 @@ pub(crate) mod tests { let res_str = res.join(" "); assert_eq!(res_str, teststr) } - - #[rstest] - #[case("en", Some(Language::En))] - #[case("en-GB", Some(Language::EnGb))] - #[case("en-US", Some(Language::En))] - #[case("en-ZZ", Some(Language::En))] - #[case("xy", None)] - #[case("xy-ZZ", None)] - fn parse_language(#[case] s: &str, #[case] expect: Option) { - let res = Language::from_str(s).ok(); - assert_eq!(res, expect); - } } diff --git a/src/util/protobuf.rs b/src/util/protobuf.rs index 8c1b0d6..64488ac 100644 --- a/src/util/protobuf.rs +++ b/src/util/protobuf.rs @@ -45,13 +45,6 @@ impl ProtoBuilder { self._varint(val); } - /// Write a string field - pub fn string(&mut self, field: u32, string: &str) { - self._field(field, 2); - self._varint(string.len() as u64); - self.bytes.extend_from_slice(string.as_bytes()); - } - /// Write an embedded message /// /// Requires passing another [`ProtoBuilder`] with the embedded message. @@ -60,12 +53,6 @@ impl ProtoBuilder { self._varint(pb.bytes.len() as u64); self.bytes.append(&mut pb.bytes); } - - /// Base64 + urlencode the protobuf data - pub fn to_base64(&self) -> String { - let b64 = super::b64_encode(&self.bytes); - urlencoding::encode(&b64).to_string() - } } fn parse_varint>(pb: &mut P) -> Option { @@ -137,6 +124,11 @@ mod tests { use super::*; + // #[test] + // fn t_parse_varint() { + + // } + #[test] fn t_parse_proto() { let p = "GhhVQzl2cnZOU0wzeGNXR1NrVjg2UkVCU2c%3D"; diff --git a/testfiles/dict/gen_lang_names.js b/testfiles/dict/gen_lang_names.js deleted file mode 100644 index 8dde523..0000000 --- a/testfiles/dict/gen_lang_names.js +++ /dev/null @@ -1,16 +0,0 @@ -const fs = require("fs"); - -const dict = JSON.parse(fs.readFileSync("dictionary.json")); - -const intl = new Intl.DisplayNames(["en"], { type: "language" }); - -let langs = Object.keys(dict); -Object.values(dict).forEach(entry => { - if (entry.equivalent) { - langs.push(...entry.equivalent); - } -}); -langs.sort(); - -const res = Object.fromEntries(langs.map((l) => [l, intl.of(l)])); -fs.writeFileSync("lang_names.json", JSON.stringify(res, null, 2)); diff --git a/testfiles/dict/lang_names.json b/testfiles/dict/lang_names.json deleted file mode 100644 index 730ff2e..0000000 --- a/testfiles/dict/lang_names.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "af": "Afrikaans", - "am": "Amharic", - "ar": "Arabic", - "as": "Assamese", - "az": "Azerbaijani", - "be": "Belarusian", - "bg": "Bulgarian", - "bn": "Bangla", - "bs": "Bosnian", - "ca": "Catalan", - "cs": "Czech", - "da": "Danish", - "de": "German", - "el": "Greek", - "en": "English", - "en-GB": "British English", - "en-IN": "English (India)", - "es": "Spanish", - "es-419": "Latin American Spanish", - "es-US": "Spanish (United States)", - "et": "Estonian", - "eu": "Basque", - "fa": "Persian", - "fi": "Finnish", - "fil": "Filipino", - "fr": "French", - "fr-CA": "Canadian French", - "gl": "Galician", - "gu": "Gujarati", - "hi": "Hindi", - "hr": "Croatian", - "hu": "Hungarian", - "hy": "Armenian", - "id": "Indonesian", - "is": "Icelandic", - "it": "Italian", - "iw": "Hebrew", - "ja": "Japanese", - "ka": "Georgian", - "kk": "Kazakh", - "km": "Khmer", - "kn": "Kannada", - "ko": "Korean", - "ky": "Kyrgyz", - "lo": "Lao", - "lt": "Lithuanian", - "lv": "Latvian", - "mk": "Macedonian", - "ml": "Malayalam", - "mn": "Mongolian", - "mr": "Marathi", - "ms": "Malay", - "my": "Burmese", - "ne": "Nepali", - "nl": "Dutch", - "no": "Norwegian", - "or": "Odia", - "pa": "Punjabi", - "pl": "Polish", - "pt": "Portuguese", - "pt-PT": "European Portuguese", - "ro": "Romanian", - "ru": "Russian", - "si": "Sinhala", - "sk": "Slovak", - "sl": "Slovenian", - "sq": "Albanian", - "sr": "Serbian", - "sr-Latn": "Serbian (Latin)", - "sv": "Swedish", - "sw": "Swahili", - "ta": "Tamil", - "te": "Telugu", - "th": "Thai", - "tr": "Turkish", - "uk": "Ukrainian", - "ur": "Urdu", - "uz": "Uzbek", - "vi": "Vietnamese", - "zh-CN": "Chinese (China)", - "zh-HK": "Chinese (Hong Kong)", - "zh-TW": "Chinese (Taiwan)", - "zu": "Zulu" -} diff --git a/testfiles/player_model/hdr.json b/testfiles/player_model/hdr.json index d9b1f83..4a9d8c1 100644 --- a/testfiles/player_model/hdr.json +++ b/testfiles/player_model/hdr.json @@ -1124,6 +1124,5 @@ "subtitles": [], "expires_in_seconds": 21540, "hls_manifest_url": null, - "dash_manifest_url": null, - "preview_frames": [] + "dash_manifest_url": null } diff --git a/testfiles/player_model/multilanguage.json b/testfiles/player_model/multilanguage.json index f1cb210..ddf8d58 100644 --- a/testfiles/player_model/multilanguage.json +++ b/testfiles/player_model/multilanguage.json @@ -1,7 +1,7 @@ { "details": { "id": "tVWWp1PqDus", - "name": "100 Boys Vs 100 Girls For $500,000", + "name": "100 Girls Vs 100 Boys For $500,000", "description": "Giving away $25k on Current! Sign up and use my code “BEAST250” for a chance to win*: https://www.current.com/beast250\n\nSUBSCRIBE OR I TAKE YOUR DOG\n╔═╦╗╔╦╗╔═╦═╦╦╦╦╗╔═╗\n║╚╣║║║╚╣╚╣╔╣╔╣║╚╣═╣ \n╠╗║╚╝║║╠╗║╚╣║║║║║═╣\n╚═╩══╩═╩═╩═╩╝╚╩═╩═╝\n\n----------------------------------------------------------------\nfollow all of these or i will kick you\n• TikTok - https://www.tiktok.com/@mrbeast\n• Twitter - https://twitter.com/MrBeast\n• Instagram - https://www.instagram.com/mrbeast\n• Facebook - https://www.facebook.com/MrBeast6000/\n• Official Merch - https://www.shopmrbeast.com/\n• Beast Philanthropy - https://www.beastphilanthropy.org/\n\nText me @ +1 (917) 259-6364\nI'm Hiring! - https://www.mrbeastjobs.com/\nOrder a beast burger 🍔 - https://mrbeastburger.com\nChocolate 🍫 Win a Tesla or be in a MrBeast video - Buy now ▸ https://feastables.com\n-----------------------------------------------------------------—\n\nCurrent is a financial technology company, not a bank. Banking services provided by Choice Financial Group, Member FDIC. The Current Visa Debit Card is issued by Choice Financial Group pursuant to a license from Visa U.S.A. Inc. and may be used everywhere Visa debit cards are accepted.\n\n*NO PURCHASE OR PAYMENT NECESSARY TO ENTER OR WIN. Open to legal residents of the 50 U.S./D.C., age 18+ (19+ in AL and NE, 21+ in MS). Void outside the 50 U.S./D.C. and where prohibited. Sweepstakes starts at 12:00:01 AM ET on 7/9/22; ends at 11:59:59 PM ET on 10/9/22. Odds of winning will depend upon the number of eligible entries received. For full Official Rules and how to enter without becoming a Current member, visit https://www.current.com/beast250. Sponsor: Finco Services, Inc. d/b/a Current, 30 Cooper Square, Floor 4, New York, NY 10003.", "length": 1013, "thumbnail": [ @@ -31,25 +31,22 @@ "height": 1080 } ], - "channel": { - "id": "UCX6OQ3DkcsbYNE6H8uQQuVA", - "name": "MrBeast" - }, - "view_count": 136908834, + "channel": { "id": "UCX6OQ3DkcsbYNE6H8uQQuVA", "name": "MrBeast" }, + "publish_date": "2022-07-23T00:00:00Z", + "view_count": 71877575, "keywords": [], "is_live": false, "is_live_content": false }, "video_streams": [ { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=77073851&dur=1012.693&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=18&lmt=1683783187618995&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=jcptwbVfjmUWxQ&ns=1WzgXR-YoajDJVHVaMTvU9MN&pl=37&ratebypass=yes&requiressl=yes&sig=AOq0QJ8wRQIgeV0_N2s-9wI5GuXygB2NcAwoH7eyIZ0af6d-M6NkCOECIQC9ys-Y4JqPcI3aBT8J5crEET1nhmvjI0eGCAHks8M0hQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4530434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=91654365&dur=1012.691&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=18&lmt=1659771857317964&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=_jyjH00dJBe7dg&ns=reEnGV5TXA4a46KeBfHlqJAH&pl=37&ratebypass=yes&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgfPKHbo-nwvy2qfKM5toxUdYecumTWN0NUtHl_bhKzH4CIQC3uXom8W2XGgQ-Hhz2-81kezg4J28RdvBK3FI5gLet5A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cratebypass%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4538434&vprv=1", "itag": 18, - "bitrate": 608891, - "average_bitrate": 608862, - "size": 77073851, + "bitrate": 724079, + "average_bitrate": 724046, + "size": 91654365, "index_range": null, "init_range": null, - "duration_ms": 1012693, "width": 640, "height": 360, "fps": 30, @@ -63,11 +60,11 @@ ], "video_only_streams": [ { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=12076981&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=160&keepalive=yes&lmt=1683787939431169&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgSet2oRfrnzJKcEetai80HOLE71xZH3N91zogTxPLwWMCIHPEuf0FsJHMroqQIei_bo1LysCWa3XGxK1EyBInr1xy&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=12082288&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=160&keepalive=yes&lmt=1659781594841916&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAOqzJbALHUbMk-uDUj9ArJfTNOb2p1NxjI1P7N3CKYNdAiEAzsb2JubT8Yv6bV1c7O-NRPRZBjjMiqnw5aKJFsh16rk%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 160, - "bitrate": 114785, - "average_bitrate": 95409, - "size": 12076981, + "bitrate": 115315, + "average_bitrate": 95451, + "size": 12082288, "index_range": { "start": 738, "end": 3061 @@ -76,7 +73,6 @@ "start": 0, "end": 737 }, - "duration_ms": 1012644, "width": 256, "height": 144, "fps": 30, @@ -88,11 +84,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=10710406&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=278&keepalive=yes&lmt=1683793966364433&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAKJxQWqLK5DpZ7CkkavrjkrlaX5126Y49pV9wggc8Yx8AiEAoYc7_9O-wzI3G3xdFHh9qFwZEh1vrBrlA5p1glWK8uU%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=11827097&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=278&keepalive=yes&lmt=1659784398309743&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgEHp9vCd5vxU3MoUZf6vkKMisv5RiqaV8qkEh-1hU3PMCIF9EOQ2ytaheSxZmmuUeK9cBGOg1z4AZOVCpv1PfqPLc&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 278, - "bitrate": 92054, - "average_bitrate": 84613, - "size": 10710406, + "bitrate": 97659, + "average_bitrate": 93435, + "size": 11827097, "index_range": { "start": 219, "end": 3455 @@ -101,7 +97,6 @@ "start": 0, "end": 218 }, - "duration_ms": 1012644, "width": 256, "height": 144, "fps": 30, @@ -113,11 +108,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=10296353&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=394&keepalive=yes&lmt=1683783301275775&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAJSOvRY1MzTPGwVWuDAmFWxErp_WALzhgwKBex876BIMAiEAmK0nGArmm_YuQbYrOYtCtJMjJw2XrrzcnaPIzp51whk%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=9302597&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=394&keepalive=yes&lmt=1659771776731568&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAPFT82c0yyCT_4gyp3QnddMDhCOPUSYXShIrahuUv9q5AiATpTawOCJDxWhgOJgHOJ_eaob-hpIJeTGI1Cah4Z8C6g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 394, - "bitrate": 102955, - "average_bitrate": 81342, - "size": 10296353, + "bitrate": 91838, + "average_bitrate": 73491, + "size": 9302597, "index_range": { "start": 700, "end": 3023 @@ -126,7 +121,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 256, "height": 144, "fps": 30, @@ -138,11 +132,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=23098224&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=133&keepalive=yes&lmt=1683787941592756&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgQSTbFEkh8LbH19nUQp92miSQSPzxLlddDOjrE72yGZkCICktF-HUzbZMeZYYXehhBapY55R5XNOn0mY-EWPq6iEl&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=23102992&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=133&keepalive=yes&lmt=1659781643986574&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgNMcHjX1Wa9ctKv2vDbFzmTV87BuMGSdtWcAX8L9nsKMCIGikQTZmLDupR5fNm4gCSCedF4_Y9KqNTIScKYSqaxyq&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 133, - "bitrate": 249917, - "average_bitrate": 182478, - "size": 23098224, + "bitrate": 248249, + "average_bitrate": 182516, + "size": 23102992, "index_range": { "start": 739, "end": 3062 @@ -151,7 +145,6 @@ "start": 0, "end": 738 }, - "duration_ms": 1012644, "width": 426, "height": 240, "fps": 30, @@ -163,20 +156,19 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=23380710&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=242&keepalive=yes&lmt=1683793909671501&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgZbtufwU0g0-jFUoBrq7n1Ne09mkHjGN23Po34rndi24CIQCljHIB53OmtP27ul3cvsWVw4RFEi_Nl7qOBmWL4jZpFA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=26846976&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=242&keepalive=yes&lmt=1659784461564077&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgOvyxJqHnalVH0xsBN37mrR267gvemDT3GPPYMI-hr9YCIFOOxKVWJDX9SOvBmx6-M9goLbb7mN2h3r6leIj_egmh&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 242, - "bitrate": 216267, - "average_bitrate": 184710, - "size": 23380710, + "bitrate": 246870, + "average_bitrate": 212094, + "size": 26846976, "index_range": { "start": 219, - "end": 3511 + "end": 3529 }, "init_range": { "start": 0, "end": 218 }, - "duration_ms": 1012644, "width": 426, "height": 240, "fps": 30, @@ -188,11 +180,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=19803140&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=395&keepalive=yes&lmt=1683783381398973&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAIUO10ENWskvvAu024zvKn0b3bRWX0EyRsVabzrL9v8KAiBSccc8iPXX_g_N2q40A5Bi7mmvnwWK63c-mzFAi_89Pw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=19652762&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=395&keepalive=yes&lmt=1659771951514711&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAJrybBNLlEJgNt58E9L9KRBCYhtr77pDeb7EwmpqyFraAiEA_nGMHqmhdt1fiCWEywIW2a3NY076Cvu9P1r2j_tXXdI%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 395, - "bitrate": 214028, - "average_bitrate": 156447, - "size": 19803140, + "bitrate": 185967, + "average_bitrate": 155259, + "size": 19652762, "index_range": { "start": 700, "end": 3023 @@ -201,7 +193,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 426, "height": 240, "fps": 30, @@ -213,11 +204,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=44703914&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=134&keepalive=yes&lmt=1683787942654377&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgOWdv9KlCWVAv6jFEBK-6h3l1QOn1HDHjGdKfJBYtOBkCIBdi9P_YU9UX4GdGzuk2SSu_cgaUHJOXUJ9P4qf3K0z0&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=44714361&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=134&keepalive=yes&lmt=1659781629752284&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgeFvXl3HVmzgILvdnaOah5xhsFXl7kPonBW6xuS323BUCIENt0DteUxaeqAv2rq58SQEPik8eJElkqzSeFt44s_VO&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 134, - "bitrate": 576884, - "average_bitrate": 353165, - "size": 44703914, + "bitrate": 576280, + "average_bitrate": 353248, + "size": 44714361, "index_range": { "start": 739, "end": 3062 @@ -226,7 +217,6 @@ "start": 0, "end": 738 }, - "duration_ms": 1012644, "width": 640, "height": 360, "fps": 30, @@ -238,11 +228,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=48610243&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=243&keepalive=yes&lmt=1683793911055215&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgNCvf4z47PxtAp-P4KRhzwb7WTjrnkmOYZ1mHJY4LmsQCIAI9fPaqklLUj6Qg6WV4Gq4-r8vs1BOn1v6tu06JGk9A&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=48584560&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=243&keepalive=yes&lmt=1659784475994141&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAO7GXL1MstX_2G5duLbbt7LXYo0UFxRM1P67xx2yaKELAiEArcC18fHQpzoyK_9e8NbWoHhHTz6-YSqpOxW3v0vgpY4%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 243, - "bitrate": 442605, - "average_bitrate": 384026, - "size": 48610243, + "bitrate": 443297, + "average_bitrate": 383823, + "size": 48584560, "index_range": { "start": 220, "end": 3581 @@ -251,7 +241,6 @@ "start": 0, "end": 219 }, - "duration_ms": 1012644, "width": 640, "height": 360, "fps": 30, @@ -263,11 +252,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=41498925&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=396&keepalive=yes&lmt=1683782484149627&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAJFg52NOZ7bbUwef3Krl7MfVtDuXdZXLrQv_SILY62VeAiEAgR-3tu2TBXyAIV0WILNi0jNknvbjMUxhYaCUsyz2LVw%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=40662706&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=396&keepalive=yes&lmt=1659774465760284&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAK3ic4i0V2N3CO8c8CSnLQX25glhIpOwG2xzNhHM3tr6AiBW4B0iyYY5v0evmRYURbaHVlWXqfYGazqQ1naagIhUcg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 396, - "bitrate": 459348, - "average_bitrate": 327846, - "size": 41498925, + "bitrate": 391774, + "average_bitrate": 321239, + "size": 40662706, "index_range": { "start": 700, "end": 3023 @@ -276,7 +265,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 640, "height": 360, "fps": 30, @@ -288,11 +276,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=68212637&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=135&keepalive=yes&lmt=1683787944411475&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAMZguS_4aJFCjWsvXkyxWxGa1DknMOlsP1vgrTK-VOKOAiAnJpIvttgWKmJrMW3rBocawXZMnqbjgWRqj5KJo53GGg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=68269120&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=135&keepalive=yes&lmt=1659781828864490&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgCoE6m9X2BUAB5MHSdfDm8U_CQo3Ax9nOYiisB3PNXWsCIBXzXZ6zhvHqNOCBSzFOkxPSqrBI1VwWwGIyXGLamiN5&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 135, - "bitrate": 1061343, - "average_bitrate": 538887, - "size": 68212637, + "bitrate": 1060991, + "average_bitrate": 539333, + "size": 68269120, "index_range": { "start": 739, "end": 3062 @@ -301,7 +289,6 @@ "start": 0, "end": 738 }, - "duration_ms": 1012644, "width": 854, "height": 480, "fps": 30, @@ -313,20 +300,19 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=77648932&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=244&keepalive=yes&lmt=1683793912300747&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgT4fTt5I6BOTj8YHa7D4ZbiW5Kj1CXHwBAyMUEraGTu8CIEdpGzSiV9og54IsSFSsYapJcg8DLDxYZbu0dYcPGTaa&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=77320479&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=244&keepalive=yes&lmt=1659784420892176&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgf-IluayL1TQWD9c2ZPvqvUtViItpbApY-MReL7yPAZ8CIQC-7CA-4bO91vqM-_T4HW36I87i4BNjLin834RoBXoIWA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 244, - "bitrate": 754723, - "average_bitrate": 613435, - "size": 77648932, + "bitrate": 749555, + "average_bitrate": 610840, + "size": 77320479, "index_range": { "start": 220, - "end": 3607 + "end": 3606 }, "init_range": { "start": 0, "end": 219 }, - "duration_ms": 1012644, "width": 854, "height": 480, "fps": 30, @@ -338,11 +324,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=72485445&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=397&keepalive=yes&lmt=1683783766846749&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgYUgo4QrIA6zcIMHuF_l4XiLaMPH7KGDwarzwgMUW2owCIF5entcVXfEtjug0b15rA6vub0BV0j5JMofS30BE7Eh9&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=71890035&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=397&keepalive=yes&lmt=1659791212753044&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgTn-pdr2sxjkPplhFydtX2yJ6_PI0hUNedZZm6q29ktICIQDu2R2R7owZFBp1uuW7wL2Sm_MYV93TFE2GtbUOPEGapA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 397, - "bitrate": 801728, - "average_bitrate": 572643, - "size": 72485445, + "bitrate": 700692, + "average_bitrate": 567939, + "size": 71890035, "index_range": { "start": 700, "end": 3023 @@ -351,7 +337,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 854, "height": 480, "fps": 30, @@ -363,11 +348,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=123652442&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=136&keepalive=yes&lmt=1683787959744367&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgSvkoYKKZ-SEFRi_AZ2pQYzBOxHk4SgBruVIhW5Ui1EMCIHdvlJp8KwIh1UiJO00EmRUj8a03mtBxxWikecOl0Jk1&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=123721377&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=136&keepalive=yes&lmt=1659784121644633&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgBRgfpr8411ec0ctulLdgpL6RfzEqboGttJLDmfgtCwICIQCVZvc-BQ9kiTg2mPI7qAD6LxCMzpWTdzeIRuzCNbgN0g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 136, - "bitrate": 2016579, - "average_bitrate": 976868, - "size": 123652442, + "bitrate": 2015959, + "average_bitrate": 977412, + "size": 123721377, "index_range": { "start": 739, "end": 3062 @@ -376,7 +361,6 @@ "start": 0, "end": 738 }, - "duration_ms": 1012644, "width": 1280, "height": 720, "fps": 30, @@ -388,39 +372,19 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=22&lmt=1683783214350373&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=jcptwbVfjmUWxQ&ns=1WzgXR-YoajDJVHVaMTvU9MN&pl=37&ratebypass=yes&requiressl=yes&sig=AOq0QJ8wRQIhAKXn58k9q93HQFc68FF38guHL4SR95x72rAWp1rWFFv9AiAeSn8CY1vqf57ElYJs1m5ruVT5bO4rKLOwYhwYhnn11w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cratebypass%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1", - "itag": 22, - "bitrate": 2767711, - "average_bitrate": 2767711, - "size": null, - "index_range": null, - "init_range": null, - "duration_ms": 1012691, - "width": 1280, - "height": 720, - "fps": 30, - "quality": "720p", - "hdr": false, - "mime": "video/mp4; codecs=\"avc1.64001F, mp4a.40.2\"", - "format": "mp4", - "codec": "avc1", - "throttled": false - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=147601285&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=247&keepalive=yes&lmt=1683793917158272&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAJoFxlPhUMgIWaVBgvZj4wN-0AToP6LcpSE-9qU0aP6WAiBMVWP8RB023ja7aalg5EDWjSwSl8ZuFTyabKAd5fFisQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=143581331&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=247&keepalive=yes&lmt=1659784432582864&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAMBFZfnO0TDVOcadYG1zgJudXUG3iyad5Y2eK0DqR9qQAiAgb16ay3WLOr_dIa34txketICiLNAvWEJ6kHkmpgRQIg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 247, - "bitrate": 1539305, - "average_bitrate": 1166066, - "size": 147601285, + "bitrate": 1540881, + "average_bitrate": 1134308, + "size": 143581331, "index_range": { "start": 220, - "end": 3627 + "end": 3626 }, "init_range": { "start": 0, "end": 219 }, - "duration_ms": 1012644, "width": 1280, "height": 720, "fps": 30, @@ -432,11 +396,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=131590322&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=398&keepalive=yes&lmt=1683783412184763&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAKPN8cLBkmuJxznCLh99bmrvR21hfSCGjwiTsu3K7ZeBAiEAlt0ZoiED2fyoJXIiUwmUhz17TYJcKYpOOweXkbQjrt0%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=141532316&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=398&keepalive=yes&lmt=1659773509914712&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANkJ5RXJ4nbM6C6Fjp3emq6jizYqpW0CZBnPxxI1mFDsAiBhTZdfVfwh48W9wLN6ThSNnxbZ6oL4O_nsFqaVv2Oylw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 398, - "bitrate": 1548917, - "average_bitrate": 1039578, - "size": 131590322, + "bitrate": 1392815, + "average_bitrate": 1118121, + "size": 141532316, "index_range": { "start": 700, "end": 3023 @@ -445,7 +409,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 1280, "height": 720, "fps": 30, @@ -457,11 +420,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=421285879&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=137&keepalive=yes&lmt=1683787778380517&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgUO_KUVLUJNKgDHpJeZ5F1D9c4IOSqqU89cuWCgDpUoQCICiphHalGNgp7vzIyzb_fpBM_NNdLsytk-YSveq55I9R&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=421725185&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=137&keepalive=yes&lmt=1659786363083094&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAP5Ylk8gGi95Hn2d2rXvxeLqGGWoVB6X2cwRoYeMbRokAiEA54LDtzyRvfBXdYqpwT6ES_tBwVbUz9a0hfiUAIdaUVA%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 137, - "bitrate": 4444251, - "average_bitrate": 3328205, - "size": 421285879, + "bitrate": 4508621, + "average_bitrate": 3331675, + "size": 421725185, "index_range": { "start": 741, "end": 3064 @@ -470,7 +433,6 @@ "start": 0, "end": 740 }, - "duration_ms": 1012644, "width": 1920, "height": 1080, "fps": 30, @@ -482,20 +444,19 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=302252313&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=248&keepalive=yes&lmt=1683792273928810&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAO-yj9R-smK4_LceGBhpxxZ2m8gJ8eg3yAZ3B5-TxJ26AiEAvnKJZ1VCwqe0o8a5cds2SIxiw0XmIiEsFDD2JQVLudo%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=453D434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=283266224&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=248&keepalive=yes&lmt=1659792392954547&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgdW5nLHA9TliCMs6j5qdDAyfF_OsrQnJMR6BPh10mep0CIDVw5np7ss88sfEVFMlBG2c6XbDQsNPu4ZsISlIuzCIP&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4535434&vprv=1", "itag": 248, - "bitrate": 2704805, - "average_bitrate": 2387826, - "size": 302252313, + "bitrate": 2569402, + "average_bitrate": 2237834, + "size": 283266224, "index_range": { "start": 221, - "end": 3638 + "end": 3637 }, "init_range": { "start": 0, "end": 220 }, - "duration_ms": 1012644, "width": 1920, "height": 1080, "fps": 30, @@ -507,11 +468,11 @@ "throttled": false }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=252581029&dur=1012.644&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=399&keepalive=yes&lmt=1683783754163506&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhANEV52WgnUwjh73umAJne0nV9N6sUNAMAfGcRcWdUttVAiB-MrgcOJkl47rpmM_wDIx1RKbgIwfpPYhgQm02VE_3tA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4537434&vprv=1", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&c=WEB&clen=251083866&dur=1012.644&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=399&keepalive=yes&lmt=1659797852257648&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=video%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgPAYuihXswGT3Cze9Lc74SF3qmBeu4AaFb29HHzfD2WkCIQDbtxwaI7eUEhdSqCCLhNFHhrk9jIMVqLipl6E0Z2mcqg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1", "itag": 399, - "bitrate": 3324281, - "average_bitrate": 1995418, - "size": 252581029, + "bitrate": 2523962, + "average_bitrate": 1983590, + "size": 251083866, "index_range": { "start": 700, "end": 3023 @@ -520,7 +481,6 @@ "start": 0, "end": 699 }, - "duration_ms": 1012644, "width": 1920, "height": 1080, "fps": 30, @@ -534,69 +494,11 @@ ], "audio_streams": [ { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=372147&dur=60.101&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774002244357&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAK2jmkA3FY7jqV2I1GKtT4XTd4RYgC7ZK81yzwATcoyfAiEA1P3xQBGTvcSo5AVVJ7iVpADU3yUTomkW99NuL_6CehQ%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dfr", - "itag": 249, - "bitrate": 50996, - "average_bitrate": 49536, - "size": 372147, - "index_range": { - "start": 259, - "end": 372 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 60101, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.46000004, - "throttled": false, - "track": { - "id": "fr.3", - "lang": "fr", - "lang_name": "French dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6306327&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683782187865292&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgW1DTCrLV_GyEM1rdjScgyceZE1llb73KJMFXmPm5Y04CIAYOLZuuzFX4ba5720kMOcQ1-Ld1DULs85nLxJglitCl&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6297404&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767062297621&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhAPm10DeIvOt5Oc7e36cfhPC0ej2PslQqF3-CFVUl5TNfAiEAlgvwjlQK14e_-6j3W_hMvk9KHax8zd5shSVlYSR1P34%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den", "itag": 249, "bitrate": 59750, - "average_bitrate": 49819, - "size": 6306327, - "index_range": { - "start": 266, - "end": 1996 - }, - "init_range": { - "start": 0, - "end": 265 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 2.8500004, - "throttled": false, - "track": { - "id": "en-US.4", - "lang": "en-US", - "lang_name": "English (United States) original", - "is_default": true, - "track_type": "original" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6321564&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774142034638&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhANhcvte60E60oUIwFp1It_bBO7-z6Du2NUztcAJmgmmRAiEAzj-Z0M0zFYH-dh-eQyX-AKc_GHXgZJAbZ8CKz78ug-8%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dpt", - "itag": 249, - "bitrate": 59882, - "average_bitrate": 49940, - "size": 6321564, + "average_bitrate": 49749, + "size": 6297404, "index_range": { "start": 266, "end": 1995 @@ -605,27 +507,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "pt.3", - "lang": "pt", - "lang_name": "Portuguese dubbed", - "is_default": false, - "track_type": "dubbed" + "id": "en.0", + "lang": "en", + "lang_name": "English", + "is_default": true } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6357876&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774182040216&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgYAunNMdQwJpRsfBpokSM5tuQx59bEnTHNNOaLqWo-w4CIQC576EjyFGGVQXXtHL_ooEvjvxI7fLbITaDfX78DesSEA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dru", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6335194&dur=1012.701&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767030669485&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgB1E45ziiujPbZyoqtzF7dPp-zq2pYdqJxZIh1YyL7JICIBEuqAl9gkGmpC4BbdQHOrN94RwE8fAKehLLou-HRwkV&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dru", "itag": 249, - "bitrate": 60151, - "average_bitrate": 50225, - "size": 6357876, + "bitrate": 60370, + "average_bitrate": 50045, + "size": 6335194, "index_range": { "start": 266, "end": 1995 @@ -634,56 +532,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012701, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "ru.3", + "id": "ru.0", "lang": "ru", - "lang_name": "Russian dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Russian", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6358303&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774312079215&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgddZWJZtC7Scl5EoxZIzpffL_MynOhR3JWkKNjYj4ah0CIQDaebvNn7AqcnYR-vJjBPnOYUzHl0shF_zgBtbBJo697g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dko", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6376949&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767030635910&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAImbjql1yRXwNQaTG_7BUTzyr0lOgn0qBZOCJ92MXE_vAiAY2lcEUg-CFtJGyMCrG21Qh7ylrDf_p5C1QGGadCE34w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Des", "itag": 249, - "bitrate": 59548, - "average_bitrate": 50230, - "size": 6358303, - "index_range": { - "start": 259, - "end": 1988 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.19999981, - "throttled": false, - "track": { - "id": "ko.3", - "lang": "ko", - "lang_name": "Korean dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6377512&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774239246777&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgZG61rM8RijxP9i0OIRqTHwNTqqyjo0mXfuo9MkbtwB0CIQC5uU2hY2n1HpuN69XDCh--wGqSP25pbm2JT43UPG3j8g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Des", - "itag": 249, - "bitrate": 57882, - "average_bitrate": 50382, - "size": 6377512, + "bitrate": 58727, + "average_bitrate": 50377, + "size": 6376949, "index_range": { "start": 266, "end": 1995 @@ -692,27 +557,48 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "es.3", + "id": "es.0", "lang": "es", - "lang_name": "Spanish dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Spanish", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6383258&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774201610058&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAOsN02fAPZN-Nj4QQjwj1YD0UM9yAqKU4g80KY9itVMbAiEAsWuLx-RsZCl8sqO5ZLxmmAq2xqoYjKmQ-q1X81S3r0I%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dja", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6377249&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767030989871&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgMmGG3ZtSmER8wXgMIef1JzfZnj1hLHS3uTwrBCpYKeUCIQDNGVpI6pkwfd2lAlpMAxv7jAcgm2gMFj_lfoHlXplzVw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dfr", "itag": 249, - "bitrate": 57039, - "average_bitrate": 50427, - "size": 6383258, + "bitrate": 59711, + "average_bitrate": 50377, + "size": 6377249, + "index_range": { + "start": 259, + "end": 1988 + }, + "init_range": { + "start": 0, + "end": 258 + }, + "mime": "audio/webm; codecs=\"opus\"", + "format": "webm", + "codec": "opus", + "throttled": false, + "track": { + "id": "fr.0", + "lang": "fr", + "lang_name": "French", + "is_default": false + } + }, + { + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6418805&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=249&keepalive=yes&lmt=1659767030246466&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgZU5ZQrHtscZ39r6L5ij5H9IU0siKbd7ByvgfzamDZXoCIHUXqXl7daCGY1use3Nj15cRiW3a9RJ9raNVSamYCOI1&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dpt", + "itag": 249, + "bitrate": 60205, + "average_bitrate": 50705, + "size": 6418805, "index_range": { "start": 266, "end": 1995 @@ -721,230 +607,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "ja.3", - "lang": "ja", - "lang_name": "Japanese dubbed", - "is_default": false, - "track_type": "dubbed" + "id": "pt.0", + "lang": "pt", + "lang_name": "Portuguese", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6399497&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774452781272&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgBKywl9Zh_sf_b5sNANKDaNL4H6JC5c4MOgouun07mcECIQCNx-HR0GQ14n_qSxzrI8ZbgBtRUvIkEayZ1xFFm0ubiA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dvi", - "itag": 249, - "bitrate": 58782, - "average_bitrate": 50551, - "size": 6399497, - "index_range": { - "start": 259, - "end": 1988 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.23999977, - "throttled": false, - "track": { - "id": "vi.3", - "lang": "vi", - "lang_name": "Vietnamese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6447873&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774297515785&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAOPNWjHF-zxNrSC087E1cUviWk4zj_hQgHjtxtLBFrsDAiEAzXNWsV3KICw6y2QyiHoDf7Cw_o1PDRPLbQ5sVxuVQmQ%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dar", - "itag": 249, - "bitrate": 58936, - "average_bitrate": 50936, - "size": 6447873, - "index_range": { - "start": 259, - "end": 1988 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012701, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -2.3899994, - "throttled": false, - "track": { - "id": "ar.3", - "lang": "ar", - "lang_name": "Arabic dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6466592&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774305734405&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgPzRz4PIP23lqCmV-8fGADENveMeEhls29a2Qz6MMST0CIF1-D7t8mdQEvuJ9qShndrEKle9Gey6a3cn7hKz2i3w-&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dtr", - "itag": 249, - "bitrate": 58928, - "average_bitrate": 51081, - "size": 6466592, - "index_range": { - "start": 259, - "end": 1988 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.32999992, - "throttled": false, - "track": { - "id": "tr.3", - "lang": "tr", - "lang_name": "Turkish dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6471089&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774258108589&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgXHv24gw_m9ygWqV9HFQOwbh9afgep9rr2xJxnCBPDtQCICr88lbprn7BearPW_J8trvEliGTosY38YW93isEQ1Jg&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dhi", - "itag": 249, - "bitrate": 58787, - "average_bitrate": 51121, - "size": 6471089, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.029999733, - "throttled": false, - "track": { - "id": "hi.3", - "lang": "hi", - "lang_name": "Hindi dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6614485&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774348285014&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgFmbm7K2Xw1m202KnzoR043M3cRT6Wl9u0LuNroVrRuQCIAto0wVakiu5oWUr-294cUyAIstySaigBU1KEA8Jp-aB&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Did", - "itag": 249, - "bitrate": 59106, - "average_bitrate": 52254, - "size": 6614485, - "index_range": { - "start": 259, - "end": 1988 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.03999996, - "throttled": false, - "track": { - "id": "id.3", - "lang": "id", - "lang_name": "Indonesian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=6710438&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=249&keepalive=yes&lmt=1683774591935986&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgd3q9BlBisSpOoBuzSXEEK1lu77Gq1c6elULEnAV7wY4CIQD4lkp1K6HPwO6X2CMQahM4VN0_rjfOmGXy7N_Fr9P-Uw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dth", - "itag": 249, - "bitrate": 58559, - "average_bitrate": 53012, - "size": 6710438, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.22000027, - "throttled": false, - "track": { - "id": "th.3", - "lang": "th", - "lang_name": "Thai dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=481052&dur=60.101&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774002240466&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgIn1dBK-qpakvAGOR4h_HP46T9sqxljUFoGdtuC0Td1ECIHx1aOt5b51Cb2WyDA6nY66x4TNMojIndFdU-gkBgstO&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dfr", - "itag": 250, - "bitrate": 69840, - "average_bitrate": 64032, - "size": 481052, - "index_range": { - "start": 259, - "end": 373 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 60101, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.46000004, - "throttled": false, - "track": { - "id": "fr.3", - "lang": "fr", - "lang_name": "French dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8217508&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683782195315620&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIga2iMQsToMxO7hTOx0gNAzhYoV1lL5PpE9lkAuBXt1nkCIQCuFuQXWNixIquEugtkT1C9khuKRP_C-wzSOiUmRp1DRg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8217507&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767073159859&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgM9loLjlUtgwrALqSek4vO8KljcCltFjLw1TGX0d9lZ4CICRiTJ8a_KgdafXVo2vKwgLPuH2B7t0hF-ln2k_MI3ds&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den", "itag": 250, "bitrate": 74027, "average_bitrate": 64918, - "size": 8217508, + "size": 8217507, "index_range": { "start": 266, "end": 1996 @@ -953,27 +632,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 2.8500004, "throttled": false, "track": { - "id": "en-US.4", - "lang": "en-US", - "lang_name": "English (United States) original", - "is_default": true, - "track_type": "original" + "id": "en.0", + "lang": "en", + "lang_name": "English", + "is_default": true } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8260279&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774141260993&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhALGb9Jzoys2gbMu8Tk7YNu61u-toa5XM-YFk-XdX5HAYAiAkW_HelQgMbAvwVHByi7KWpkf8rVFYpwIgCO7tJ01RHw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dpt", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8293591&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767031057381&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhANEtTydOAYap6umBAcRO1hr59UE-5ewFF5r6kEruX9HUAiEAnt99T6pIGgYHxFh_cEqlQ8CsJ_nARCt1P5TjsKRevo4%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Des", "itag": 250, - "bitrate": 74668, - "average_bitrate": 65256, - "size": 8260279, + "bitrate": 72769, + "average_bitrate": 65519, + "size": 8293591, "index_range": { "start": 266, "end": 1996 @@ -982,56 +657,48 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "pt.3", - "lang": "pt", - "lang_name": "Portuguese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8290356&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774239437244&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgJ3-d7xud7yQge-7MjqkDxKrSAqunNIsqvfgN3g25GUUCIB7AqAhgTbEKPIYrM83JD7sJ732WgMCu7PGr-KcjsphE&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Des", - "itag": 250, - "bitrate": 72744, - "average_bitrate": 65493, - "size": 8290356, - "index_range": { - "start": 266, - "end": 1996 - }, - "init_range": { - "start": 0, - "end": 265 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.0, - "throttled": false, - "track": { - "id": "es.3", + "id": "es.0", "lang": "es", - "lang_name": "Spanish dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Spanish", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8324916&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774201619373&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhALyf4aRk1Z89sbWYDPEVIatkTbrJzgxXL0RELHbb1N4-AiEAjnYda5CpMiEMJ_oKTVFAW0UlE1Y4lutT6P3VgPif-S4%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dja", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8311366&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767030603155&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhANU27OApznf15qulGfhCuD_-fOONb6Y1AFmmfnNL6m8UAiEArioLYl7dxPvQmkIxBIBhDPvMdD4Ty2DsuX7RNJs6D2M%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dfr", "itag": 250, - "bitrate": 74419, - "average_bitrate": 65766, - "size": 8324916, + "bitrate": 76205, + "average_bitrate": 65655, + "size": 8311366, + "index_range": { + "start": 259, + "end": 1989 + }, + "init_range": { + "start": 0, + "end": 258 + }, + "mime": "audio/webm; codecs=\"opus\"", + "format": "webm", + "codec": "opus", + "throttled": false, + "track": { + "id": "fr.0", + "lang": "fr", + "lang_name": "French", + "is_default": false + } + }, + { + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8354070&dur=1012.701&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767085773007&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRgIhALGuAwE4R8j5LwXBPjdxmqvd6U_Dtl3eAmCcua2bVG_DAiEAqHX2vYI4uVAwKWFORA0lVvrfhvHZ_zuQvVJOu1K5v58%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dru", + "itag": 250, + "bitrate": 75194, + "average_bitrate": 65994, + "size": 8354070, "index_range": { "start": 266, "end": 1996 @@ -1040,27 +707,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "ja.3", - "lang": "ja", - "lang_name": "Japanese dubbed", - "is_default": false, - "track_type": "dubbed" + "id": "ru.0", + "lang": "ru", + "lang_name": "Russian", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8362478&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774181877935&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAPoBge53XzCNOx83jlQKvwHbMWWSrFOL94eHFd_3xDH7AiBoSS7eCT9_1yenwdHUHhjZoF-93Vop9shwLKDfCrgVOA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dru", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8369023&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=250&keepalive=yes&lmt=1659767030614633&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgEVhNMJpw0ywLfQdNon1k7rvZcJtaSTlXj4I6mT9LewACIBP0qBboYtd8lLZXTwRW33tgs_bcBF6Hw9UJJmjxsKJj&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dpt", "itag": 250, - "bitrate": 74850, - "average_bitrate": 66060, - "size": 8362478, + "bitrate": 74685, + "average_bitrate": 66111, + "size": 8369023, "index_range": { "start": 266, "end": 1996 @@ -1069,636 +732,148 @@ "start": 0, "end": 265 }, - "duration_ms": 1012701, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "ru.3", - "lang": "ru", - "lang_name": "Russian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8410510&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774452801532&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgJtUYBTXgaP8kAx4V29NY1hYOLRZ5d28ZRzKIWMPR8TkCIQDXP9_KaApgWxlzzW8cRtTj4vhtv9sKnsfQl_vkv55B1A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dvi", - "itag": 250, - "bitrate": 77816, - "average_bitrate": 66437, - "size": 8410510, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.23999977, - "throttled": false, - "track": { - "id": "vi.3", - "lang": "vi", - "lang_name": "Vietnamese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8411394&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774312088308&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgaWfg2zzlmwoPWKWqQzFhy134-M2_SjVORGKUmfDfwX4CIQD9ZcdizPONgWY5ipEewPrA3LGLrEFP_pWwepzn-rMeHw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dko", - "itag": 250, - "bitrate": 74460, - "average_bitrate": 66449, - "size": 8411394, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.19999981, - "throttled": false, - "track": { - "id": "ko.3", - "lang": "ko", - "lang_name": "Korean dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8493254&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774305586842&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAIDBMNc9T8315ks5RcKMDSWuJ2yTHiWiKRHR9b0cghCNAiBPeiwexMqF7_zNpDqulHg06iAYrMs4D4doeqWN4XuO3w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dtr", - "itag": 250, - "bitrate": 74936, - "average_bitrate": 67091, - "size": 8493254, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.32999992, - "throttled": false, - "track": { - "id": "tr.3", - "lang": "tr", - "lang_name": "Turkish dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8659135&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774297514969&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAKqH1PxHOzFvYD0_VRpFJmy6mx9MvqTvtTA_9oN80CJbAiEAix8K45V87AhbENGduUjcs69-NfNUo5_x463C77mAvxg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dar", - "itag": 250, - "bitrate": 76615, - "average_bitrate": 68404, - "size": 8659135, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012701, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -2.3899994, - "throttled": false, - "track": { - "id": "ar.3", - "lang": "ar", - "lang_name": "Arabic dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8681306&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774348334857&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAOzQAGumDVtoVpUbieppdY0TDkl1OWN1GLxRoXX1XbH4AiAmh7DVhcV9usNSEZebAkLYWI5N0-RsZ0QKIlOyfknvkg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Did", - "itag": 250, - "bitrate": 78584, - "average_bitrate": 68582, - "size": 8681306, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.03999996, - "throttled": false, - "track": { - "id": "id.3", - "lang": "id", - "lang_name": "Indonesian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8715674&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774592015544&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAPX-PNJHxliWbpT8dILCbb8WoH3u8d27-wk7KF8LMKorAiBcexdzFZMXuvNehMvRmT65YbYIyKDy69266_K8_FQBcQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dth", - "itag": 250, - "bitrate": 76468, - "average_bitrate": 68853, - "size": 8715674, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.22000027, - "throttled": false, - "track": { - "id": "th.3", - "lang": "th", - "lang_name": "Thai dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=8738381&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=250&keepalive=yes&lmt=1683774258283594&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAOUhgcveQ7mGrVdAXoCS0slCPEg4Qy5ap3dAt3pa7ukIAiEA2mRmaWJkNROlcSLdHCM2v406QJCzXNa8PNCd_w_wOoE%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dhi", - "itag": 250, - "bitrate": 77674, - "average_bitrate": 69033, - "size": 8738381, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.029999733, - "throttled": false, - "track": { - "id": "hi.3", - "lang": "hi", - "lang_name": "Hindi dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390756&dur=1012.738&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774123850152&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wQwIfanR5MDfThXbzwwnx1ZgMfxJdKsQyIm-3FOPnm3qiRQIgO8QOe0bkSlF7oL90wFDEKBszM8wdUO3hL9pL6tDYd5M%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dar", - "itag": 140, - "bitrate": 131460, - "average_bitrate": 129476, - "size": 16390756, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012738, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": -2.3899994, - "throttled": false, - "track": { - "id": "ar.3", - "lang": "ar", - "lang_name": "Arabic dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390756&dur=1012.738&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774146493742&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAJVVqcgdz9h3fc-XjCR3X5oJJdkZUcQseDrb7sHMivZtAiEA5V14Y_Stev1JMhZ2aLCAg8rDXj4MSkVY6lfvfKFOpJ8%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dru", - "itag": 140, - "bitrate": 131354, - "average_bitrate": 129476, - "size": 16390756, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012738, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.0, - "throttled": false, - "track": { - "id": "ru.3", - "lang": "ru", - "lang_name": "Russian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16391507&dur=1012.784&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774228379420&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgQkP5YlobtvjMbbkF4Rf82wJr7_ko70HuFs9tbWjnUZECIG2dUQscPOFr9fOsSBgRzPvFOu10m4mjI8Elg0SU7qv-&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dtr", - "itag": 140, - "bitrate": 131377, - "average_bitrate": 129476, - "size": 16391507, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012784, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.32999992, - "throttled": false, - "track": { - "id": "tr.3", - "lang": "tr", - "lang_name": "Turkish dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16391530&dur=1012.784&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774356300589&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhALF8ZTztjqOF6rO5_MibY-F8-zLpwgWyMw-_WgEICW8RAiEAps0EZ_2x7g83f2CuoRuWIIGzw9hNQ7YVirbe-4imB94%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dvi", - "itag": 140, - "bitrate": 131428, - "average_bitrate": 129477, - "size": 16391530, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012784, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.23999977, - "throttled": false, - "track": { - "id": "vi.3", - "lang": "vi", - "lang_name": "Vietnamese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390259&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774635042742&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgOlIVxx0AC4wowbBpyQ89y2jppeCWMxdZ3LVbCG9rQd4CIGyEC05PE-_FM7TSttWlFTKgiNkA8jnJSNtf9D_4XjAG&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Did", - "itag": 140, - "bitrate": 131352, - "average_bitrate": 129478, - "size": 16390259, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.05000019, - "throttled": false, - "track": { - "id": "id.3", - "lang": "id", - "lang_name": "Indonesian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390265&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774257753534&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhANeDj-p5NoubthSkV7E2a7YuHIeby3bpFex8RXjg4ZzeAiEAi83NgX8Yf8beGebB0OjdfilxDu0pUWhzwTtl0Hyjm9I%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dth", - "itag": 140, - "bitrate": 131370, - "average_bitrate": 129478, - "size": 16390265, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": -0.22000027, - "throttled": false, - "track": { - "id": "th.3", - "lang": "th", - "lang_name": "Thai dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390328&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774284010544&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgDZjsfx5XXux6JJBpb2cSCdXVfkrEUUtJkwgmUcW3Q70CIQC9vsH4-3EPqdpXp8e6a49Ymo-ABJ0qPMZXaGhN7RsQ7A%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Des", - "itag": 140, - "bitrate": 131442, - "average_bitrate": 129479, - "size": 16390328, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.0, - "throttled": false, - "track": { - "id": "es.3", - "lang": "es", - "lang_name": "Spanish dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390322&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774247299153&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAK7dNFuJ-OabRdLYzssZBxeK5fvEwzbgzb5mvFUIYHLlAiEAxAXXgUO2Es4XwAdDahE6ZTgL_5F_vBA9GIOqsTEM-A8%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dja", - "itag": 140, - "bitrate": 131470, - "average_bitrate": 129479, - "size": 16390322, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.010000229, - "throttled": false, - "track": { - "id": "ja.3", - "lang": "ja", - "lang_name": "Japanese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390327&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774270027380&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhALW_gPmGkDROPn1a2dt-zyB1QqhQURdAkTEmn1cfudK8AiEA35nSRSAty0D_5AQfWobLi2bFqiy1sPRpkoBeFiycMEg%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dko", - "itag": 140, - "bitrate": 131400, - "average_bitrate": 129479, - "size": 16390327, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.19999981, - "throttled": false, - "track": { - "id": "ko.3", - "lang": "ko", - "lang_name": "Korean dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390295&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774202026700&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgTAu0TTw0Wh26pTDuDZPPbfN-qdra_boIpasoKyULttQCIQD6yd5QpMAMxkDLeR2bKeZ9cxYDM8dH_qELj1xfvdPoQw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dpt", - "itag": 140, - "bitrate": 131397, - "average_bitrate": 129479, - "size": 16390295, - "index_range": { - "start": 618, - "end": 1873 - }, - "init_range": { - "start": 0, - "end": 617 - }, - "duration_ms": 1012691, - "mime": "audio/mp4; codecs=\"mp4a.40.2\"", - "format": "m4a", - "codec": "mp4a", - "channels": 2, - "loudness_db": 0.0, - "throttled": false, - "track": { - "id": "pt.3", + "id": "pt.0", "lang": "pt", - "lang_name": "Portuguese dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Portuguese", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390526&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683774128511667&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgAgPM-BChAxZes5e0jzlrdDPSJ11uydb4BhzNo8tTCY0CIFtzLtVfBpirTVBWGe2LSLTfBF37BKYutO9x-8ldUZYD&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dhi", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16391144&dur=1012.761&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659767030418280&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgFTrEtuhAmy8tJEGWu_k2FbI-QB0Ys6-euyQ3l2iY6soCIQDfGPsfnU28_FZ481vecjq6euo9jVz852ianzbwsKsVdg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dfr", "itag": 140, - "bitrate": 131451, - "average_bitrate": 129480, - "size": 16390526, + "bitrate": 131374, + "average_bitrate": 129476, + "size": 16391144, "index_range": { - "start": 618, - "end": 1873 + "start": 632, + "end": 1887 }, "init_range": { "start": 0, - "end": 617 + "end": 631 }, - "duration_ms": 1012691, "mime": "audio/mp4; codecs=\"mp4a.40.2\"", "format": "m4a", "codec": "mp4a", - "channels": 2, - "loudness_db": -0.029999733, "throttled": false, "track": { - "id": "hi.3", - "lang": "hi", - "lang_name": "Hindi dubbed", - "is_default": false, - "track_type": "dubbed" + "id": "fr.0", + "lang": "fr", + "lang_name": "French", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390508&dur=1012.691&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683782363698612&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAMgM470I-QXq4lTRuPtXf5UInHB_tG0tTGXRhVZ6nwImAiEAn0JYRknq5dtTwcmzZheekxVOZKhZ2Rpxc_UyvX2CMRY%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16391144&dur=1012.761&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659767036023479&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhANXyWvfbULFu_TvVuqgI-gzDBJgAZXnXRlm2G3upjb47AiBkn1qJ1BOvyUqSZ91H57aisxE2Y9eRFSiy92TD4pfa0Q%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dpt", + "itag": 140, + "bitrate": 131489, + "average_bitrate": 129476, + "size": 16391144, + "index_range": { + "start": 632, + "end": 1887 + }, + "init_range": { + "start": 0, + "end": 631 + }, + "mime": "audio/mp4; codecs=\"mp4a.40.2\"", + "format": "m4a", + "codec": "mp4a", + "throttled": false, + "track": { + "id": "pt.0", + "lang": "pt", + "lang_name": "Portuguese", + "is_default": false + } + }, + { + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390769&dur=1012.738&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659767030572994&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wQwIgKW3Mpdik72We2u2IutJYkJuD0gHpefwSu1uBsj_VCJ4CHxRZjGRhFnn70id5yBXLH-lEqxIQubxwcD7wSohaOns%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dru", + "itag": 140, + "bitrate": 131362, + "average_bitrate": 129476, + "size": 16390769, + "index_range": { + "start": 632, + "end": 1887 + }, + "init_range": { + "start": 0, + "end": 631 + }, + "mime": "audio/mp4; codecs=\"mp4a.40.2\"", + "format": "m4a", + "codec": "mp4a", + "throttled": false, + "track": { + "id": "ru.0", + "lang": "ru", + "lang_name": "Russian", + "is_default": false + } + }, + { + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390216&dur=1012.691&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659767056863171&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAN1cxya7BwvrNImk5iv4JjUzRyRBq5-BDASnSzWpvcnGAiALNym4npHgJO2OnxIXTQ45dgxKpcr0kH3IaBRdTowcQQ%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Des", "itag": 140, "bitrate": 131424, - "average_bitrate": 129480, - "size": 16390508, + "average_bitrate": 129478, + "size": 16390216, "index_range": { - "start": 618, - "end": 1873 + "start": 632, + "end": 1887 }, "init_range": { "start": 0, - "end": 617 + "end": 631 }, - "duration_ms": 1012691, "mime": "audio/mp4; codecs=\"mp4a.40.2\"", "format": "m4a", "codec": "mp4a", - "channels": 2, - "loudness_db": 2.8500004, "throttled": false, "track": { - "id": "en-US.4", - "lang": "en-US", - "lang_name": "English (United States) original", - "is_default": true, - "track_type": "original" + "id": "es.0", + "lang": "es", + "lang_name": "Spanish", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=974435&dur=60.139&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=140&keepalive=yes&lmt=1683773999871168&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAM8CiLR9cWKK0bNXi94LSP507keLjhYqj-QVJ7yciDY-AiEApa5peClRS2uesRzXdlJfpuX9jEj_tBf1C85tEjcF1Sk%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dfr", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16390628&dur=1012.691&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=140&keepalive=yes&lmt=1659766154827884&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fmp4&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgc8oxPEHDO0cgO3ZcbPmv3nrkzfy52WchpV0HcBcUw24CIEFxLKBcM4vVqGeRkt581dFL2tetvHd93SHCTVEUnIn_&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den", "itag": 140, - "bitrate": 131206, - "average_bitrate": 129624, - "size": 974435, + "bitrate": 131433, + "average_bitrate": 129481, + "size": 16390628, "index_range": { - "start": 618, - "end": 733 + "start": 632, + "end": 1887 }, "init_range": { "start": 0, - "end": 617 + "end": 631 }, - "duration_ms": 60139, "mime": "audio/mp4; codecs=\"mp4a.40.2\"", "format": "m4a", "codec": "mp4a", - "channels": 2, - "loudness_db": 0.47000027, "throttled": false, "track": { - "id": "fr.3", - "lang": "fr", - "lang_name": "French dubbed", - "is_default": false, - "track_type": "dubbed" + "id": "en.0", + "lang": "en", + "lang_name": "English", + "is_default": true } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=940286&dur=60.101&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774002236584&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAIUUin7WZBnoVDb2p0wuTPc7HZwbF8I5sxzLrVN9WeBwAiBQTZwhxCQ1IdrUkkD1-cSGYBtMF1aKkjPZ-LWeie0aZA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dfr", - "itag": 251, - "bitrate": 133120, - "average_bitrate": 125160, - "size": 940286, - "index_range": { - "start": 259, - "end": 373 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 60101, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.46000004, - "throttled": false, - "track": { - "id": "fr.3", - "lang": "fr", - "lang_name": "French dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104136&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683782301237288&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIhAPcUhhfkNVA_JcdU6KLTOFjRCnNl6n8gamJA-Q0PgCpIAiBTMV2k2JfHzbHBtsHxuNW7zHvSaYaUbz-dEIQC45o1eA%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Doriginal%3Alang%3Den-US", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16104134&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767097097120&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgW4IxGJJFRAwZefvDdDkJfjhN7y3bPmh96BCFuyFn6pwCIQDW6pVnk_DwMC3FcZy5rXNUULMNWLdadScxwuhFTFR84g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Den", "itag": 251, "bitrate": 139540, "average_bitrate": 127222, - "size": 16104136, + "size": 16104134, "index_range": { "start": 266, "end": 1996 @@ -1707,27 +882,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 2.8500004, "throttled": false, "track": { - "id": "en-US.4", - "lang": "en-US", - "lang_name": "English (United States) original", - "is_default": true, - "track_type": "original" + "id": "en.0", + "lang": "en", + "lang_name": "English", + "is_default": true } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16172620&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774239240001&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgG4vKZds_xbVFoiERAwSTUOS9Y2czcxrSnGutlEbeIt8CIQChci9XqI9w0kkMckgnwpjVk0o0md6ZJebwlbxfh_cxGg%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Des", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16173831&dur=1012.661&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767030316577&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIhANpBdWMzUZPSAUKr8C4h14Nh2l_V-B0lBJljV-w40XbDAh91bkDc3H025IFyGbKZQbShgqstZOSRe3AI-hTYHX74&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Des", "itag": 251, - "bitrate": 142399, - "average_bitrate": 127763, - "size": 16172620, + "bitrate": 142029, + "average_bitrate": 127772, + "size": 16173831, "index_range": { "start": 266, "end": 1996 @@ -1736,27 +907,23 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "es.3", + "id": "es.0", "lang": "es", - "lang_name": "Spanish dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Spanish", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16273626&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774141188913&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRQIgeOZsp58P_XkwS-3eh5icSEpAnFna2bdZYpus-lSKHqcCIQDXm3A2ITEfj4tmxAOEtukH93HXF3rE5x0zj-b2OHAAMw%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dpt", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16303396&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767030204303&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRAIgCRDUBzurQtw78ikEpSMCylA6fOCD8siwN3nlAulHsfkCIFgnZ9lhmqNfrYftjUFYhrL9GKqy-C1SxX3Yj5utvvem&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dpt", "itag": 251, - "bitrate": 149345, - "average_bitrate": 128561, - "size": 16273626, + "bitrate": 145195, + "average_bitrate": 128788, + "size": 16303396, "index_range": { "start": 266, "end": 1996 @@ -1765,27 +932,48 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "pt.3", + "id": "pt.0", "lang": "pt", - "lang_name": "Portuguese dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Portuguese", + "is_default": false } }, { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16309690&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774201612138&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgXxDJSDmUwzGJgZ8tQyZdOwQlvncTF3gZvwxFumOOYuoCIDSKOA_ceWGaWJxm068JlEqb2QZE-wskq6z9R6bm7raJ&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dja", + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16357630&dur=1012.721&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767033119964&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIhAKtzVVyoS46hkuKX31EyUE6X6Q5wotcToOCnYKswX3x_AiB0G2SUdVoso39bYgewd3zT8Pf77DrVtahXh4kVb46T9g%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dfr", "itag": 251, - "bitrate": 148909, - "average_bitrate": 128846, - "size": 16309690, + "bitrate": 152389, + "average_bitrate": 129217, + "size": 16357630, + "index_range": { + "start": 259, + "end": 1989 + }, + "init_range": { + "start": 0, + "end": 258 + }, + "mime": "audio/webm; codecs=\"opus\"", + "format": "webm", + "codec": "opus", + "throttled": false, + "track": { + "id": "fr.0", + "lang": "fr", + "lang_name": "French", + "is_default": false + } + }, + { + "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16395805&dur=1012.701&ei=498HY6KvArqM6dsPiN6QgAE&expire=1661482051&fexp=24001373%2C24007246&fvip=2&gir=yes&id=o-AK8GbbQovVxldcBz4pkXu4EA9N2sU-4yPPa5hFT3bXta&initcwndbps=1392500&ip=2003%3Ade%3Aaf1e%3A8a00%3A84c6%3A28f3%3A9de2%3A464&itag=251&keepalive=yes&lmt=1659767045309297&lsig=AG3C_xAwRAIgLFPuLqOoHoNQax15AE9Q2YIZ7pM7-olbGWgYGv1MDccCIADKSc_HeOdmD7CDs4AkY5ZtWF4gdZd4rw99Cqlzakbk&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1661460078&mv=m&mvi=4&n=LwUYrFgbIVPzmA&ns=bBqoZtLH6lsaX8ke0xgRMM8H&pl=37&rbqsm=fr&requiressl=yes&sig=AOq0QJ8wRQIgZEM5KWfik0JpS3ss9jNMTPY-iNi-LH0opwLwe4PlRusCIQCB4W1brmFsbmAM62FM21U5ZljqnYlnW3lT-9otjFlL7w%3D%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=lT-Khmjdu08WYG7DxAg_8xq0R2u5a6w&txp=4532434&vprv=1&xtags=lang%3Dru", + "itag": 251, + "bitrate": 147725, + "average_bitrate": 129521, + "size": 16395805, "index_range": { "start": 266, "end": 1996 @@ -1794,323 +982,87 @@ "start": 0, "end": 265 }, - "duration_ms": 1012661, "mime": "audio/webm; codecs=\"opus\"", "format": "webm", "codec": "opus", - "channels": 2, - "loudness_db": 0.0, "throttled": false, "track": { - "id": "ja.3", - "lang": "ja", - "lang_name": "Japanese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16406377&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774182484168&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgV_085hjjR501_w5qnEorlFTYW7edYPRWPumTUphUlJ8CICz89tkm-TvGb6xOY6mLDM9gLQvWqQW4LNGjLHE16USh&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dru", - "itag": 251, - "bitrate": 148233, - "average_bitrate": 129604, - "size": 16406377, - "index_range": { - "start": 266, - "end": 1996 - }, - "init_range": { - "start": 0, - "end": 265 - }, - "duration_ms": 1012701, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.0, - "throttled": false, - "track": { - "id": "ru.3", + "id": "ru.0", "lang": "ru", - "lang_name": "Russian dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16437242&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774312098922&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAOy0wyTuoLcKSjmtm8mFU076qnuM-PflNbMh1G8YvwPjAiEAuXhOfAH7MfBkgVTbCK8VXV8T0oBfGmhAeiOOXUEaOdQ%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dko", - "itag": 251, - "bitrate": 147336, - "average_bitrate": 129853, - "size": 16437242, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.19999981, - "throttled": false, - "track": { - "id": "ko.3", - "lang": "ko", - "lang_name": "Korean dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16503759&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774452750409&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgZ9I1Exp2E_Yz2h3Y3resoex9xjX4qKxuLaeSA4LOT0oCICEOkfSfZWVN9gIPTv_u2QsuLYaKdJR5QbF8l_RKwRrR&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dvi", - "itag": 251, - "bitrate": 156644, - "average_bitrate": 130369, - "size": 16503759, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.23999977, - "throttled": false, - "track": { - "id": "vi.3", - "lang": "vi", - "lang_name": "Vietnamese dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16595154&dur=1012.741&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774305565612&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhALmBI5BItjBxGA38fu01UiqEsyfj0GYhryI92fjJqHznAiEAjAALeoI0QriCyzgnGAIoQLiYXB6aqa2cVCFzuzaAxng%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dtr", - "itag": 251, - "bitrate": 149448, - "average_bitrate": 131091, - "size": 16595154, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012741, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.32999992, - "throttled": false, - "track": { - "id": "tr.3", - "lang": "tr", - "lang_name": "Turkish dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16782431&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774591808718&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRAIgEE8fki4wbboBeQKe2fPD7lsLdhfEIZYzc0eUYFXUOK4CIBfRgCpPUW4KKfUXn6_xMUFgHEnicCtFTwjDtjpwEiqw&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dth", - "itag": 251, - "bitrate": 149351, - "average_bitrate": 132580, - "size": 16782431, - "index_range": { - "start": 259, - "end": 1989 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.22000027, - "throttled": false, - "track": { - "id": "th.3", - "lang": "th", - "lang_name": "Thai dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16908426&dur=1012.701&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774297518607&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAP6XUiAQEuUJ2R3pUSEOufTqB1-44vM3g56El1_JPPSkAiEAwiFctjZJ1UI80Mdyvl90eVb0pm9UdNnfikpc_ytFhSc%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dar", - "itag": 251, - "bitrate": 150531, - "average_bitrate": 133570, - "size": 16908426, - "index_range": { - "start": 259, - "end": 1990 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012701, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -2.3899994, - "throttled": false, - "track": { - "id": "ar.3", - "lang": "ar", - "lang_name": "Arabic dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=16914299&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774258129207&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhAK5P0ty7iw3jrkPX_jcgrlBm03_kTnBpTDjt5XEoqKVkAiEAoAXxjEi9pO1ZLG92AheS0FTSd4L6ZZhV5GLSUWsDXIE%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Dhi", - "itag": 251, - "bitrate": 150421, - "average_bitrate": 133622, - "size": 16914299, - "index_range": { - "start": 259, - "end": 1990 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": -0.029999733, - "throttled": false, - "track": { - "id": "hi.3", - "lang": "hi", - "lang_name": "Hindi dubbed", - "is_default": false, - "track_type": "dubbed" - } - }, - { - "url": "https://rr4---sn-h0jeener.googlevideo.com/videoplayback?c=WEB&clen=17006899&dur=1012.661&ei=6OtcZNqtBdOi7gP1upHYCQ&expire=1683832904&fexp=24007246&fvip=2&gir=yes&id=o-ABVtPh3j24hkJeXp8igjvreyODn-oV0CacOqb7pDjJoG&initcwndbps=1720000&ip=2003%3Ade%3Aaf31%3A5200%3A791a%3A897%3Ac15c%3Aae59&itag=251&keepalive=yes&lmt=1683774349365634&lsig=AG3C_xAwRQIgC7HZtYuc6dI92m6wCcoXYpdzSpVtPTIbO7jBKGpUrYMCIQCc0WNtFvN8Awqx9uuRVp5SUSe3rOt2D7M-rCKpgVv_0A%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&mh=wB&mime=audio%2Fwebm&mm=31%2C29&mn=sn-h0jeener%2Csn-h0jeln7l&ms=au%2Crdu&mt=1683811031&mv=m&mvi=4&n=U8mCOo4eYD4n0A&ns=LToEdXWVFHcH53e3aTe1N7kN&pl=37&requiressl=yes&sig=AOq0QJ8wRgIhALICU7eDcDhm4CJCG2onLBNBvFnx0esdDH892bit1mg1AiEA-lPYQY5tWdMCXj-UDD2v3TyUJ3kuBvnh_K3FjkVwIz4%3D&source=youtube&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cxtags%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&spc=qEK7B81AP536F3aOi5JzMyLCUDiktWigtEpf9nI2xg&svpuc=1&txp=4532434&vprv=1&xtags=acont%3Ddubbed%3Alang%3Did", - "itag": 251, - "bitrate": 156919, - "average_bitrate": 134354, - "size": 17006899, - "index_range": { - "start": 259, - "end": 1991 - }, - "init_range": { - "start": 0, - "end": 258 - }, - "duration_ms": 1012661, - "mime": "audio/webm; codecs=\"opus\"", - "format": "webm", - "codec": "opus", - "channels": 2, - "loudness_db": 0.03999996, - "throttled": false, - "track": { - "id": "id.3", - "lang": "id", - "lang_name": "Indonesian dubbed", - "is_default": false, - "track_type": "dubbed" + "lang_name": "Russian", + "is_default": false } } ], "subtitles": [ { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=ar", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=ar", "lang": "ar", "lang_name": "Arabic", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=zh-Hant", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=zh-Hant", "lang": "zh-Hant", "lang_name": "Chinese (Traditional)", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&kind=asr&lang=en", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&kind=asr&lang=en", "lang": "en", "lang_name": "English", "auto_generated": true }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=en-US", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=en-US", "lang": "en-US", "lang_name": "English (United States)", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=fr", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=fr", "lang": "fr", "lang_name": "French", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=de", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=de", "lang": "de", "lang_name": "German", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=hi", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=hi", "lang": "hi", "lang_name": "Hindi", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=ja", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=ja", "lang": "ja", "lang_name": "Japanese", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=ko", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=ko", "lang": "ko", "lang_name": "Korean", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=pt-BR", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=pt-BR", "lang": "pt-BR", "lang_name": "Portuguese (Brazil)", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=ru", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=ru", "lang": "ru", "lang_name": "Russian", "auto_generated": false }, { - "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&opi=112496729&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1683836504&sparams=ip,ipbits,expire,v,caps,opi,xoaf&signature=41CBFC1E137A939274C980CEA38500AB72760AC4.96803D0F64B42001D73C1897234E1C75FE528F10&key=yt8&lang=es-419", + "url": "https://www.youtube.com/api/timedtext?v=tVWWp1PqDus&caps=asr&xoaf=5&hl=en&ip=0.0.0.0&ipbits=0&expire=1661485651&sparams=ip,ipbits,expire,v,caps,xoaf&signature=3093423A0F5435651253D036B9DD393187B769F0.EA07522F077826AD35561DF31A1EFD47BAE6178A&key=yt8&lang=es-419", "lang": "es-419", "lang_name": "Spanish (Latin America)", "auto_generated": false @@ -2118,7 +1070,5 @@ ], "expires_in_seconds": 21540, "hls_manifest_url": null, - "dash_manifest_url": null, - "preview_frames": [], - "visitor_data": "CgtGWDFCUllrcTdxayjo1_OiBg%3D%3D" + "dash_manifest_url": null } diff --git a/tests/youtube.rs b/tests/youtube.rs index 5efdacf..928206d 100644 --- a/tests/youtube.rs +++ b/tests/youtube.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; +use std::collections::HashSet; use std::fmt::Display; use std::str::FromStr; use rstest::{fixture, rstest}; use rustypipe::model::paginator::ContinuationEndpoint; -use rustypipe::param::{ChannelOrder, ChannelVideoTab, Language}; +use rustypipe::param::Language; use rustypipe::validate; use time::macros::date; use time::OffsetDateTime; @@ -15,8 +15,8 @@ use rustypipe::model::{ paginator::Paginator, richtext::ToPlaintext, traits::{FromYtItem, YtStream}, - AlbumType, AudioCodec, AudioFormat, AudioTrackType, Channel, Frameset, MusicGenre, - MusicItemType, UrlTarget, Verification, VideoCodec, VideoFormat, YouTubeItem, + AlbumType, AudioCodec, AudioFormat, Channel, MusicGenre, MusicItemType, UrlTarget, + Verification, VideoCodec, VideoFormat, YouTubeItem, }; use rustypipe::param::{ search_filter::{self, SearchFilter}, @@ -265,33 +265,18 @@ fn get_player( stream .track .as_ref() - .map(|t| (t.lang.as_deref().unwrap(), t.track_type.unwrap())) + .map(|t| t.lang.as_ref().unwrap().to_owned()) }) - .collect::>(); + .collect::>(); - assert_eq!( - langs.get("en-US"), - Some(&AudioTrackType::Original), - "missing lang: en-US" - ); - - for l in ["es", "fr", "pt", "ru"] { - assert_eq!( - langs.get(l), - Some(&AudioTrackType::Dubbed), - "missing lang: {l}" - ); + for l in ["en", "es", "fr", "pt", "ru"] { + assert!(langs.contains(l), "missing lang: {l}"); } } _ => {} }; assert_gte(player_data.expires_in_seconds, 10_000, "expiry time"); - - if !is_live { - assert_gte(player_data.preview_frames.len(), 3, "preview framesets"); - player_data.preview_frames.iter().for_each(assert_frameset); - } } #[rstest] @@ -794,11 +779,8 @@ fn channel_videos(rp: RustyPipe) { #[rstest] fn channel_shorts(rp: RustyPipe) { - let channel = tokio_test::block_on( - rp.query() - .channel_videos_tab("UCh8gHdtzO2tXd593_bjErWg", ChannelVideoTab::Shorts), - ) - .unwrap(); + let channel = + tokio_test::block_on(rp.query().channel_shorts("UCh8gHdtzO2tXd593_bjErWg")).unwrap(); // dbg!(&channel); assert_eq!(channel.id, "UCh8gHdtzO2tXd593_bjErWg"); @@ -827,11 +809,8 @@ fn channel_shorts(rp: RustyPipe) { #[rstest] fn channel_livestreams(rp: RustyPipe) { - let channel = tokio_test::block_on( - rp.query() - .channel_videos_tab("UC2DjFE7Xf11URZqWBigcVOQ", ChannelVideoTab::Live), - ) - .unwrap(); + let channel = + tokio_test::block_on(rp.query().channel_livestreams("UC2DjFE7Xf11URZqWBigcVOQ")).unwrap(); // dbg!(&channel); assert_channel_eevblog(&channel); @@ -976,63 +955,6 @@ fn channel_more( assert_channel(&channel_info, id, name, unlocalized || name_unlocalized); } -#[rstest] -#[case::videos("UCcdwLMPsaU2ezNSJU1nFoBQ", ChannelVideoTab::Videos, "XqZsoesa55w")] -#[case::shorts("UCcdwLMPsaU2ezNSJU1nFoBQ", ChannelVideoTab::Shorts, "k91vRvXGwHs")] -#[case::live("UCvqRdlKsE5Q8mf8YXbdIJLw", ChannelVideoTab::Live, "ojes5ULOqhc")] -fn channel_order( - #[case] id: &str, - #[case] tab: ChannelVideoTab, - #[case] most_popular: &str, - rp: RustyPipe, -) { - let latest = tokio_test::block_on(rp.query().channel_videos_tab_order( - id, - tab, - ChannelOrder::Latest, - )) - .unwrap(); - // Upload dates should be in descending order - if tab != ChannelVideoTab::Shorts { - let mut latest_items = latest.items.iter().peekable(); - while let (Some(v), Some(next_v)) = (latest_items.next(), latest_items.peek()) { - if !v.is_upcoming && !v.is_live && !next_v.is_upcoming && !next_v.is_live { - assert_gte( - v.publish_date.unwrap(), - next_v.publish_date.unwrap(), - "latest video date", - ); - } - } - } - assert_next(latest, rp.query(), 15, 2); - - let popular = tokio_test::block_on(rp.query().channel_videos_tab_order( - id, - tab, - ChannelOrder::Popular, - )) - .unwrap(); - // Most popular video should be in top 5 - assert!( - popular.items.iter().take(5).any(|v| v.id == most_popular), - "most popular video {most_popular} not found" - ); - - // View counts should be in descending order - if tab != ChannelVideoTab::Shorts { - let mut popular_items = popular.items.iter().peekable(); - while let (Some(v), Some(next_v)) = (popular_items.next(), popular_items.peek()) { - assert_gte( - v.view_count.unwrap(), - next_v.view_count.unwrap(), - "most popular view count", - ); - } - } - assert_next(popular, rp.query(), 15, 2); -} - #[rstest] #[case::not_exist("UCOpNcN46UbXVtpKMrmU4Abx")] #[case::gaming("UCOpNcN46UbXVtpKMrmU4Abg")] @@ -1050,19 +972,6 @@ fn channel_not_found(#[case] id: &str, rp: RustyPipe) { ); } -#[rstest] -#[case::shorts(ChannelVideoTab::Shorts)] -#[case::live(ChannelVideoTab::Live)] -fn channel_tab_not_found(#[case] tab: ChannelVideoTab, rp: RustyPipe) { - let channel = tokio_test::block_on( - rp.query() - .channel_videos_tab("UCGiJh0NZ52wRhYKYnuZI08Q", tab), - ) - .unwrap(); - - assert!(channel.content.is_empty(), "got: {:?}", channel.content); -} - //#CHANNEL_RSS #[cfg(feature = "rss")] @@ -1177,8 +1086,12 @@ fn search_suggestion(rp: RustyPipe) { #[rstest] fn search_suggestion_empty(rp: RustyPipe) { - let result = - tokio_test::block_on(rp.query().search_suggestion("fjew327p4ifjelwfvnewg49")).unwrap(); + let result = tokio_test::block_on( + rp.query() + .lang(Language::Th) + .search_suggestion("fjew327p4ifjelwfvnewg49"), + ) + .unwrap(); assert!(result.is_empty()); } @@ -2327,7 +2240,7 @@ fn assert_approx(left: f64, right: f64) { /// Assert that number A is greater than or equal to number B fn assert_gte(a: T, b: T, msg: &str) { - assert!(a >= b, "expected >= {b} {msg}, got {a}"); + assert!(a >= b, "expected {b} {msg}, got {a}"); } /// Assert that the paginator produces at least n pages @@ -2380,15 +2293,3 @@ fn assert_album_id(id: &str) { fn assert_playlist_id(id: &str) { assert!(validate::playlist_id(id), "invalid playlist id: `{id}`"); } - -fn assert_frameset(frameset: &Frameset) { - assert_gte(frameset.frame_height, 20, "frame height"); - assert_gte(frameset.frame_height, 20, "frame width"); - assert_gte(frameset.page_count, 1, "page count"); - assert_gte(frameset.total_count, 50, "total count"); - assert_gte(frameset.frames_per_page_x, 5, "frames per page x"); - assert_gte(frameset.frames_per_page_y, 5, "frames per page y"); - - let n = frameset.urls().count() as u32; - assert_eq!(n, frameset.page_count); -}