废话不多说了,直接给大家贴代码了,具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
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 }) * 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 getFlvDuration( $name ){ if (! file_exists ( $name )){ return ; } $flv_data_length = filesize ( $name ); $fp = @ fopen ( $name , 'r' ); $flv_header = fread ( $fp , 5); fseek ( $fp , 5, SEEK_SET); $frame_size_data_length = $this ->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 = $this ->BigEndian2Int( substr ( $this_tag_header , 5, 3)); $timestamp = $this ->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 ; } //转化为0:03:56的时间格式 function getFlvTime( $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 ; } |
总结
以上所述是小编给大家介绍的利用php获得flv视频长度的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://blog.csdn.net/jiongxian1/article/details/78353314