FLV格式分析

FLV是Adobe公司的流媒体格式,用于互联网视频传输。文章详细介绍了FLV的文件结构,包括文件头、文件体、Tag数据,以及ScriptTagData(元信息)、AudioTagData(音频类型)和VideoTagData(视频类型)的结构。此外,还讨论了Timestamp和CompositionTime在视频帧中的作用和编码时间与显示时间的关系。
摘要由CSDN通过智能技术生成

1. FLV简介

FLV(Flash Video)是Adobe公司推出的一种流媒体格式,由于其封装后的音视频简单等特点,非常使用于互联网的使用. 目前主流的视频网站基本上都支持FLV,其格式封装的文件后缀为.flv

2. FLV封装格式解析

FLV封装格式有一个文件头(file header)和文件体(file body)组成.其中FLV body由一对对的(previous tag size字段 +tag)组成,previous tag size 字段排在tag前面,占用4字节,它代表了上一个tag的大小,用于逆向读取处理. FLV header后的第一个previous tag size为0.
Tag一般可以分为三种类型:脚本(帧)数据类型,视频数据类型,音频数据类型.
FLV以大端存储方式存放,其结构为:
在这里插入图片描述
注意:

1.flv文件中的Timestampe和TimestampeExtended组合就是dts,也就是编码时间,单位为ms,如果没有B帧的话dts等于pts.
2.CompositionTime表示pts相对于dts的偏移值,在每个视频tag的第14~16字节.
显示时间(pts)=编码时间(dts)+CompositionTime

3.FLV解析流程框架

在这里插入图片描述

4.Script Tag Data结构(脚本类型、帧类型)

该Tag又被称为MetaDataTag,存放一些关于FLV视频和音频的元信息,比如:duration,width,height等。通常该类型tag会作为FLV的第一个Tag,并且只有一个
该类型TagData的结构为:
在这里插入图片描述
第一个AMF包:读一个字节表示AMF包类型,一般总为0x02,表示字符串。第2~3字节为UI16类型值,表示字符串的长度,一般总为⼀般总是0x000A(“onMetaData”⻓度)。后⾯字节为具体的字符串,⼀般总为(“onMetaData“ 6F,6E,4D,65,74,61,44,61,74,61)。
第⼆个AMF包:第1个字节表示AMF包类型,⼀般总是0x08,表示数组。第2-5个字节为UI32类型值,表示数组元素的个数。后⾯即为各数组元素的封装,数组元素为元素名称和值组成的对。常⻅的数组元素如下表所示。

Comment例如
duration时⻓(秒)210.732
width视频宽度768.000
height视频⾼度320.000
videodatarate视频码率207.260
framerate视频帧率25.000
videocodecid视频编码ID 7.000 (H264为7)
audiodatarate⾳频码率29.329
audiosamplerate⾳频采样率44100.000
stereo是否⽴体声1
audiocodecid⾳频编码ID 10.000 (AAC为10)
major_brand格式规范相关isom
minor_version格式规范相关512
compatible_brands格式规范相关isomiso2avc1mp41
encoder封装⼯具名称Lavf54.63.104
filesize⽂件⼤⼩(字节)6636853.00

5.Audio Tag Data结构(音频类型)

音频Tag Data前两个字节:

  • 第一个字节包含音频数据的参数信息
  • 第二个字节开始为数据流
FieldTypeComment
⾳频格式 SoundFormatUB40 = Linear PCM, platform endian1 =ADPCM 2 = MP3 3 = Linear PCM, little endian 4 = Nellymoser 16-kHz mono 5 = Nellymoser 8-kHz mono 6 = Nellymoser 7 = G.711 A-law logarithmic PCM 8 = G.711 mu-law logarithmic PCM 9 = reserved 10 = AAC 11 = Speex 14 = MP3 8-Khz 15 = Device-specific sound
采样率SoundRateUB20 = 5.5kHz 1 = 11kHz 2 = 22.05kHz 3 = 44.1kHz 对于AAC总是3。但实际上AAC是可以⽀持到48khz以上的频率(这个参数对于AAC意义不⼤)。
采样精度 SoundSizeUB10 = snd8Bit 1 = snd16Bit 此参数仅适⽤于未压缩的格式,压缩后的格式都是将其设为1
⾳频声道SoundTypeUB10 = sndMono 单声道 1 = sndStereo ⽴体声,双声道 对于AAC总是1

6.Video Tag Data结构(视频类型)

视频Tag Data开始的:

  • 第⼀个字节包含视频数据的参数信息,
  • 第⼆个字节开始为视频流数据。
FieldTypeComment
帧类型UB41: keyframe (for AVC, a seekable frame)——h264的IDR,关键帧 2: inter frame (for AVC, a non- seekableframe)——h264的普通帧 3: disposable inter frame (H.263 only) 4: generated keyframe (reserved for server use only) 5: video info/command frame
编码IDUB4使⽤哪种编码类型:1: JPEG (currently unused) 2: Sorenson H.263 3: Screen video 4: On2 VP6 5: On2 VP6 with alpha channel 6: Screen video version 2 7: AVC
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

相知-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值