private static IEnumerable<Uri> ExtractDownloadUrls(string source)
        {
            #if NETFX_CORE
            string urlMap = new WwwFormUrlDecoder(source).GetFirstValueByName("url_encoded_fmt_stream_map");
            #else
            string urlMap = HttpUtility.ParseQueryString(source).Get("url_encoded_fmt_stream_map");
            #endif

            string[] splitByUrls = urlMap.Split(',');

            foreach (string s in splitByUrls)
            {
            #if NETFX_CORE
                var decoder = new WwwFormUrlDecoder(s);
                string url = string.Format("{0}&fallback_host={1}&signature={2}",
                    decoder.GetFirstValueByName("url"),
                    decoder.GetFirstValueByName("fallback_host"),
                    decoder.GetFirstValueByName("sig"));

                url = WebUtility.UrlDecode(url);
                url = WebUtility.UrlDecode(url);

            #else
                var queries = HttpUtility.ParseQueryString(s);
                string url = string.Format("{0}&fallback_host={1}&signature={2}", queries["url"], queries["fallback_host"], queries["sig"]);

                url = HttpUtility.UrlDecode(url);
                url = HttpUtility.UrlDecode(url);
            #endif
                yield return new Uri(url);
            }
        }