废话不多说了,直接给大家贴代码了,具体代码如下所示:
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