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 相关文章推荐
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
Oct 27 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
浅谈apache和nginx的rewrite的区别
Feb 22 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
PHP生成二维码的两个方法和实例
Jul 01 PHP
php建立Ftp连接的方法
Mar 07 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
Laravel使用消息队列需要注意的一些问题
Dec 13 PHP
PHP基于swoole多进程操作示例
Aug 12 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
用Socket发送电子邮件
2006/10/09 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP内置的Math函数效率测试
2014/12/01 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
jQuery移动web开发中的页面初始化与加载事件
2015/12/03 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
Python中lambda的用法及其与def的区别解析
2014/07/28 Python
python字符串,数值计算
2016/10/05 Python
Python3使用SMTP发送带附件邮件
2020/06/16 Python
基于python实现上传文件到OSS代码实例
2020/05/09 Python
.NET remoting的两种通道是什么
2016/05/31 面试题
饲料采购员岗位职责
2013/12/19 职场文书
优秀学生干部推荐材料
2014/02/03 职场文书
预备党员政审材料
2014/02/04 职场文书
会务接待方案
2014/02/27 职场文书
医疗纠纷协议书
2014/04/16 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
十岁生日答谢词
2015/01/05 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
2022年显卡天梯图(6月更新)
2022/06/17 数码科技