PHP如何获取FLV文件时间呢,答案是fopen文件后查看FLV文件是HEX数据,并转换为number。
<br /><?php<br />functionBigEndian2Int($byte_word,$signed=false)<br />{<br /> $int_value =0;<br /> $byte_wordlen=strlen($byte_word);<br /> for($i=0;$i<$byte_wordlen;$i++){<br /> $int_value+=ord($byte_word{$i})*pow(256,($byte_wordlen-1-$i));<br /> }<br /> if($signed){<br /> $sign_mask_bit=0x80<<(8*($byte_wordlen-1));<br /> if($int_value&$sign_mask_bit){<br /> $int_value=0-($int_value&($sign_mask_bit-1));<br /> }<br /> }<br /> return$int_value;<br />}<br /> <br />functiongetTime($name)<br />{<br /> if(!file_exists($name)){<br /> return;<br /> }<br /> $flv_data_length=filesize($name)<p>+本文来源gao!%daima.com搞$代*!码9网(</p><strong>搞gaodaima代码</strong>;<br /> $fp =@fopen($name,'rb');<br /> $flv_header =fread($fp,5);<br /> fseek($fp,5,SEEK_SET);<br /> $frame_size_data_length =BigEndian2Int(fread($fp,4));<br /> $flv_header_frame_length=9;<br /> if($frame_size_data_length>$flv_header_frame_length){<br /> fseek($fp,$frame_size_data_length-$flv_header_frame_length,SEEK_CUR);<br /> }<br /> $duration=0;<br /> while((ftell($fp)+1)<$flv_data_length){<br /> $this_tag_header=fread($fp,16);<br /> $data_length =BigEndian2Int(substr($this_tag_header,5,3));<br /> $timestamp =BigEndian2Int(substr($this_tag_header,8,3));<br /> $next_offset =ftell($fp)-1+$data_length;<br /> if($timestamp>$duration){<br /> $duration=$timestamp;<br /> }<br /> fseek($fp,$next_offset,SEEK_SET);<br /> }<br /> fclose($fp);<br /> return$duration;<br />}<br /> <br />functionget_flv_file_time($time)<br />{<br />$time=getTime($time);<br /> $num=$time;<br /> $sec=intval($num/1000);<br /> $h =intval($sec/3600);<br /> $m =intval(($sec%3600)/60);<br /> $s =intval(($sec%60));<br /> $tm =$h.':'.$m.':'.$s;<br /> return$tm;<br />}<br /> <br />?><br />
直接使用get_flv_file_time(“你的FLV.flv”)即可。