Ankündigung

Einklappen
Keine Ankündigung bisher.

DivX Pseudo Streaming

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DivX Pseudo Streaming

    Nun mein zweiter Thread heute

    Ich versuche eine DivX-Datei per PHP auszuliefern. Allerdings mag dies der DivX Webplayer garnicht und quitiert das mit folgender Fehlermeldung:
    Die Datei, die Sie wiederzugeben versuchen, wurde nicht komplett heruntergeladen und eine Wiedergabe ist nicht möglich.
    Der Code ist folgender:
    PHP-Code:
                $source Draco_Datasource_Factory::factory($datasource->class$datasource->root);
                
    header('Content-Type: application/octet-stream');
                
    header('Content-Transfer-Encoding: binary');
                
    header('Content-Length: '.$source->getSize($path));
                
    set_time_limit(0); 
    Zend_Controller_Front::getInstance()->setParam('disableOutputBuffering'true);
                
    $this->_helper->layout->disableLayout();
                
    ob_end_clean();
                
    $source->printFile($path); 
    PHP-Code:
    public function printFile($file) {
            
    $dsn $this->_dsn;
            if(
    substr($dsn, -11) != '/')
                
    $dsn .= '/';
            
    $stream fopen($dsn.$file'r');
            while(!
    feof($stream)) {
                echo 
    fgets($stream1024);
                
    flush();
            }
        } 
    Wenn ich die Datei direkt im Browser aufrufe kann ich die Datei downloaden und auch ohne Probleme abspielen. Ich hab absolut keine Ahnung woran es noch liegen könnte

    Ich hoffe einer von euch kennt sich damit aus, bei google hab ich mich dumm und duselig gesucht aber nicht gefunden.

    lg
    draco

  • #2
    nimm dir wget oder einen firefox-plugin deiner wahl und mach dumps davon welche header apache sendet und welche dein php-script.

    bei wget bekommst du sämtliche header mit wget -dv angezeigt.

    Nutzt du eigentlich irgendwo exit ? Weil ansonsten müsste ja der ViewRenderer noch deaktiviert werden oder hast du den Standardmäßig aus ?, sonst kann es sein dass der dir auch ne exception wegen headers send oder so nachträg noch mit reinhaut.

    dann vergleiche mal die dateien die du erhälst (am besten mittels nem hash)

    und dann stellst du deinen apache mal auf das forensic-logs um (anstatt common oder combined) [oder alternativ nimmst du nen package-sniffer wie wireshark oder wenn firefox-plugins auch reqeusts von plugins wie dem divx-player kennen, ein solches) ähnliches und schau dir die logs deines webservers an und schau was der divx-player macht.

    Ich kenn das divx-format leider nicht vom aufbau her, aber ich könnte mir vorstellen dass der z.b. erstmal nen HEAD-request macht für die größe und jenachdem wo die video-header bei divx stehen dann z.b. an ne gewisse Stelle springen will, ans ende oder wohin auch immer, dann schaust du was da für header kommen (forensic-format loggt header mit).
    Sprich der player requested z.b. nur von byte X bis byte Y oder sowas, so wie Download-manager downloads parrallel machen. Apache kann das natürlich out-of-the-box, mit php musst du das selbst basteln (oder es irgendwie von apache machen lassen, z.b. wenn du eigenen server nutzt kannst du dir mal mod_xsendfile anschauen [wichtig, dieses modul ist NICHT geeignet wenn du auf dem apache webhosting oder ähnliches betreibt, weil sich damit php-limitierungen (openbase-dir, etc) umgehen lassen].
    -> Sending files better: Apache mod_xsendfile and PHP | CodeUtopia - The blog of Jani Hartikainen

    Denke du wirst dann in dein Script support für http-Sachen wie
    Content-Ranges und ähnliches implementieren müssen: HTTP/1.1: Header Field Definitions
    Im Manual findest du dazu an verschiedenen Stellen eventuell etwas Hilfe:
    PHP: fread - Manual
    [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
    | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

    Kommentar


    • #3
      Vielen Dank erstmal für deine Hilfe

      Die Lösung war aber eine andere gan simple.
      Ich hab dem Webplayer die URL halb-relative übergeben(/draco/public/stream/index/movie/1) er will sie aber nur Absolute haben, musste als nur nen http://localhost davorsetzten. Bin da erstmal nicht drauf gekommen, weil auf der DivX Dev-Page steht, dass er relative und absolute Pfade unterstützt.

      Nutzt du eigentlich irgendwo exit ? Weil ansonsten müsste ja der ViewRenderer noch deaktiviert werden oder hast du den Standardmäßig aus ?, sonst kann es sein dass der dir auch ne exception wegen headers send oder so nachträg noch mit reinhaut.
      Ich dachte mit
      PHP-Code:
      $this->_helper->layout->disableLayout(); 
      wird das deaktiviert?!
      Fehler kommen auf jeden Falle keine mehr

      Kommentar


      • #4
        Das Layout hat eigentlich erstmal nichts mit dem ViewRenderer-Plugin zu tun der automatisch views passend zu controller/action rendered nach dem ausführen einer Action.
        Das Layout setzt das was der ViewRenderer rendered ja dann ins logout ein.

        Weis nicht ob da irgendwo vielleicht noch was automatisch den Viewrenderer deaktiviert wenn das Layout deaktiviert wurde (hab da aber auf anhieb nichts gefunden weil disableLayout auch nichts anderes macht als ne Variable zu setzen die Zend_Layout abfragt wenn es an der Reihe ist.
        [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
        | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

        Kommentar

        Lädt...
        X