Linuchs: Spieldauer eines Mediums ermitteln

Moin,

wie kann man die Spieldauer einer Audio- oder Videodatei ermitteln, die im Internet erreichbar ist? Ich brauche das für ein Lieder-Verzeichnis.

Ich machte das bisher, indem ich sie geladen und ausgewertet habe:

  $contents = file_get_contents( $file_quelle );
  if ( $contents ) {
    $handle = @fopen( $file_ziel, 'wb' );
    if ( $handle ) {
      fwrite( $handle, $contents );
      fclose( $handle );
    }
    // include getID3() library (can be in a different directory if full path is specified)
    require_once( "./get_id3/getid3.php" );
    // Initialize getID3 engine
    $getID3 = new getID3;
    // Analyze file and store returned data in $ThisFileInfo
    $ThisFileInfo = $getID3->analyze($file_ziel);
    $row_med['dauer_min_sec'] = $ThisFileInfo['playtime_string'];
    unlink( $file_ziel );
  }

Doch nun kam bei einer MP4-Datei der Fehler

http://example.com/.../Faehrmann.mp4
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 132644864 bytes) in /home/.../p532.php on line 252 

und machte mir klar, dass ich jede Datei lade und verwerfe, nur um die Spiellänge zu bestimmen.

Ich hoffe, das ist unnötig und man kann das schneller erreichen.

Gruß, Linuchs

  1. Hello,

    wie kann man die Spieldauer einer Audio- oder Videodatei ermitteln, die im Internet erreichbar ist?

    hast Du schon ausprobiert, was deine id3-Tools sagen, wenn du ihnen nur die ersten 128Bytes (bzw. 1024 Bytes) der Datei zur Verfügung stellst?

       An ID3v2 tag can be detected with the following pattern:
         $49 44 33 yy yy xx zz zz zz zz
       Where yy is less than $FF, xx is the 'flags' byte and zz is less than
       $80.
    

    in den 4 Bytes mit der Nummer 6-9 (Zählung beginnend bei 0) steht die benötigte Buffer-Size für die Header. Man sollte 20 addieren, da die 10 Bytes vom Superheader und eventuell 10 Bytes vom Footer nicht mitgezählt werden.

    Da müsstest Du also 10 Bytes auslesen, mit pack den BigInt (4 Bytes) auspacken und dann den Rest der Header laut ermittelter Angabe lesen. Damit sollten deine ID3-Tools dann zufrieden sein.

    Liebe Grüße
    Tom S.

    --
    Es gibt nichts Gutes, außer man tut es
    Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.
  2. Hallo Linuchs

    wie kann man die Spieldauer einer Audio- oder Videodatei ermitteln, die im Internet erreichbar ist? Ich brauche das für ein Lieder-Verzeichnis.

    Du kannst duration aus den Metadaten auslesen.

    Mit besten Grüssen
    Richard