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 相关文章推荐
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP开发中常用的8个小技巧
Aug 27 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP中使用正则表达式提取中文实现笔记
Jan 20 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
Nov 22 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
php实现有序数组旋转后寻找最小值方法
Sep 27 PHP
php多进程应用场景实例详解
Jul 22 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
PHP 5.5 创建和验证哈希最简单的方法详解
2013/11/07 PHP
php调用c接口无错版介绍
2014/03/11 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
js 巧妙去除数组中的重复项
2010/01/25 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
利用JS实现简单的瀑布流加载图片效果
2017/04/22 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
2019/09/06 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
python中用Scrapy实现定时爬虫的实例讲解
2021/01/18 Python
JAVA招聘远程笔试题
2015/07/23 面试题
给学校的建议书
2014/03/12 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
大专生求职信
2014/06/29 职场文书
作文批改评语
2014/12/25 职场文书
个人创业事迹材料
2014/12/30 职场文书
小学班主任自我评价
2015/03/11 职场文书
电影雨中的树观后感
2015/06/15 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
js判断两个数组相等的5种方法
2022/05/06 Javascript
Go微服务项目配置文件的定义和读取示例详解
2022/06/21 Golang