获取网络flv时长易语言源码.flv格式解析
网上有很多关于flv格式解析的博客 可自行翻阅 下面列出本贴需要的部分

onMetaData
onMetaData中包含了音视频相关的元数据,封装在Script Data Tag中,它包含了两个AMF。

第一个AMF:

第1个字节:0x02,表示字符串类型
第2-3个字节:UI16类型,值为0x000A,表示字符串的长度为10(onMetaData的长度);
第4-13个字节:字符串onMetaData对应的16进制数字(0x6F 0x6E 0x4D 0x65 0x74 0x61 0x44 0x61 0x74 0x61);
第二个AMF:

第1个字节:0x08,表示数组类型;
第2-5个字节:UI32类型,表示数组的长度,onMetaData中具体包含哪些属性是不固定的。
第6个字节+:比如duration,则:
第6-9个字节:0x0008,表示长度为8个字节;
第10-17个字节:0x6475 7261 7469,表示 duration 这个字符串;
第18个字节:0x00,表示为数值类型;
第19-26个字节:0x…,表示具体的时长;
更多onMetaData字段的定义:

字段 字段类型 字段含义
duration DOUBLE 文件的时长
width DOUBLE 视频宽度(px)
height DOUBLE 视频高度(px)
videodatarate DOUBLE 视频比特率(kb/s)
framerate DOUBLE 视频帧率(帧/s)
videocodecid DOUBLE 视频编解码器ID(参考Video Tag)
audiosamplerate DOUBLE 音频采样率
audiosamplesize DOUBLE 音频采样精度(参考Audio Tag)
stereo BOOL 是否立体声
audiocodecid DOUBLE 音频编解码器ID(参考Audio Tag)
filesize DOUBLE 文件总得大小(字节)

00 08 64 75 72 61 74 69 6F 6E 00 40 A7 5D 1E B8 51 EB 85

08表示8个字节

64 75 72 61 74 69 6F 6E 表示duration文字

上面选中部分则就是具体的时长

由于 duration 是双浮点数据类型

所以要将这个十六进制转成双浮点即可获取正确的时长

发表回复

后才能评论