代码之家  ›  专栏  ›  技术社区  ›  Jim OHalloran

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

  •  3
  • Jim OHalloran  · 技术社区  · 17 年前

    我有一个应用程序,用户可以上传任何大小的视频文件,我想能够从一个PHP脚本确定一个flash视频文件(flv或f4v)的高度/宽度,以便我可以适当地调整播放器的大小。我喜欢纯PHP解决方案,但我愿意对命令行工具进行解压并解析输出(如果存在这样的工具)。

    事先谢谢!

    5 回复  |  直到 16 年前
        1
  •  5
  •   Ady    17 年前

    ffmpeg 可能是你最好的选择,甚至还有 php module 其中。

    ffmpeg-i“文件名”

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

        2
  •  2
  •   lpfavreau Arthur Debert    17 年前

    如果您不能使用ffmpeg,因为您无法控制您的服务器,或者如果您想要一个PHP解决方案,请看一下 getID3 有一个 FLV module 这将返回一个解决方案。

        3
  •  1
  •   Christoph    17 年前

    还有 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;
    }
    

    请注意,代码是从二进制文件逆向工程的,但它似乎工作得相当好。

        4
  •  0
  •   lpfavreau Arthur Debert    17 年前

    或者, Tommy Lacroix 对于从flv文件中读取metas,似乎也有一个有趣的解决方案。

        5
  •  0
  •   Deniss Kozlovs    17 年前

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