flv 文件格式详解
flv容器的扩展名是.flv 是邮adobe推出的一种封装格式,主要用于流媒体系统,由于flash player的普遍使用,flv的容器也比较流行。
flv的封装格式比较简单,由一个header和body构成。
其官方文档地址为:
http://read.pudn.com/downloads358/doc/fileformat/1556492/adobe_video_file_format_spec_v10.pdf
FLV Header
FLV header字段说明如图:
内容 类型 说明
Signature uint_8 “F” 0x46
Signature uint_8 “L” 0x4C
Signature uint_8 “V” 0x56
Version uint_8 0x01
TypeFlagsReserved UB[5] 0
TypeFlagsAudio UB[1] 标记是否有音频1代表有
TypeFlagsReserved UB[1]
TypeFlagsVideo UB[1] 标记是否有视频1代表有
DataOffset uint_32 header大小
图表中表示的是flv header的各字段。这个是header是固定的,总共的大小为9个字节,所以DATAOFFSET基本为9
如图:这就是flv header 左边就是16进制数据。
FLV body
FLV body有PreviousTagSize 和 tag 两部分组成。
PreviousTagSize 代表的是上一个tag的大小, PreviousTagSize 为0
tag 具体的音视频数据
内容 类型 说明
PreviousTagSize 0 uint_32 0
tag1 FLVTAG tag
PreviousTagSize1 uint_32 上一个tag大小
… … …
tagN FLVTAG tag
PreviousTagSizeN uint_32 上一个tag大小
PreviousTagSize
就是上一个tag的大小, 第一个PreviousTagSize 总是0,因为上一个tag没有是,紧临着FLV header。大小是4个字节。
tag
tag由 header和data 两部分构成。
tag header
内容 类型 说明
tagtype uint_8 tag类型 0x08代表音频 0x09 代表视频 0x12 代表脚本
datasize uint_24 代表tag data的大小
timestamp uint_24 时间戳 毫秒
timestampExtended uint_8 额外时间戳
streamID uint_24 0
一个tag header的大小为12个字节。
tag data
tag data有不同的类型,而不同的类型结构也是不一样的。
audio tag
内容 类型 说明
soundformat UB[4] 音频格式0 = Linear PCM, platform endian1 = ADPCM2 = MP33 = Linear PCM, little endian4 = Nellymoser 16-kHz mono5 = Nellymoser 8-kHz mono6 = Nellymoser7 = G.711 A-law logarithmic PCM8 = G.711 mu-law logarithmic PCM9 = reserved10 = AAC11 = Speex14 = MP3 8-Khz15 = Device-specific soundsoundrate UB[2] 音频采样率0 = 5.5-kHz 1 = 11-kHz2 = 22-kHz3 = 44-kHz(AAC一直是3)
soundsize UB[1] 音频位深0 = snd8Bit1 = snd16Bit
soundType UB[1] 音频声道0 = sndMono(单声道)1 = sndStereo(立体声)
soundData uint_8 音频编码数据
由图表可知,audio tag描述总共占用一个字节,剩余就是音频的编码数据 ,而音频的编码数据的存储方式也是有区别,这里就不详细说明了。
video tag
内容 类型 说明
frameType UB[4] 1: keyframe (for AVC, a seekable frame)关键帧2: inter frame (for AVC, a non-seekable frame)非关键帧3: disposable inter frame (H.263 only)4: generated keyframe (reserved for server use only)5: video info/command frame
codecId UB[4] 1: JPEG (currently unused)2: Sorenson H.2633: Screen video4: On2 VP65: On2 VP6 with alpha channel6: Screen video version 27: AVC
videoData If CodecID == 2 H263VIDEOPACKETIf CodecID == 3 SCREENVIDEOPACKETIf CodecID == 4 VP6FLVVIDEOPACKETIf CodecID == 5 VP6FLVALPHAVIDEOPACKETIf CodecID == 6 SCREENV2VIDEOPACKETif CodecID == 7AVCVIDEOPACKET
若是AVC 即264的数据
内容 类型 说明
AVCPacketType uint_8 0: AVC sequence header1: AVC NALU2: AVC end of sequence (lower level NALU sequence ender is not required or supported)
CompositionTime int_24 if AVCPacketType == 1Composition time offset else0
Data uint_8[n] if AVCPacketType == 0AVCDecoderConfigurationRecordelse if AVCPacketType == 1One or more NALUs (can be individualslices per FLV packets; that is, full framesare not strictly required)else if AVCPacketType == 2empty
script tag
脚本tag 主要是在FLVheader和body之间的那个onMetaData, 里面存储都整个flv的信息,也可以包含各个tag的偏移量。这并不是一个必要的tag,没有该tag也可以进行播放。这个tag就不详细叙述了。该tag可以通过工具yamdi进行生成,该工具就是对flv进行流化处理。yamdi的地址为
https://github.com/ioppermann/yamdi
https://sourceforge.net/projects/yamdi/files/
相关工具
播放工具
vlc,ffplay, video.js,ijkplayer等
测试工具
flvAnalyser: https://github.com/zymill/flvAnalyser
flvparser : https://download.csdn.net/download/cabbage2008/9343003
FLV Format Analysis
https://sourceforge.net/projects/flvformatanalysis/
开发工具
rtmpdump
http://rtmpdump.mplayerhq.hu/
flvparser
https://github.com/riverlight/FlvParser
yamadi
https://github.com/ioppermann/yamdi
ffmpeg
http://ffmpeg.org/
图形详解
相同的颜色, 相同的级别
flv 文件格式详解相关推荐
- Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解
http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...
- S19文件格式详解(总结)以及与hex文件的互转
S19文件格式详解 S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motoro ...
- MP4文件格式详解——文件类型ftyp
原谅地址:http://blog.csdn.net/pirateleo/article/details/7583321 文件类型ftyp(ISO-14496-12) Author:Pirate Leo ...
- MP4文件格式详解——文件类型ftyp(转)
文件类型ftyp(ISO-14496-12) Author:Pirate Leo Email:codeevoship@gmail.com ISO 14496 - 12 定义了一种封装媒体数据的基础文件 ...
- 多媒体 MP4文件格式详解——文件类型ftyp
ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...
- MP4文件格式详解——结构概述
MP4文件格式详解(ISO-14496-12/14) 一.基本概念 1. 文件,由许多Box和FullBox组成. 2. Box,每个Box由Header和Data组成. 3. FullBox,是Bo ...
- S19文件格式详解(1)
1.记录结构 0 1 2 3 4 5 S Type Byte Count Address Data Checksum 一个SREC格式文件包含一系列ASCLL格式的的数据.具体如下: Record t ...
- ZIP文件格式详解(一)——文件数据格式
ZIP文件格式详解(一)--文件数据格式 ------------------------------------------------------------------------------- ...
- MP4文件格式详解——元数据moov(二)tkhd box
ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...
- 刻录启动镜像之一:镜像文件格式详解
刻录启动镜像之一:镜像文件格式详解 Disk Image CD/DVD Live CD .iso .bin / .raw / .img .cue .dmg .nrg Disk Image 磁盘映像是包 ...
最新文章
- Spring Boot并不重复“造轮子”
- 把偷快递的贼炸到怀疑人生!不愧是 NASA 工程师,奇思妙想
- Javascript弹出对话框 确定取消转到不同页面
- socket的系统调用
- Java——集合(Map集合的两种迭代)
- 着迷英语900句_开明的系统管理员如何让我着迷于Linux
- hadoop1.2.1的安装
- 深入浅出“跨视图粒度计算”--2、INCLUDE表达式
- 2017c语言自学贴吧,【图片】17年1.9开启我的C语言学习之路—小白篇【c语言吧】_百度贴吧...
- java程序设计精编教程第3版电子版课后答案_java程序设计精编教程第3版答案
- 【css】各个字号大小对照表
- html标签选择器只认最后一个,选择某类的最后一个元素——CSS3伪类选择器走过的坑...
- 数据库缓存服务——Redis(企业级)
- 学习方法之08克服拖延症,及时快速地完成任务
- MySQL索引的介绍和使用
- JAVA系列之JVM优化
- 使用 Vue SVG 快速绘制曲线图(带动画)
- oracle查询部门名称,oracle查询习题(一)
- windows64位jdk678网盘下载
- 服务器更换桌面壁纸,通过VBS更换桌面设置壁纸源码