关于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格式解析相关推荐

  1. 音视频学习(四、FLV格式解析)

    由于上一节使用到了rtmp推流,然后一直推一直出错,用rtmp推流的数据格式是FLV,所以这一节分析一下FLV的格式,补充补充知识. 4.1 FLV格式解析 4.1.1 FLV总体认识 FLV 是FL ...

  2. 音视频 FLV格式解析

    前言 本文介绍FLV封装格式,直播场景下拉流比较常见的是http-flv直播流,具有延时低.易传输等特点. 格式概览 总体上看,FLV包括文件头(File Header)和文件体(File Body) ...

  3. 43.FFmpeg学习笔记 - flv格式解析

    一.flv文件结构 flv文件由flv header 和flv body组成. 二.flv header Header 部分记录了FLV的类型.版本.流信息.Header 长度等.一般整个Header ...

  4. flv格式详解+实例剖析

    简介 FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧.封装播放简单等特点,使其很适合在网络上进行应用,目前主流的视频网站无一例外地使用了FLV格式.另外由于当前浏览 ...

  5. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  6. FLV 封装格式解析

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10662941.html FLV (Flash Video) 是由 Adobe 公司推出的 ...

  7. C++实现flv封装格式解析(音视频学习笔记三)

    这篇博文使用C++解析一个flv文件信息,对其中一些重要的信息进行log输出,对flv的数据封装格式信息不清楚的可以去看这篇博文-FLV 封装格式解析,里面详细说明了flv文件的结构信息.这篇博文参考 ...

  8. [笔记]音视频学习之视音频数据处理入门《五》FLV封装格式解析

    视音频数据处理入门:FLV封装格式解析 视音频数据处理入门:UDP-RTP协议解析 文章目录 前言 总结 前言 总结

  9. 视音频数据处理入门:FLV封装格式解析

    ===================================================== 视音频数据处理入门系列文章: 视音频数据处理入门:RGB.YUV像素数据处理 视音频数据处理 ...

最新文章

  1. unity调用普通java类_Unity中C#和Java的相互调用实例代码
  2. 程序员看片必备神器!包邮送一台!!
  3. Docker介绍及安装
  4. 线程间通讯《代码》pthread_cond_t
  5. Optimization Algorithms
  6. 推理集 —— 现场的观察
  7. 对数组名取地址a和 数组首地址a
  8. Unity3D AssetStore下载文件/项目保存位置
  9. 独家首发成语类智力多玩法微信小程序源码下载好玩而又强大
  10. 中国十大骨干网,了解互联网的真实结构
  11. Matplotlib is currently using agg问题
  12. Unity3D实现3D立体游戏原理及过程,需偏振眼镜3D显
  13. python进程和线程大全
  14. 【UE4】联网游戏开发的正确姿势
  15. zookeeper核心原理
  16. jersey java_Jersey 入门与Javabean
  17. 爬虫,爬糗百热门段子
  18. DSPE-PEG2K-MAL|磷脂聚乙二醇马来酰亚胺(DSPE-PEG-MAL)|二硬脂酰基磷脂酰乙醇胺 聚乙二醇 马来酰亚胺,齐岳生物
  19. 使用系统打印服务器配置,打印服务器配置教程.pdf
  20. 一篇好文章带你走出阴霾

热门文章

  1. 利用 Matlab 在 CST 中自动构建龙伯(Luneburg)透镜
  2. 红帽子linux装mysql_linux安装mysql
  3. 去律师面试python_律师事务所---面试篇
  4. 关于NeteaseCloudMusicApi接口文档
  5. Proteus8.9 VSM Studio Keil编译器仿真AT89C51RD2系列019_lcdPG12864
  6. 软件设计模式与体系结构 课后练习1
  7. 怎么把pdf分割成一页一页的
  8. 一个普通应届生,简历上写什么能过BAJT的海选初筛?(附实例模板)
  9. Vue登录拦截 登录后继续跳转指定页面
  10. python获取时间戳字符串