利用php获得flv视频长度的实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示:

 function BigEndian2Int($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;
}
//获得视频的数字时间
function getFlvDuration($name){
  if(!file_exists($name)){
    return;
  }
  $flv_data_length=filesize($name);
  $fp = @fopen($name, 'r');
  $flv_header = fread($fp, 5);
  fseek($fp, 5, SEEK_SET);
  $frame_size_data_length = $this->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     = $this->BigEndian2Int(substr($this_tag_header, 5, 3));
     $timestamp      = $this->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;
}
//转化为0:03:56的时间格式
function getFlvTime($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;
} 

总结

以上所述是小编给大家介绍的利用php获得flv视频长度的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

时间: 2017-10-24

PHP用函数嵌入网站访问量计数器

这是一种方法实现计数器.想看另一种方法的请点击:[PHP]简单的网站访问量计数器实现 想看具体代码思路的也请点击上面的链接. 创建Embed-Count文件夹 在Embed-Count文件夹下面创建counter.inc.php文件,内容如下: <?php function counter(){ $counter = 0; //初始化变量 $max_len = 8; $lj = explode("/",$_SERVER["PHP_SELF"]); //超全局变

史上最全的PHP正则表达式(手机号需要加上177-***)

首先看下正则表达式思维导图: 一.校验数字的表达式  1 数字: ^[0-9]*$ 2 n位的数字: ^\d{n}$ 3 至少n位的数字: ^\d{n,}$ 4 m-n位的数字: ^\d{m,n}$ 5 零和非零开头的数字: ^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字: ^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数: ^(\-)?\d+(\.\d{1,2})?$ 8 正数.负数.和小数: ^(\-|\+)?\d+(\.\

thinkPHP实现上传图片及生成缩略图功能示例

本文实例讲述了thinkPHP实现上传图片及生成缩略图功能.分享给大家供大家参考,具体如下: 记录一下在thinkPHP上传图片的方法(Upload)和生成缩略图(Image)的方法. html页面form中必须加enctype="multipart/form-data" <form action="__SELF__" method="post" enctype="multipart/form-data"> <

PHP实现网站访问量计数器

简单的网站访问量计数器实现,具体如下 首先说明思路: 1.用户向服务器发出访问请求 2.服务器读取访问次数文件,+1,向客户端返回 3.服务器保存新的浏览次数 4.新用户访问,重复123即可 解决方案(主要算法): 1.数据文件:counter.dat 2.读出数据文件     打开文件:     如果不存在,创建,并以0为初识数据:     否则,读出数据:     关闭文件. 3.把累加后的数据写入文件counter.dat     累加数据:     打开文件:     写入数据:    

PHP实现找出数组中出现次数超过数组长度一半的数字算法示例

本文实例讲述了PHP实现找出数组中出现次数超过数组长度一半的数字算法.分享给大家供大家参考,具体如下: <?php * 算法要求:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字. * * 算法分析:我们需要计算数组中每个数字的出现次数.在PHP中我们可以使用in_array函数 * 来判断一个元素是否出现在数组中.比如数组中含有1,2,3三个元素,我们要判断1是否存在 * 可以使用in_array(1,$array)来判断,但是这样只能判断1出现了一次,因为对于含有数组 * 元素1

thinkPHP实现的验证码登录功能示例

本文实例讲述了thinkPHP实现的验证码登录功能.分享给大家供大家参考,具体如下: 使用thinkphp自带的验证,实现登录页面的账号密码+验证码的验证 <?php namespace Admin\Controller; use Think\Controller; use Think\Verify; class LoginController extends Controller{ public function login(){ if($_POST){ $obj = new Verify()

php+ajax+h5实现图片上传功能

本文实例为大家分享了php实现ajax图片上传的具体代码,供大家参考,具体内容如下 html页面代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script type="text/javascript" src="__PUBLIC__

php 重写分页器 CLinkPager的实例

php 重写分页器 CLinkPager的实例 1.自定义的分页器类放在哪里? 有两个位置可以放, 第一种是放在 protected/extensions 中,在使用是import进来,或在config文件中import进来: 第二种是放在 protected/components 中,作为组件存在,不需要import 2.用派生方式是最好的 class MyPager extends CLinkPager 入口函数是:public function run() ,当显示分页器时run()被调用

Java 重载、重写、构造函数的实例详解

Java 重载.重写.构造函数的实例详解 方法重写 1.重写只能出现在继承关系之中.当一个类继承它的父类方法时,都有机会重写该父类的方法.一个特例是父类的方法被标识为final.重写的主要优点是能够定义某个子类型特有的行为. class Animal { public void eat(){ System.out.println ("Animal is eating."); } } class Horse extends Animal{ public void eat(){ Syste

java方法重写和super关键字实例详解

 java方法重写和super关键字  在继承中,其实就是子类定义了和父类同名的方法 就是方法,属性都是相通的 重写限制:  被子类重写的方法不能拥有比父类方法更加严格的权限 super:强行调用父类方法的执行 重载和重写的区别?  重 载是发生在一个类中   对权限没有要求   而且重载的方法参数可以不同 重写发生在继承汇总      被子类重写的方法不能拥有比父类方法更加严格的权限,重写的方法中参数名字完全相同  实例代码: class A{ public void tell(){ Syst

nginx重写rewrite基础及实例分享

nginx rewrite 正则表达式匹配 大小写匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配及不区分大小写不匹配 文件及目录匹配 -f和!-f用来判断是否存在文件 -d和!-d用来判断是否存在目录 -e和!-e用来判断是否存在文件或目录 -x和!-x用来判断文件是否可执行 flag标记 last 相当于Apache里的[L]标记,表示完成rewrite break 终止匹配, 不再匹配后面的规则. redirect 返回302临时重定向 地址栏会显示

Android重写View并自定义属性实例分析

本文实例分析了Android重写View并自定义属性的方法.分享给大家供大家参考,具体如下: 这里通过自定义属性 实现如下图所示效果: 第一步:在res\values的目录下新建一个文件attrs.xml 声明一些自定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CustomViewStyle">

Yii使用CLinkPager分页实例详解

本文主要讲解了YII中使用CLinkPager分页的方法,这里我们采用物件的形式来定义分页: 首先在components中自定义LinkPager,并继承CLinkPager 具体代码如下: <?php /** * CLinkPager class file. * * @link http://www.yiiframework.com/ * @copyright Copyright © 2008-2011 Yii Software LLC * @license http://www.yiifra

javascript重写alert方法的实例代码

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="

aspnetpager重写url(伪静态)配置实例

复制代码 代码如下: <webdiyer:AspNetPager UrlPaging="true" EnableUrlRewriting="true"  UrlRewritePattern="/bidding/list_%tid%_%cityid%_{0}_%isProvince%.aspx"  ID="pager" CssClass="page" runat="server" O

asp.net输出重写压缩页面文件实例代码

例子 复制代码 代码如下: using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.htmlControls;using Sys

java 函数的重载和重写实例代码

在java中多态分为两种编译时多态(重载)和运行时多态(重写),编译时多态又叫前绑定,运行时多态又叫后绑定. 下面用一个例子说明: public class OverloadAndOverwrite { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.print("a1.print(a1)