- 积分
- 136401
- 注册时间
- 2014-12-27
- 最后登录
- 2026-1-23
- 在线时间
- 605 小时
- 威望
- 562
- 贡献
- 29
- 金币
- 52903
- 钢镚
- 1422
- 交易凭证
- 1
- 分享
- 0
- 精华
- 33
- 帖子
- 2094
- 主题
- 1742
TA的每日心情 | 擦汗 2018-4-10 15:18 |
|---|
签到天数: 447 天 [LV.9]以坛为家II
超级版主
    
- 威望
- 562
- 贡献
- 29
- 金币
- 52903
- 钢镚
- 1422
 
|
FLV是一个二进制文件,由文件头(FLV header)和很多tag组成。tag又可以分成三类:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。
FLV Header 一般比较简单,包括文件类型之类的全局信息 | 文件类型 | 3bytes | 总是FLV(0x46 0x4C 0x56),否则... | 版本
| 1byte | 一般是0x01,表示FLV version 1
| | 流信息 | 1byte
| 倒数第一bit是1表示有视频,倒数第三bit是1表示有音频,其他都应该是0(有些软件如flvtool2可能造成倒数第四bit是1,不过也没发现有什么不对) | header长度
| 4bytes | 整个文件头的长度,一般是9(3+1+1+4),有时候后面还有些别的信息,就不是9了 | | | | |
FLV Body FLV body就是由很多tag组成的,一个tag包括下列信息: | previoustagsize | 4bytes | 前一个tag的长度,第一个tag就是0 | | tag类型 | 1byte | 三类:
- 8 -- 音频tag
- 9 -- 视频tag
- 18 -- 脚本tag
| | 数据区长度 | 3bytes | | | 时间戳 | 3bytes | 单位毫秒,如果是脚本tag就是0 | 扩展时间戳
| 1byte | tag时间戳扩展 1个字节的时间戳扩展,让时间戳变成4字节,本字节作为时间戳的高位.
| | streamsID | 3bytes | 总是0(不知道干啥用) | | 数据区 | | |
根据不同的tag类型就有不同的数据区
Audio tag 数据区 | audio信息 | 1byte | 前四位bits表示音频格式:
- 0 -- 未压缩
- 1 -- ADPCM
- 2 -- MP3
- 5 -- Nellymoser 8kHz momo
- 6 -- Nellymoser
下面两位bits表示samplerate:
- 0 -- 5.5kHz
- 1 -- 11kHz
- 2 -- 22kHz
- 3 -- 44kHz
下面一位bit表示每个采样的长度:
- 0 -- snd8Bit
- 1 -- snd16Bit
下面一位bit表示类型:
- 0 -- sndMomo
- 1 -- sndStereo
| audio数据区
| 不定 | |
video tag 数据区 | video信息 | 1byte | 前四位bits表示类型:
- 1 -- 关键帧keyframe(视频中的关键帧,数据存储的是整个画面完整的数据,可以提取它来生成图片)
- 2 -- 中间帧inter frame(关键帧之间的状态,不完整的画面数据,需要依靠前面帧的数据生成)
- 3 -- 可任意使用的中间帧disposable inter frame(H.263 only)
后四位bits表示编码器id:
- 2 -- Seronson H.263
- 3 -- Screen video
- 4 -- On2 VP6
- 5 -- On2 VP6 without channel
- 6 -- Screen video version 2
| video数据区
| 不定 | |
script tag 数据区 略n字...
|
|
|