public override List <String> GetMultipleVideoUrls(VideoInfo video, bool inPlaylist = false) { List <string> result = new List <string>(); string data = GetWebData(video.VideoUrl); if (!string.IsNullOrEmpty(data)) { data = data.Replace("&", "&"); data = data.Replace("&", "&"); foreach (RssItem item in RssToolkit.Rss.RssDocument.Load(data).Channel.Items) { PlaybackOptions vidopts = getPlaybackOptions(item.MediaGroups[0].MediaContents[0].Url); Log.Debug("Load: " + item.Title); if (video.PlaybackOptions == null) { video.PlaybackOptions = vidopts.videoSrc; if (retrieveSubtitles) { video.SubtitleText = Helpers.SubtitleUtils.Webvtt2SRT(GetWebData(vidopts.subtitleSrc["vtt"])); } } result.Add(item.MediaGroups[0].MediaContents[0].Url); } } return(result); }
PlaybackOptions getPlaybackOptions(string videoUrl) { string data = GetWebData(videoUrl); XmlDocument doc = new XmlDocument(); doc.LoadXml(data); PlaybackOptions vidopts = new PlaybackOptions(); XmlNodeList list = doc.SelectNodes("//rendition"); XmlNodeList sublist = doc.SelectNodes("//typographic"); foreach (XmlNode subtitle in sublist) { string subFormat = subtitle.Attributes["format"].Value; string subSrc = subtitle.Attributes["src"].Value; vidopts.subtitleSrc.Add(subFormat, subSrc); Log.Debug("Subtitle url: " + subFormat + " : " + subSrc); } for (int i = list.Count - 1; i >= 0; i--) { Log.Debug("Get resolution information " + i.ToString()); string bitrate = list[i].Attributes["bitrate"].Value; string videoType = list[i].Attributes["type"].Value.Replace(@"video/", String.Empty); string url = list[i].FirstChild.InnerText; string resolution = ""; Regex resRegex = new Regex(@"_([\d]+x[\d]+)_"); Match m = resRegex.Match(url); if (m.Success) { resolution = m.Groups[1].Captures[0].Value; } url = url.Replace(@"viacomccstrmfs.fplive.net/viacomccstrm", @"viacommtvstrmfs.fplive.net/viacommtvstrm"); string br = bitrate + "K " + resolution + " " + videoType; if (!vidopts.videoSrc.ContainsKey(br)) { vidopts.videoSrc.Add(br, new MPUrlSourceFilter.RtmpUrl(url) { SwfVerify = false, SwfUrl = null }.ToString()); } } return(vidopts); }
public override string GetPlaylistItemVideoUrl(VideoInfo clonedVideoInfo, string chosenPlaybackOption, bool inPlaylist = false) { if (String.IsNullOrEmpty(chosenPlaybackOption)) { return(clonedVideoInfo.VideoUrl); } PlaybackOptions options = getPlaybackOptions(clonedVideoInfo.VideoUrl); //set subtitle for part if (retrieveSubtitles) { clonedVideoInfo.SubtitleText = Helpers.SubtitleUtils.Webvtt2SRT(GetWebData(options.subtitleSrc["vtt"])); } if (options.videoSrc.ContainsKey(chosenPlaybackOption)) { return(options.videoSrc[chosenPlaybackOption]); } var enumerator = options.videoSrc.GetEnumerator(); enumerator.MoveNext(); return(enumerator.Current.Value); }
PlaybackOptions getPlaybackOptions(string videoUrl) { string data = GetWebData(videoUrl); XmlDocument doc = new XmlDocument(); doc.LoadXml(data); PlaybackOptions vidopts = new PlaybackOptions(); XmlNodeList list = doc.SelectNodes("//src"); XmlNodeList sublist = doc.SelectNodes("//typographic"); foreach (XmlNode subtitle in sublist) { string subFormat = subtitle.Attributes["format"].Value; string subSrc = subtitle.Attributes["src"].Value; Log.Debug("Subtitle url: " + subFormat + " : " + subSrc); vidopts.subtitleSrc.Add(subFormat, subSrc); } for (int i = list.Count-1; i >=0 ; i--) { string bitrate = list[i].ParentNode.Attributes["bitrate"].Value; string videoType = list[i].ParentNode.Attributes["type"].Value.Replace(@"video/", String.Empty); string url = list[i].InnerText; string resolution = ""; Regex resRegex = new Regex(@"_([\d]+x[\d]+)_"); Match m = resRegex.Match(url); if (m.Success) resolution = m.Groups[1].Captures[0].Value; url = url.Replace(@"viacomccstrmfs.fplive.net/viacomccstrm", @"viacommtvstrmfs.fplive.net/viacommtvstrm"); string br = bitrate + "K " + resolution + " " + videoType; if (!vidopts.videoSrc.ContainsKey(br)) vidopts.videoSrc.Add(br, new MPUrlSourceFilter.RtmpUrl(url) { SwfVerify = false, SwfUrl = null }.ToString()); } return vidopts; }