Christoph: FLV - Abmessungen und Aspect Ratio

Beitrag lesen

Wieder ich.

Ignoriert bitte meine ursprüngliche Antwort - flv4php scheint die width- und height-Angaben gar nicht auszuwerten, sondern liest sie an anderer Stelle aus.

Ich habe mir mal Klawischniggs Antwort genauer angeschaut und dabei festgestellt, dass die Größenangabe anscheinend als 12bit-Fließkommawert vorliegt.

Als handliche PHP-Funktion liest sich das wie folgt:

  
function flvdim($name) {  
    $file = @fopen($name, 'rb');  
    if($file === false)  
        return false;  
  
    $header = fread($file, 2048);  
    fclose($file);  
    if($header === false)  
        return false;  
  
    return array(  
        'width' => flvdim_get($header, 'width'),  
        'height' => flvdim_get($header, 'height')  
    );  
}  
  
function flvdim_get($header, $field) {  
    $pos = strpos($header, $field);  
    if($pos === false)  
        return false;  
    else $pos += strlen($field) + 2;  
  
    return flvdim_decode(ord($header[$pos]), ord($header[$pos + 1]));  
}  
  
function flvdim_decode($byte1, $byte2) {  
    $high1 = $byte1 >> 4;  
    $high2 = $byte2 >> 4;  
    $low1 = $byte1 & 0x0f;  
  
    $mantissa = ($low1 << 4) | $high2;  
    return (2 << $high1) + (($mantissa << $high1) >> 7);  
}  

Christoph