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

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语言 读取字节”。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值