public override string GetVideoUrl(VideoInfo video)
        {
            if (video.PlaybackOptions == null)
            {
                video.PlaybackOptions = new Dictionary <string, string>();
            }
            video.PlaybackOptions.Clear();

            System.Net.CookieContainer container = new System.Net.CookieContainer();
            String baseWebData = GetWebData(video.VideoUrl, cookies: container, forceUTF8: true);

            String playlistSerializedUrl = String.Empty;

            if (this.currentCategory.Name == "Živě")
            {
                String serializedDataForPost = "playlist%5B0%5D%5Btype%5D=channel&playlist%5B0%5D%5Bid%5D=24&requestUrl=%2Fivysilani%2Fembed%2FiFramePlayerCT24.php&requestSource=iVysilani&addCommercials=1&type=flash";
                System.Collections.Specialized.NameValueCollection headers = new System.Collections.Specialized.NameValueCollection();

                headers.Add("Accept", "*/*");                                      // accept any content type
                headers.Add("User-Agent", OnlineVideoSettings.Instance.UserAgent); // set the default OnlineVideos UserAgent when none specified
                headers.Add("X-Requested-With", "XMLHttpRequest");
                headers.Add("x-addr", "127.0.0.1");

                playlistSerializedUrl = GetWebData("http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist", serializedDataForPost, container, video.VideoUrl, null, false, false, null, null, headers, false);
            }
            else
            {
                int start = baseWebData.IndexOf(CeskaTelevizeUtil.showEpisodePostStart);
                if (start >= 0)
                {
                    int end = baseWebData.IndexOf(CeskaTelevizeUtil.showEpisodePostEnd, start + CeskaTelevizeUtil.showEpisodePostStart.Length);
                    if (end >= 0)
                    {
                        String postData = baseWebData.Substring(start + CeskaTelevizeUtil.showEpisodePostStart.Length, end - start - CeskaTelevizeUtil.showEpisodePostStart.Length);
                        Newtonsoft.Json.Linq.JContainer playlistData = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(postData);

                        StringBuilder builder = new StringBuilder();
                        foreach (Newtonsoft.Json.Linq.JProperty child in playlistData.Children())
                        {
                            builder.AppendFormat("&playlist[0][{0}]={1}", child.Name, child.Value.ToString());
                        }
                        builder.AppendFormat("&requestUrl={0}&requestSource=iVysilani&addCommercials=1&type=flash", video.VideoUrl.Remove(0, CeskaTelevizeUtil.baseUrl.Length));

                        String serializedDataForPost = HttpUtility.UrlEncode(builder.ToString()).Replace("%3d", "=").Replace("%26", "&");
                        System.Collections.Specialized.NameValueCollection headers = new System.Collections.Specialized.NameValueCollection();

                        headers.Add("Accept", "*/*");                                      // accept any content type
                        headers.Add("User-Agent", OnlineVideoSettings.Instance.UserAgent); // set the default OnlineVideos UserAgent when none specified
                        headers.Add("X-Requested-With", "XMLHttpRequest");
                        headers.Add("x-addr", "127.0.0.1");

                        playlistSerializedUrl = GetWebData("http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist", serializedDataForPost, container, video.VideoUrl, null, false, false, null, null, headers, false);
                    }
                }
            }

            if (!String.IsNullOrWhiteSpace(playlistSerializedUrl))
            {
                Newtonsoft.Json.Linq.JContainer playlistJson = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(playlistSerializedUrl);

                String videoDataUrl = String.Empty;
                foreach (Newtonsoft.Json.Linq.JProperty child in playlistJson.Children())
                {
                    if (child.Name == "url")
                    {
                        videoDataUrl = child.Value.ToString().Replace("%26", "&");
                    }
                }

                String videoConfigurationSerialized = GetWebData(videoDataUrl);
                Newtonsoft.Json.Linq.JContainer videoConfiguration = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(videoConfigurationSerialized);

                String qualityUrl  = (String)((Newtonsoft.Json.Linq.JValue)((Newtonsoft.Json.Linq.JProperty)((Newtonsoft.Json.Linq.JArray)videoConfiguration["playlist"])[0]["streamUrls"].First).Value).Value;
                String qualityData = GetWebData(qualityUrl);

                String[] lines        = qualityData.Split(new Char[] { '\n' });
                int      lastBadwidth = -1;

                for (int i = 0; i < lines.Length; i++)
                {
                    String line = lines[i];

                    if (line == "#EXTM3U")
                    {
                        continue;
                    }
                    else
                    {
                        int bandwidthIndex = line.IndexOf("BANDWIDTH=");

                        if (bandwidthIndex == (-1))
                        {
                            // url line
                            video.PlaybackOptions.Add(String.Format("Bandwidth (quality) {0}", lastBadwidth), line);
                        }
                        else
                        {
                            lastBadwidth = int.Parse(line.Substring(bandwidthIndex + "BANDWIDTH=".Length));
                        }
                    }
                }
            }

            if (video.PlaybackOptions.Count > 0)
            {
                var enumer = video.PlaybackOptions.GetEnumerator();
                enumer.MoveNext();
                return(enumer.Current.Value);
            }

            return(String.Empty);
        }
Exemplo n.º 2
0
        public override string GetVideoUrl(VideoInfo video)
        {
            if (video.PlaybackOptions == null)
            {
                video.PlaybackOptions = new Dictionary <string, string>();
            }
            video.PlaybackOptions.Clear();

            System.Net.CookieContainer container = new System.Net.CookieContainer();
            String baseWebData = GetWebData(video.VideoUrl, cookies: container, forceUTF8: true);

            int start = baseWebData.IndexOf(CeskaTelevizeUtil.showEpisodePostStart);

            if (start >= 0)
            {
                int end = baseWebData.IndexOf(CeskaTelevizeUtil.showEpisodePostEnd, start + CeskaTelevizeUtil.showEpisodePostStart.Length);
                if (end >= 0)
                {
                    String postData = baseWebData.Substring(start + CeskaTelevizeUtil.showEpisodePostStart.Length, end - start - CeskaTelevizeUtil.showEpisodePostStart.Length);
                    Newtonsoft.Json.Linq.JContainer playlistData = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(postData);

                    StringBuilder builder = new StringBuilder();
                    foreach (Newtonsoft.Json.Linq.JProperty child in playlistData.Children())
                    {
                        builder.AppendFormat("&playlist[0][{0}]={1}", child.Name, child.Value.ToString());
                    }
                    builder.AppendFormat("&requestUrl={0}&requestSource=iVysilani&addCommercials=1&type=flash", video.VideoUrl.Remove(0, CeskaTelevizeUtil.baseUrl.Length));

                    String serializedDataForPost = HttpUtility.UrlEncode(builder.ToString()).Replace("%3d", "=").Replace("%26", "&");
                    String playlistSerializedUrl = CeskaTelevizeUtil.GetWebDataFromPost("http://www.ceskatelevize.cz/ivysilani/ajax/get-client-playlist", serializedDataForPost, container, video.VideoUrl);
                    Newtonsoft.Json.Linq.JContainer playlistJson = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(playlistSerializedUrl);

                    String videoDataUrl = String.Empty;
                    foreach (Newtonsoft.Json.Linq.JProperty child in playlistJson.Children())
                    {
                        if (child.Name == "url")
                        {
                            videoDataUrl = child.Value.ToString().Replace("%26", "&");
                        }
                    }

                    String videoConfigurationSerialized = GetWebData(videoDataUrl);
                    Newtonsoft.Json.Linq.JContainer videoConfiguration = (Newtonsoft.Json.Linq.JContainer)Newtonsoft.Json.JsonConvert.DeserializeObject(videoConfigurationSerialized);

                    String qualityUrl  = (String)((Newtonsoft.Json.Linq.JValue)((Newtonsoft.Json.Linq.JProperty)((Newtonsoft.Json.Linq.JArray)videoConfiguration["playlist"])[0]["streamUrls"].First).Value).Value;
                    String qualityData = GetWebData(qualityUrl);

                    String[] lines        = qualityData.Split(new Char[] { '\n' });
                    int      lastBadwidth = -1;

                    for (int i = 0; i < lines.Length; i++)
                    {
                        String line = lines[i];

                        if (line == "#EXTM3U")
                        {
                            continue;
                        }
                        else
                        {
                            int bandwidthIndex = line.IndexOf("BANDWIDTH=");

                            if (bandwidthIndex == (-1))
                            {
                                // url line
                                video.PlaybackOptions.Add(String.Format("Bandwidth (quality) {0}", lastBadwidth), line);
                            }
                            else
                            {
                                lastBadwidth = int.Parse(line.Substring(bandwidthIndex + "BANDWIDTH=".Length));
                            }
                        }
                    }
                }
            }

            if (video.PlaybackOptions.Count > 0)
            {
                var enumer = video.PlaybackOptions.GetEnumerator();
                enumer.MoveNext();
                return(enumer.Current.Value);
            }

            return(String.Empty);
        }