[PHP] cURL | Videodownload von YouTube sehr langsam + Anschlussprobleme

Dieses Thema im Forum "Webentwicklung" wurde erstellt von myth2806, 30. Juli 2010 .

Schlagworte:
  1. 30. Juli 2010
    cURL | Videodownload von YouTube sehr langsam + Anschlussprobleme

    Hey,

    hab mir einen kleinen YouTube Videodownloader in PHP mit cURL geschrieben nur muss ich dabei feststellen, dass die Geschwindigkeit doch wirklich zu wünschen übrig lässt... Hab in der ersten Sekunde einen Speed von ~2MB/s und anschließend ~220kb/s. ( Läuft auf vHost und die Bandbreite steht auf jeden Fall zur Verfügung )

    Jetzt ist die Frage ob das eine Grenze von YouTube selbst ist oder ob ich da noch irgendwas drehen kann.

    Folgende cURLOPTS:
    PHP:
    curl_setopt $cURL CURLOPT_RETURNTRANSFER );
    curl_setopt $cURL CURLOPT_AUTOREFERER true  );
    curl_setopt $cURL CURLOPT_FOLLOWLOCATION true  );
    curl_setopt $cURL CURLOPT_USERAGENT "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"  );
    curl_setopt $cURL CURLOPT_COOKIEJAR "/dev/null"  );
    curl_setopt $cURL CURLOPT_FILE $fp  );

    Grüße
     
  2. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    Das ist ganz normal, zumindest lokal bei mir so. Am anfang immer fullspeed und danach wird gedrosselt. Man muss ja normalerweiße auch nicht schneller runterladen, als man den Film anschauen kann.

    Zu deinem Code: Warum setzt du CURLOPT_COOKIEJAR explizit auf /dev/null? Wenn dich die Cookies eh nicht interessieren, dann brauchst du die Option ja gar nicht setztn.
     
  3. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    // "/dev/null" vollkommen richtig für laufzeitgebundene cookies.

    stimmt alles. youtube limitiert den download je nach anbindung. mit dsl6k kommst du bei youtube ned (bzw. selten) über 100kb/s

    da lädst du anfangs fullspeed (zum buffern) und dann langsamer.
     
  4. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    Das mit dem COOKIEJAR mach ich weil ich mit dem cURL handle zwei Requests starte.... Erstmal die normale YouTube Seite wo ich dann die Informationen rausziehe und anschließend das Video.
    Dachte mir dass YouTube darauf vielleicht achtet und mir ansonsten den Download nicht gestattet.
    Hab gelesen dass beim Angeben von "/dev/null" als COOKIEJAR, er das COOKIE intern bei weiteren Aufrufen verwendet, aber halt nicht in eine Datei speichert. Das ist ja genau das was ich brauche.

    Und der Pfad scheint auch zu funktionieren. Zumindest wird kein /dev/null im Webroot oder sonstwo angelegt und cURL verhält sich so wie ich das will... also fast

    Ich wunder mich nur weil filsh.net hat teilweise eine Geschwindigkeit von 6-7 MB/s beim Herunterladen. Ist das dann deren Cache oder haben die eine spezielle Vereinbarung mit YouTube oder so?

    Grüße
     
  5. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    Eine Möglichkeit wäre ja das Video mehrmals neu Buffern zu lassen, indem du zur ungebufferten Stelle vorspulst. Wichtig wäre dann halt immer das aktuell Gelesene per Codec zu analysieren und die Länge festzustellen.

    Ist aber nur eine Theorie
     
  6. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    Ja da hab ich auch schon dran rumüberlegt.
    Man könnte ja per exec() mehrere PHP Prozesse starten und jeden jeweils ein Fragment runterladen lassen.

    Die Kommandozeilenversion von cURL scheint auch ein Parameter "--continue-at <bytes>" zu besitzen. Das PHP-Modul anscheinend leider nicht.

    Welche Funktionen würdet Ihr denn für die elegantesten einer solchen Umsetzung halten?

    exec/php/curl
    exec/curl
    exec/wget
    ???

    Grüße
     
  7. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    du kannst den header ja manuell setzen.

    PHP:
    curl_setopt ( $ch1 CURLOPT_HTTPHEADER , array( 'Range: 0-10000' ));
    curl_setopt ( $ch2 CURLOPT_HTTPHEADER , array( 'Range: 10000-20000' ));
    usw, sollte eigl. klappen.
     
  8. 30. Juli 2010
    AW: cURL | Videodownload von YouTube sehr langsam

    Danke aber leider hat YouTube sich da selbst was gebastelt.
    Per Firebug hab ich rausgefunden, dass dem "videoplayback"-Aufruf der Parameter "begin=<msec>" als zweiter paramter mitübergeben wird.

    Ich werde hier editieren wenn ichs geschafft hab damit einen parallelel Download zu bauen.


    //edit: hat jemand eine idee wie ich das herunterladen an der passenden stelle wieder abbreche? bzw. wie finde ich die passende stelle? Glaube nicht dass die überall feste bitraten in den video und audio streams haben... einfach hochrechnen geht also nicht
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.