FLV-RTMP关系

原文地址:https://www.jianshu.com/p/8a8dbc48c997


文章目录

  • FLV文件格式
  • 1. FLV Header
  • 2. FLV Body

RTMP协议与 FLV 又有什么关系呢际 上,FLV文件与 RTMP 之间是“近亲”关系,甚至比“近亲”还要近,亲得就好像是“一个人”似的。

FLV文件格式

我们先来看一下 FLV 的文件格式,如下图所示:

image-20210109105929512

这张图表清晰地表达了 FLV Header 中每个域所占的字节以及该域的具体含义。

2. FLV Body

从“FLV文件格式结构图”我们可以看出,FLV Body 是由多个 Previous TagSizeTag 组成的。其含义如 下图表所示,其中PreviousTagSize 占 4个字节,表示前一个 Tag 的大小。这里需要注意的是,第一个 Previous TagSize 比较特殊,由于它前面没有 Tag 数据,所以它的值必须为 0

Tag Header

  • TagType,占1个字节,表示该Tag的类型,可以是音频、视频和脚本。如果类型为音频,说明这个Tag存 放的是音频数据;如果类型是视频,说明存放的是视频数据。
  • DataSize,占3个字节,表示音频/视频数据的?度。
  • Timestamp和扩展Timestamp,一共占4个字节,表示数据生成时的时间戳
  • StreamID,占3个字节,总是为 0

Tag Data 中存放的数据,是根据 TagType 中的类型不同而有所区别的。也就是说,假如 TagType 指定的 是音频,那么 Tag Data中存放的就是音频数据;如果 TagType 指定的是视频,则Tag Data中存放的就是视 频数据。

无论TagData中存放的是音频数据还是视频数据,它们都是由 Header 和 Data 组成。也就是说,如果该 Tag 是一个音频 Tag ,那么它的数据就是由“AudioHeader + AudioData”组成;如果是一个视频 Tag,则它的数据是由“VideoHeader + VideoData”组成。

翻看RTMP协议,查看它的 6.1.1 小节,你会发现它定义的 RTMP Message Header 与 Tag Header 是一模一样的。下图是我从 RTMP 协议中截取的协议头:

FLV-RTMP关系

RTMP Message Header

因此,我们可以说FLV文件就是由“FLV Header + RTMP数据”构成的。这也揭开了 FLV与 RTMP之间的关 系秘密,即 FLV 是在 RTMP 数据之上加了一层“?甲”。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月6日
下一篇 2022年9月6日

相关推荐