什么是使用PHP计算flv文件长度的最佳方法,如外部依赖关系,如ffmpege,因为客户端站点在共享主机上运行,itry http://code.google.com/p/flv4php/,但它提取元数据而不是所有视频都包含元数据?
有一个不太复杂的方法来做到这一点.
FLV文件具有特定的数据结构,允许以相反的顺序对它们进行解析,假设文件格式正确.
只需打开文件并在文件结束前搜索4个字节.
您将获得一个大端32位值,表示在这些字节之前标记的大小(FLV文件由标记组成).您可以使用unpack具有'N'格式规范的函数.
然后,您可以找回刚刚找到的字节数,从而引导您到文件中最后一个标记的开头.
该标记包含以下字段:
因此,您所要做的就是跳过前32位,并解压缩('N',...)您读取的时间戳值.
由于FLV标签的持续时间通常非常短,因此它应该为文件提供相当准确的持续时间.
以下是一些示例代码:
$flv = fopen("flvfile.flv", "rb");
fseek($flv, -4, SEEK_END);
$arr = unpack('N', fread($flv, 4));
$last_tag_offset = $arr[1];
fseek($flv, -($last_tag_offset + 4), SEEK_END);
fseek($flv, 4, SEEK_CUR);
$t0 = fread($flv, 3);
$t1 = fread($flv, 1);
$arr = unpack('N', $t1 . $t0);
$milliseconds_duration = $arr[1];
Run Code Online (Sandbox Code Playgroud)
最后两个fseek可以分解,但为了清楚起见,我把它们都留下了.
编辑:修改了一些测试后的代码