PHP实现获取FLV文件的时间


Posted in PHP onFebruary 10, 2015

PHP如何获取FLV文件时间呢,答案是fopen文件后查看FLV文件是HEX数据,并转换为number。

<?php

functionBigEndian2Int($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;

}

 

functiongetTime($name)

{

    if(!file_exists($name)){

        return;

    }

    $flv_data_length=filesize($name);

    $fp              =@fopen($name,'rb');

    $flv_header      =fread($fp,5);

    fseek($fp,5,SEEK_SET);

    $frame_size_data_length  =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     =BigEndian2Int(substr($this_tag_header,5,3));

        $timestamp       =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;

}

 

functionget_flv_file_time($time)

{

$time=getTime($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;

}

 

?>

直接使用get_flv_file_time(“你的FLV.flv”)即可。

PHP 相关文章推荐
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
PHP中如何定义和使用常量
Feb 28 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
Yii中表单用法实例详解
Jan 05 PHP
php连接oracle数据库的方法(测试成功)
May 26 PHP
php文件类型MIME对照表(比较全)
Oct 07 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
Laravel 在views中加载公共页面的实现代码
Oct 22 PHP
PHP中SESSION过期设置
Mar 09 PHP
PHP中实现获取IP和地理位置类分享
Feb 10 #PHP
PHP实现的简单mock json脚本分享
Feb 10 #PHP
PHP实现的带超时功能get_headers函数
Feb 10 #PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 #PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 #PHP
PHP框架Laravel的小技巧两则
Feb 10 #PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 #PHP
You might like
手冲咖啡应该是现代精品咖啡店的必备选项吗?
2021/03/03 冲泡冲煮
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
php删除文件夹及其文件夹下所有文件的函数代码
2013/01/23 PHP
PHP反射使用实例和PHP反射API的中文说明
2014/07/02 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
vueJS简单的点击显示与隐藏的效果【实现代码】
2016/05/03 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
浅谈js中function的参数默认值
2017/02/20 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 打印对象的所有属性值的方法
2016/09/11 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
英国航空官网:British Airways
2016/09/11 全球购物
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
AJax面试题
2014/11/25 面试题
质量保证书怎么写
2015/02/27 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript