当前位置:首页 > PHP教程 > php应用 > 列表

PHP实现获取FLV文件的时间

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-11 10:30:17 浏览: 评论:0 

这篇文章主要介绍了PHP实现获取FLV文件的时间,本文直接给出实现代码和使用方法,需要的朋友可以参考下

PHP如何获取FLV文件时间呢,答案是fopen文件后查看FLV文件是HEX数据,并转换为number,代码如下:

  1. <?php 
  2. functionBigEndian2Int($byte_word,$signed=false) 
  3. { 
  4.     $int_value    =0; 
  5.     $byte_wordlen=strlen($byte_word); 
  6.     for($i=0;$i<$byte_wordlen;$i++){ 
  7.         $int_value+=ord($byte_word{$i})*pow(256,($byte_wordlen-1-$i)); 
  8.     } 
  9.     if($signed){ 
  10.         $sign_mask_bit=0x80<<(8*($byte_wordlen-1)); 
  11.         if($int_value&$sign_mask_bit){ 
  12.             $int_value=0-($int_value&($sign_mask_bit-1)); 
  13.         } 
  14.     } 
  15.     return$int_value; 
  16. } 
  17.  
  18. functiongetTime($name) 
  19. { 
  20.     if(!file_exists($name)){ 
  21.         return; 
  22.     } 
  23.     $flv_data_length=filesize($name); 
  24.     $fp              =@fopen($name,'rb'); 
  25.     $flv_header      =fread($fp,5); 
  26.     fseek($fp,5,SEEK_SET); 
  27.     $frame_size_data_length  =BigEndian2Int(fread($fp,4)); 
  28.     $flv_header_frame_length=9; 
  29.     if($frame_size_data_length>$flv_header_frame_length){ 
  30.         fseek($fp,$frame_size_data_length-$flv_header_frame_length,SEEK_CUR); 
  31.     } 
  32.     $duration=0; 
  33.     while((ftell($fp)+1)<$flv_data_length){ 
  34.         $this_tag_header=fread($fp,16); 
  35.         $data_length     =BigEndian2Int(substr($this_tag_header,5,3)); 
  36.         $timestamp       =BigEndian2Int(substr($this_tag_header,8,3)); 
  37.         $next_offset     =ftell($fp)-1+$data_length; 
  38.         if($timestamp>$duration){ 
  39.             $duration=$timestamp; 
  40.         } 
  41.         fseek($fp,$next_offset,SEEK_SET); 
  42.     } 
  43.     fclose($fp); 
  44.     return$duration; 
  45. } 
  46.  
  47. functionget_flv_file_time($time) 
  48. { 
  49. $time=getTime($time); 
  50.     $num=$time; 
  51.     $sec=intval($num/1000); 
  52.     $h   =intval($sec/3600); 
  53.     $m   =intval(($sec%3600)/60); 
  54.     $s   =intval(($sec%60)); 
  55.     $tm  =$h.':'.$m.':'.$s; 
  56.     return$tm; 
  57. } 
  58.  
  59. ?> 

直接使用get_flv_file_time(“你的FLV.flv”)即可。

Tags: PHP获取FLV文件时间

分享到: