Function bigendian2int ($ 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}) x 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; } Function gettime ($ 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; } Function fn ($ 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; } Echo gettime ("27729.flv"); // display the numeric time, such as 236722 Echo fn (236722); // Display time format 0:03:56 |