2008-12-30 75 views
3

我有一个应用程序,用户可以上传任何尺寸的视频文件,我希望能够从PHP脚本中确定Flash视频文件(flv或f4v)的高度/宽度,以便我可以调整大小玩家适当。我很喜欢纯粹的PHP解决方案,但我可以开放给命令行工具并解析输出(如果存在这样的工具)。如何从PHP代码中获取Flash视频文件的尺寸?

在此先感谢!

回答

5

ffmpeg可能是你最好的选择,甚至有一个php module它。

的ffmpeg -i“文件名”

Alternativly你可以直接打开文件和读取元信息读取FLV文件的信息。

2

如果你不能使用ffmpeg,因为你不能控制你的服务器,或者你想要一个PHP解决方案,看看getID3,那么FLV module应该返回一个分辨率。

0

或者,Tommy Lacroix似乎也有一个有趣的解决方案,用于从FLV文件中读取元数据。

1

还有flv4php

如果该文件的标题包含视频的尺寸(这可能并不总是如此),你也可以使用下面的代码:

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; 

    $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; 

    // (1 + m·2^(-8))·2^(h1 + 1) = (2^8 + m)·2^(h1 - 7) 
    return ((256 + $mantissa) << $high1) >> 7; 
} 

Pleaso注意,代码是反向从二进制文件的工程,但它似乎工作得很好。

0

我听说你可以使用普通的getimagesize(),但我还没有测试过。试一试。