菜单

The instance code of FLV video length obtained by PHP

2017年11月22日 - PHPer

Nonsense, say, directly to everyone posted code, the specific code as follows:

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;

}

Digital video / time

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;

}

/ / into 0:03:56 time format

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;

}

发表评论

电子邮件地址不会被公开。