Laden...

YouTube Video via Quelltext herunterladen

Erstellt von Duesmannr vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.869 Views
Thema geschlossen
D
Duesmannr Themenstarter:in
161 Beiträge seit 2017
vor 6 Jahren
YouTube Video via Quelltext herunterladen

Wie Ihr dem Titel entnehmen könnt, möchte ich selbst Methoden etc. schreiben um YT Videos aus dem Quelltext herunterladen zu können.
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:

http://www.youtube.com/get_video_info?el=detailpage&video_id="ID"

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:> Fehlermeldung:

"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)


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?

Zum Thema Urheberrechtsverletzungen usw. Es soll lediglich Privatkopien erstellt werden. Und es wird kein YT Downloader.
MfG

16.842 Beiträge seit 2008
vor 6 Jahren

Google liefert seit einiger Zeit die Videos nicht mehr als Streams aus, sondern als Chunks.

Urheberrecht hin oder her, Google verbietet die Art und Weise wie Du mit einer Applikation auf das Video zugreifen willst. Aus diesem Grund helf ich auch nicht an dieser Stelle.
Google erlaubt einzig die Nutzung über die YouTube API.

T
2.224 Beiträge seit 2008
vor 6 Jahren

@Abt
Da hier offensichtlich gegen Nutzungbedigungen von Google verstoßen wird, sollte dann der Thread nicht geschlossen werden?

Ansonsten schließe ich mich Abt an.
Nutze die Google API.
Google selbst geht bereits aktiv gegen Portale/Software vor, die durch solche Maßnahmen die Videos von Youtube runterladen.
Entsprechend soltle das Thema auch geschlossen werden.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Hinweis von Abt vor 6 Jahren

Geschlossen.

Thema geschlossen