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;
}