<四>关于flv格式解析
关于ffmpeg这里插入一个章节-----关于flv格式的解析,因为在ffmpeg推流的过程中,最流行的就是将数据封装成flv格式,通过rtmp传输,所以搞明白flv的格式构成是十分有必要的,我可能会扣的比较细。
1.首先来看flv的最外层,FLVHeader + PreviousTagSize(前一个tag的大小)+ Tag + .... + PreviousTagN + TagN,这部分我相信很多文章都有讲过,我就不细说了。
表1:
Field |
Size |
Comment |
签名 |
1Byte |
’F’(0X46) |
签名 |
1Byte |
‘L’(0X4C) |
签名 |
1Byte |
‘V’(0x56) |
版本 |
1Byte |
FLV的版本。0x01表示FLV 版本是1 |
保留字段 |
5bits |
前五位必须是0 |
是否有音频流 |
1bits |
音频流是否存在标志 |
保留字段 |
1bits |
必须是0 |
是否有视频流 |
1bits |
视频流是否存在标志 |
文件头大小 |
4Byte |
FLV版本1时填写9,表明的是FLV头的大小,为后期的FLV版本扩展使用。包括这四个字节。 数据的起始位置就是从文件开头偏移这么多的大小。 |
TAG为视频,也就是TagType=0x09时的组成图示,配合表二食用效果更佳:
表2:
Field |
type |
Comment |
TAG类型 |
1Byte |
0x08: audio 0x09: video 0x12: script data——这里是一些描述信息。 all others: reserved其他所有值未使用。 |
数据大小 |
3Byte |
数据区的大小,不包括包头。包头总大小是11个字节。 |
时戳 |
3Byte |
当前帧时戳,单位是毫秒。相对于FLV文件的第一个TAG时戳。第一个tag的时戳总是0。——不是时戳增量,rtmp中是时戳增量。 |
时戳扩展字段 |
1Byte |
如果时戳大于0xFFFFFF,将会使用这个字节。这个字节是时戳的高8位,上面的三个字节是低24位。 |
流ID |
3Byte |
总是0 |
数据区Data |
Byte[n] |
真正的数据 |
FrameType为数据类型,CodecID为包装类型,1为JPEG,2为H263,3为Screen video,4为On2 VP6,5为On2 VP6,6为Screen videoversion 2,7为AVC。
表3:
FrameType |
Comment |
1 |
关键帧(I帧) |
2 |
非关键帧(P帧,B帧) |
3 |
H263的非关键帧 |
4 |
服务器生成的关键帧 |
5 |
视频信息或命令帧 |
表4:
CodecID |
Comment |
VideoDataType |
1 |
JPEG |
|
2 |
H263 |
H263VideoPacket |
3 |
Screen video |
ScreenVideopacket |
4 |
On2 VP6 |
VP6FLVVideoPacket |
5 |
On2 VP6 with alpha channel 6: Screen video version 2 |
VP6FLVAlphaVideoPacket |
6 |
Screen video version 2 |
ScreenV2VideoPacket |
7 |
AVC |
AVCVideoPacket |
注明:在VideoHeader为0x17的情况下,为关键帧的AVCVideoPacket,在这种情况下VideoData包含FrameType和CompositionTime。
在这里我们对最常用的AVCVideoPacket进行解构:
AVCVideoPacketBody里面的内容是由AVCPacketType来决定的,其中0x02的AVCEndOfSequence并非必须的。
注:flv中的nalu并非标准的nalu数据格式,标准的nalu采用00 00 00 01或者 00 00 01分隔,在flv中是没有分割字节的。也即是说在CompostionTime之后直接就是NALU的数据。
至此flv的总体结构就分析完毕了,得益于flv结构简单明了,所以才会被广泛用于网络传输。
如果有什么分析错误的地方,希望能在评论告诉我,让我改正,还是那句话大家共同进步!!!!
<四>关于flv格式解析相关推荐
- 音视频学习(四、FLV格式解析)
由于上一节使用到了rtmp推流,然后一直推一直出错,用rtmp推流的数据格式是FLV,所以这一节分析一下FLV的格式,补充补充知识. 4.1 FLV格式解析 4.1.1 FLV总体认识 FLV 是FL ...
- 音视频 FLV格式解析
前言 本文介绍FLV封装格式,直播场景下拉流比较常见的是http-flv直播流,具有延时低.易传输等特点. 格式概览 总体上看,FLV包括文件头(File Header)和文件体(File Body) ...
- 43.FFmpeg学习笔记 - flv格式解析
一.flv文件结构 flv文件由flv header 和flv body组成. 二.flv header Header 部分记录了FLV的类型.版本.流信息.Header 长度等.一般整个Header ...
- flv格式详解+实例剖析
简介 FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧.封装播放简单等特点,使其很适合在网络上进行应用,目前主流的视频网站无一例外地使用了FLV格式.另外由于当前浏览 ...
- 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...
- FLV 封装格式解析
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10662941.html FLV (Flash Video) 是由 Adobe 公司推出的 ...
- C++实现flv封装格式解析(音视频学习笔记三)
这篇博文使用C++解析一个flv文件信息,对其中一些重要的信息进行log输出,对flv的数据封装格式信息不清楚的可以去看这篇博文-FLV 封装格式解析,里面详细说明了flv文件的结构信息.这篇博文参考 ...
- [笔记]音视频学习之视音频数据处理入门《五》FLV封装格式解析
视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 文章目录 前言 总结 前言 总结
- 视音频数据处理入门:FLV封装格式解析
===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...
最新文章
- unity调用普通java类_Unity中C#和Java的相互调用实例代码
- 程序员看片必备神器!包邮送一台!!
- Docker介绍及安装
- 线程间通讯《代码》pthread_cond_t
- Optimization Algorithms
- 推理集 —— 现场的观察
- 对数组名取地址a和 数组首地址a
- Unity3D AssetStore下载文件/项目保存位置
- 独家首发成语类智力多玩法微信小程序源码下载好玩而又强大
- 中国十大骨干网,了解互联网的真实结构
- Matplotlib is currently using agg问题
- Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
- python进程和线程大全
- 【UE4】联网游戏开发的正确姿势
- zookeeper核心原理
- jersey java_Jersey 入门与Javabean
- 爬虫,爬糗百热门段子
- DSPE-PEG2K-MAL|磷脂聚乙二醇马来酰亚胺(DSPE-PEG-MAL)|二硬脂酰基磷脂酰乙醇胺 聚乙二醇 马来酰亚胺,齐岳生物
- 使用系统打印服务器配置,打印服务器配置教程.pdf
- 一篇好文章带你走出阴霾
热门文章
- 利用 Matlab 在 CST 中自动构建龙伯(Luneburg)透镜
- 红帽子linux装mysql_linux安装mysql
- 去律师面试python_律师事务所---面试篇
- 关于NeteaseCloudMusicApi接口文档
- Proteus8.9 VSM Studio Keil编译器仿真AT89C51RD2系列019_lcdPG12864
- 软件设计模式与体系结构 课后练习1
- 怎么把pdf分割成一页一页的
- 一个普通应届生,简历上写什么能过BAJT的海选初筛?(附实例模板)
- Vue登录拦截 登录后继续跳转指定页面
- python获取时间戳字符串