首页 > 后端开发 > php教程 > 哪位兄弟能帮忙注解一下这段程序?该怎么处理

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

WBOY
发布: 2016-06-13 13:43:39
原创
824 人浏览过

哪位兄弟能帮忙注解一下这段程序?
功能是取得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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板