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 文件格式详解相关推荐

  1. Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解

    http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...

  2. S19文件格式详解(总结)以及与hex文件的互转

    S19文件格式详解 ​​ ​​ S-record格式文件是Freescale CodeWarrior编译器生成的后缀名为.S19的程序文件,是一段直接烧写进MCU的ASCII码,英文全称问Motoro ...

  3. MP4文件格式详解——文件类型ftyp

    原谅地址:http://blog.csdn.net/pirateleo/article/details/7583321 文件类型ftyp(ISO-14496-12) Author:Pirate Leo ...

  4. MP4文件格式详解——文件类型ftyp(转)

    文件类型ftyp(ISO-14496-12) Author:Pirate Leo Email:codeevoship@gmail.com ISO 14496 - 12 定义了一种封装媒体数据的基础文件 ...

  5. 多媒体 MP4文件格式详解——文件类型ftyp

    ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...

  6. MP4文件格式详解——结构概述

    MP4文件格式详解(ISO-14496-12/14) 一.基本概念 1. 文件,由许多Box和FullBox组成. 2. Box,每个Box由Header和Data组成. 3. FullBox,是Bo ...

  7. S19文件格式详解(1)

    1.记录结构 0 1 2 3 4 5 S Type Byte Count Address Data Checksum 一个SREC格式文件包含一系列ASCLL格式的的数据.具体如下: Record t ...

  8. ZIP文件格式详解(一)——文件数据格式

    ZIP文件格式详解(一)--文件数据格式 ------------------------------------------------------------------------------- ...

  9. MP4文件格式详解——元数据moov(二)tkhd box

    ISO 14496 - 12 定义了一种封装媒体数据的基础文件格式,mp4.3gp.ismv等我们常见媒体封装格式都是以这种基础文件格式为基础衍生的. 如果从全局角度了解基础文件格式,请看我之前的博文 ...

  10. 刻录启动镜像之一:镜像文件格式详解

    刻录启动镜像之一:镜像文件格式详解 Disk Image CD/DVD Live CD .iso .bin / .raw / .img .cue .dmg .nrg Disk Image 磁盘映像是包 ...

最新文章

  1. Spring Boot并不重复“造轮子”
  2. 把偷快递的贼炸到怀疑人生!不愧是 NASA 工程师,奇思妙想
  3. Javascript弹出对话框 确定取消转到不同页面
  4. socket的系统调用
  5. Java——集合(Map集合的两种迭代)
  6. 着迷英语900句_开明的系统管理员如何让我着迷于Linux
  7. hadoop1.2.1的安装
  8. 深入浅出“跨视图粒度计算”--2、INCLUDE表达式
  9. 2017c语言自学贴吧,【图片】17年1.9开启我的C语言学习之路—小白篇【c语言吧】_百度贴吧...
  10. java程序设计精编教程第3版电子版课后答案_java程序设计精编教程第3版答案
  11. 【css】各个字号大小对照表
  12. html标签选择器只认最后一个,选择某类的最后一个元素——CSS3伪类选择器走过的坑...
  13. 数据库缓存服务——Redis(企业级)
  14. 学习方法之08克服拖延症,及时快速地完成任务
  15. MySQL索引的介绍和使用
  16. JAVA系列之JVM优化
  17. 使用 Vue SVG 快速绘制曲线图(带动画)
  18. oracle查询部门名称,oracle查询习题(一)
  19. windows64位jdk678网盘下载
  20. 服务器更换桌面壁纸,通过VBS更换桌面设置壁纸源码

热门文章

  1. libyuv 海思平台编译测试
  2. cmd与服务器文件传输,渗透技巧--通过cmd上传文件的N种方法
  3. 细粒度分类网络之WS-DAN论文阅读附代码
  4. 零跑C01/S01/C11/T03维修手册电路图培训手册用户手册技术资料
  5. java+swing+mysql小型超市管理系统
  6. lena图像,直方图均衡
  7. Linux下C语言编程资料
  8. 计量经济学搭建模型总结
  9. 5阶无向完全图_离散数学图论答案
  10. 无线通信设备安装工程概预算编制_深圳电气安装造价培训-如何计算电气设备安装工程预算定额?...