如何读取Flv视频文件的时间

本文介绍了一种无需使用metadata即可读取FLV视频文件时间长度的方法。通过分析FLV文件格式,理解其头文件和tag结构,利用编程语言读取关键字节来获取时间信息。文中详细讲解了FLV头文件的9字节组成和tag的格式,以及如何从文件中提取这些信息。提供了一个C#实现的示例代码,帮助开发者实现这一功能。
摘要由CSDN通过智能技术生成

Mobicast闪播在搜索时需要反馈Flv的时间长度,可是如果使用flvmdi来将每个文件注入metadata再读取出时间,那么陈奕迅的歌词“明年今日”就相当适合我的软件了。
得自己写程序读取Flv的时间长度。
上网搜索,发现鲜有这样的文章,多数都是教你用as来读取metadata的时间,但是如果没有注入metadata,那就没办法了。
以下教程适用大多数可以读写文件的编程语言。读者需要有一定的文件读写的基础知识。补充一句,其实,大家如果不懒,英文又还过得去,可以直接看看Flv的文档,那么自然就很清晰该怎么做了,也用不着来听我罗嗦了,呵呵。
要看中文教程?好,follow me!
一、头文件
Flv的头文件格式比较简单,由9个字节组成.

前3个字节是文件格式标识 0x464C56.
第4个字节也是标识文件的版本号 0x01.
第5个字节 0x05
该字节前5个bit是保留的必须是0
          第6个bit音频类型标志(TypeFlagsAudio)
          第7个bit也是保留的必须是0
          第8个bit视频类型标志(TypeFlagsVideo)
第6-9的四个字节保留,为的是以后flv版本的升级扩展 0x00000009。

二、文件tag和内容
Flv文件除去头文件,就是由n个tag及内容组成。
tag1 内容1,tag2 内容2 ..... tagn 内容n
我们要读取的信息如时间就在tag里面。下面我来分析一下tag。
tag的格式如下:
1字节的类型。tag的类型目前有三种,分别为音频tag(0x08),视频tag(0x09),脚本tag(0x12)。(图例中是0x12)
3个字节的数据大小,即上面所说的内容的大小 0x000920
3个字节的时间戳  数据的时间戳(单位级为毫秒,如果要转为秒要除以1000) 0x000000
1个字节的时间戳扩展 0x00
3个字节的streamID,目前都是0 0x000000
之后的0x02开始的就是数据内容了,如脚本数据内容metadata,音频数据内容,视频数据内容。
大家是否还有注意到,在0x12 tag类型前面有4个字节 0x00000000,这个是表示前一个tag的大小。由于这里是第一个tag,所以无所谓前面的tag的大小,就为0了。
知道了Flv的文件格式,要读取时间那是易如反掌了。
什么?不会读取字节?汗,请打开搜索引擎,输入“xx语言 读取字节”。

 下面给出程序:

flv.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="flv.aspx.cs" Inherits="flv" %>

<!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 runat="server">
    <title>flvinfo</title>
    <style type="text/css">
       body{font-size:12px;}
       td{height:20px; font-size:12px; padding:3px;}
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div style=" background:#cccccc; padding-left:20px;">
    <br />
    <div style=" background:#cccccc; text-align:left; padding:3px;">
        <strong>Flv文件的结构:</strong><br />
        <table border="1" bordercolor="#000000" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
            <tr>
                <td style="height: 20px" colspan="9">&nbsp;Flv的头文件格式比较简单,由9个字节组成.&nbsp;</td>
                <td style="height: 20px" colspan="4">&nbsp;tag1</td>
                <td style="height: 20px">&nbsp;tag2</td>
                <td style="height: 20px" colspan="3">&nbsp;tag3</td>
                <td style="height: 20px" colspan="3">&nbsp;tag4</td>
                <td style="height: 20px">&nbsp;tag5</td>
                <td style="height: 20px" colspan="3">&nbsp;tag6</td>
                <td style="height: 20px;"></td>
            </tr>
            <tr>
                <td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td> 6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td>
                <td>14</td><td>15</td><td> 16</td><td>17</td><td>18</td><td>19</td><td>20<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值