FLV-RTMP关系

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

FLV文件格式

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

FLV文件格式结构图

阅读FLV 格式规范文档 从图中我们可以看出,FLV 文件格式由 FLV Header 和 FLV Body 两部分组成。其中,FLV Header 由 9 个字节组成,Body由 Pre TagSize 和 Tag 组 成。

为使你对它们有一个更清楚的认知,下面我们就来详细介绍一下 FLV Header 和 FLV Body。

1. FLV Header

它由 9 个字节组成:3个字节的 “F”“L”“V”字母,用于标记该文件是 FLV 文件;1个字节的 Version, 指明使用的 FLV 文件格式的版本;1个字节的 Type 标识,用于表明该FLV文件中是否包括音频或视频; 4个 字节的 FLV Header ⻓度,由于 FLV 文件格式头是固定 9 个字节,这个字段设置得有点多余。

Type 标识(TypeFlag)又可以细分为: 1bit 用于标识FLV文件中是否有音频数据;1bit标识FLV文件中是否有视频数据;如果两个 bit 位同时置 1,说明该FLV 文件中既有音频数据又有视频数据,这也是通常情况下 FLV Header 的设置;除了两个 bit 的音视频数据标识外,其他位都是预留位,必须全部置0。详细的含义可 以参考下面张图表:

image-20210109105929512

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

2. FLV Body

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

image-20210109110131182

接下来我们再来看一下 FLV 中的 Tag,从 FLV文件格式结构图中我们可以看到 Tag 由两部分组成,即 Tag Header 和 Tag Data

Tag Header 各字段的含义如下图所示:

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 协议中截取的协议头:

RTMP Message Header

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 讲讲FLV文件格式。以及数据如何放置的。 FLV里面是由多个Tag构成的:[[tag1][tag2][tag3][...
    半岛夏天阅读 1,214评论 0 1
  • 首先我们获得h264的流,在监听里,我们通过参数可以获得RTMP包 IStreamPacket,调用getData...
    userName阅读 3,520评论 0 52
  • 前言 2018 年 12 月,接到了一个调查原有直播系统播放端与编码端时差对不上的任务,于是首先开始学习 RTMP...
    jerryyyq阅读 1,252评论 0 6
  • 简介 FLV(Flash Video)是现在非常流行的流媒体格式,由于其视频文件体积轻巧、封装播放简单等特点,使其...
    轻口味阅读 1,081评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,700评论 0 5