Wie Ihr dem Titel entnehmen könnt, möchte ich selbst Methoden etc. schreiben um YT Videos aus dem Quelltext herunterladen zu können.
Ich bin ein C# Entwickler.
Es gibt zum Beispiel diese Bibliothek um Videos runterlzuladen. Diese funktioniert auch nur zu 50%.
Manche Videos funktionieren, andere wiederrum nicht.
Ich bin seit zwei Tagen dabei, es irgendwie auf die Reihe zu bekommen, aber bis jetzt ohne Erfolg.
Es gibt ja eine sogenannte Video Info die man so bekommt:
Wo Infos drinstehen.
Der eig. Downloadlink besteht ja aus:
URL + Fallback_Host + Signatur
Wenn ich diesen zusammensetze, als Beispiel dieses Video: "https://www.youtube.com/watch?v=OehxXNCYvTM"
bekomme ich diese Url:
"https://r5---sn-4g57kn6d.googlevideo.com/videoplayback?mime=video/mp4&itag=22&pl=47&upn=2vmzBL4fJzA&sparams=dur,ei,id,initcwndbps,ip,ipbits,itag,lmt,mime,mm,mn,ms,mv,pl,ratebypass,requiressl,source,upn,expire&ipbits=0&initcwndbps=1128750&source=youtube&id=o-AAVhpkmTNsBgO_4bmA3Y2D4F4P8gkV6E-Q2z5MQx9IsX&beids=[9466594]&lmt=1471146710812948&ip=2003:64:f2e:e9ff:8c2e:6b1e:1311:1f6&key=yt6&expire=1494100925&dur=231.061&mv=m&mt=1494079224&ms=au&ei=XdcNWbDgIcGHcbvqsvgP&requiressl=yes&ratebypass=yes&mn=sn-4g57kn6d&mm=31&fallback_host=&signature="
Bei diesem Video bekomme ich die Meldung:
"Der Zugriff auf r5---sn-4g57kn6d.googlevideo.com wurde verweigert"
Die Methode die ich benutze, um diesen Link zusammenzusetzen ist diese hier:(Ist von einem anderen Projekt vom Internet, um es auszutesten)
Bei manchen Videos geht es, bei anderen wiederrum nicht.
Möchte gern alle, bzw. viele Videos herunterladen können.
Hast du Ideen, Tipps oder Verbesserungsvorschläge?
MfG
Ich bin ein C# Entwickler.
Es gibt zum Beispiel diese Bibliothek um Videos runterlzuladen. Diese funktioniert auch nur zu 50%.
Manche Videos funktionieren, andere wiederrum nicht.
Ich bin seit zwei Tagen dabei, es irgendwie auf die Reihe zu bekommen, aber bis jetzt ohne Erfolg.
Es gibt ja eine sogenannte Video Info die man so bekommt:
Wo Infos drinstehen.
Der eig. Downloadlink besteht ja aus:
URL + Fallback_Host + Signatur
Wenn ich diesen zusammensetze, als Beispiel dieses Video: "https://www.youtube.com/watch?v=OehxXNCYvTM"
bekomme ich diese Url:
"https://r5---sn-4g57kn6d.googlevideo.com/videoplayback?mime=video/mp4&itag=22&pl=47&upn=2vmzBL4fJzA&sparams=dur,ei,id,initcwndbps,ip,ipbits,itag,lmt,mime,mm,mn,ms,mv,pl,ratebypass,requiressl,source,upn,expire&ipbits=0&initcwndbps=1128750&source=youtube&id=o-AAVhpkmTNsBgO_4bmA3Y2D4F4P8gkV6E-Q2z5MQx9IsX&beids=[9466594]&lmt=1471146710812948&ip=2003:64:f2e:e9ff:8c2e:6b1e:1311:1f6&key=yt6&expire=1494100925&dur=231.061&mv=m&mt=1494079224&ms=au&ei=XdcNWbDgIcGHcbvqsvgP&requiressl=yes&ratebypass=yes&mn=sn-4g57kn6d&mm=31&fallback_host=&signature="
Bei diesem Video bekomme ich die Meldung:
"Der Zugriff auf r5---sn-4g57kn6d.googlevideo.com wurde verweigert"
Die Methode die ich benutze, um diesen Link zusammenzusetzen ist diese hier:(Ist von einem anderen Projekt vom Internet, um es auszutesten)
C#-Quellcode
- public List<Video> DownloadUrls
- {
- get
- {
- YouTubeVideoHelper youTubeVideoHelper = new YouTubeVideoHelper();
- List<Video> videoList = new List<Video>();
- string query = new WebClient()
- {
- Proxy = ((IWebProxy)null)
- }.DownloadString(string.Format("http://www.youtube.com/get_video_info?&video_id={0}&el=detailpage&ps=default&eurl=&gl=US&hl=en", (object)this.ID)); //Holt die Video ID mittels einer Eigenschaft
- if (query.Contains("errorcode="))
- {
- string str1 = query.Substring(checked(query.IndexOf("errorcode=") + 10));
- if (str1.Contains("&"))
- str1 = str1.Remove(str1.IndexOf("&"));
- int integer = Convert.ToInt32(str1);
- if (query.Contains("reason="))
- {
- string str2 = query.Substring(checked(query.IndexOf("reason=") + 7));
- if (str2.Contains("&"))
- str2 = str2.Remove(str2.IndexOf("&"));
- throw new YouTubeVideoIsNotAvailableException(str2 + " Error Code : " + integer.ToString());
- }
- throw new YouTubeVideoIsNotAvailableException("ErrorCode " + integer.ToString());
- }
- NameValueCollection nameValueCollection = new NameValueCollection();
- string str3 = HttpUtility.ParseQueryString(query)["url_encoded_fmt_stream_map"];
- if (string.Compare(str3, string.Empty, false) == 0)
- throw new YouTubeVideoIsNotAvailableException("Failed To Get Video Data");
- new List<string>((IEnumerable<string>)Regex.Split(str3, ",")).ForEach((Action<string>)(format =>
- {
- if (string.IsNullOrEmpty(format.Trim()))
- return;
- NameValueCollection queryString = HttpUtility.ParseQueryString(format);
- string str1 = queryString["url"];
- string s = queryString["itag"];
- string str2 = queryString["sig"];
- string str4 = queryString["fallback_host"];
- byte num = byte.Parse(s);
- Uri uri = new Uri(HttpUtility.UrlDecode(HttpUtility.UrlDecode(string.Format("{0}&fallback_host={1}&signature={2}", (object)str1, (object)str4, (object)str2))));
- videoList.Add(new Video()
- {
- DownloadLink = uri.ToString(),
- VideoQuality = youTubeVideoHelper.GetVideoQuality(Convert.ToInt32(num.ToString()))
- });
- }));
- if (videoList.Count <= 0)
- throw new YouTubeVideoIsNotAvailableException("This Video Does Not Contains Any VideoURL's");
- return videoList;
- }
- }
Bei manchen Videos geht es, bei anderen wiederrum nicht.
Möchte gern alle, bzw. viele Videos herunterladen können.
Hast du Ideen, Tipps oder Verbesserungsvorschläge?
MfG