How does PHP get the FLV file time, the answer is fopen file to view the FLV file is hex data and converted to number.
Copy Code code as follows:
<?php
Functionbigendian2int ($byte _word, $signed =false)
{
$int _value = 0;
$byte _wordlen=strlen ($byte _word);
for ($i =0; $i < $byte _wordlen; $i + +) {
$int _value+=ord ($byte _word{$i}) *pow (256, ($byte _wordlen-1-$i));
}
if ($signed) {
$sign _mask_bit=0x80<< (8* ($byte _wordlen-1));
if ($int _value& $sign _mask_bit) {
$int _value=0-($int _value& ($sign _mask_bit-1));
}
}
Return$int_value;
}
Functiongettime ($name)
{
if (!file_exists ($name)) {
Return
}
$flv _data_length=filesize ($name);
$fp = @fopen ($name, ' RB ');
$flv _header =fread ($FP, 5);
Fseek ($fp, 5,seek_set);
$frame _size_data_length =bigendian2int (Fread ($FP, 4));
$flv _header_frame_length=9;
if ($frame _size_data_length> $flv _header_frame_length) {
Fseek ($fp, $frame _size_data_length-$flv _header_frame_length,seek_cur);
}
$duration = 0;
while ((Ftell ($FP) +1) < $flv _data_length) {
$this _tag_header=fread ($FP, 16);
$data _length =bigendian2int (substr ($this _tag_header,5,3));
$timestamp =bigendian2int (substr ($this _tag_header,8,3));
$next _offset =ftell ($fp) -1+ $data _length;
if ($timestamp > $duration) {
$duration = $timestamp;
}
Fseek ($fp, $next _offset,seek_set);
}
Fclose ($FP);
Return$duration;
}
Functionget_flv_file_time ($time)
{
$time =gettime ($time);
$num = $time;
$sec =intval ($num/1000);
$h =intval ($sec/3600);
$m =intval (($sec%3600)/60);
$s =intval (($sec%60));
$tm = $h. ': $m. ': $s;
Return$tm;
}
?>
Use Get_flv_file_time directly ("Your flv.flv").