如何从PHP代码获取Flash视频文件的尺寸?

时间:2008-12-30 00:13:21

标签: php flash

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

提前致谢!

5 个答案:

答案 0 :(得分:5)

ffmpeg可能是您最好的选择,甚至还有php module

ffmpeg -i“FileName”

另外,您可以通过打开文件并阅读元信息直接从flv文件中读取信息。

答案 1 :(得分:2)

如果由于无法控制服务器或者想要PHP解决方案而无法使用ffmpeg,请查看getID3,有一个FLV module应该返回一个解决方案

答案 2 :(得分: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;
}

请注意,代码是从二进制文件反向设计的,但它似乎运行得相当好。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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