首頁 > 後端開發 > php教程 > 哪位兄弟能帮忙注解一下这段程序?该怎么处理

哪位兄弟能帮忙注解一下这段程序?该怎么处理

WBOY
發布: 2016-06-13 10:13:14
原創
900 人瀏覽過

哪位兄弟能帮忙注解一下这段程序?
功能是取得flv视频的时间,是网上找的,但是很多地方不明白。。。

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->function BigEndian2Int($byte_word, $signed = false) {         $int_value = 0;        $byte_wordlen = strlen($byte_word);                for ($i = 0; $i  $flv_header_frame_length) {       fseek($fp, $frame_size_data_length - $flv_header_frame_length, SEEK_CUR);    }    $duration = 0;    while ((ftell($fp) + 1)  $duration) {          $duration = $timestamp;         }          fseek($fp, $next_offset, SEEK_SET);    }     fclose($fp);    return $duration;    }    //转化为0:03:56的时间格式    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;         } $t = getTime("/tmp/907701336.flv");//显示数字时间如236722 echo fn($t);//显示时间格式0:03:56
登入後複製


对 BigEndian2Int这个函数看不懂,以及getTimes里面的一些数字 有什么意思?

------解决方案--------------------
根据 FLV 文件格式的规定
FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag及Tag Size对组成。Tag包括Tag Header和Tag Data两部分。
Tag Header 的 
第5-7字节为UI24类型的值,表示该Tag的时间戳(单位为ms)
第8个字节为时间戳的扩展字节,当24位数值不够时,该字节作为最高位将时间戳扩展为32位值

只要将这一系列的时间戳加起来就得到了整个播放时间

UI24类型 占 3 个字节,高位在前
所以程序中有 
$int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i));
这个写法很烂,还用到了 pow
你也可以修改他,基础算式
令传入串 $s,有 ( ord($s{0}) * 256 + ord($s{1}) ) * 256 + ord($s{2})
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板