使用带有外部依赖关系(如ffmpege)的php来计算flv文件长度的最佳方法是什么,因为客户端站点在共享主机上运行, itry http://code.google.com/p/flv4php/,但它提取元数据而不是所有视频都包含元数据?
答案 0 :(得分:7)
这样做的方法并不太复杂。
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];
最后两个fseek可以被分解,但为了清楚起见,我把它们都留下了。
编辑:修复了一些测试后的代码
答案 1 :(得分:0)
获得电影持续时间的计算大致如下:
size of file in bytes / (bitrate in kilobits per second / 8)