ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FLV格式详解

2022-02-10 19:01:57  阅读:236  来源: 互联网

标签:字节 tag FLV Header Tag 格式 Data 详解


FLV格式概述:

FLV(Flash Video)是Adobe公司设计开发的一种流行的流媒体格式,由于其视频文件体积轻巧、封装简单等特点,使其很适合在互联网上进行应用。此外,FLV可以使用Flash Player进行播放,而Flash Player插件已经安装在全世界绝大部分浏览器上,这使得通过网页播放FLV视频十分容易。

Flv文件格式

Flv由文件头(File Header)和 文件体(File Body)组成。

Flv Body由一系列的Tag组成,每个Tag又有一个preTagSize字段,标记着前面一个Tag的大小。
在这里插入图片描述

Flv Header

文件头由一下几部分组成:

Signature(3 Byte)+Version(1 Byte)+Flags(1 Bypte)+DataOffset(4 Byte)

Signature 占3个字节:
固定FLV三个字符作为标示。一般发现前三个字符为FLV时就认为他是flv文件。
Version 占1个字节:
标示FLV的版本号。这里我们看到是1
Flags 占1个字节:
内容标示。第0位和第2位,分别表示 video 与 audio 存在的情况.(1表示存在,0表示不存在)。看到0x05,也就是00000101,代表既有视频,也有音频。
DataOffset 占4个字节:
表示FLV的header长度。

下图是Flv Header的内容,(UI8表示无符号8位,也就是一个字节;UB[5]表示一个字节中的5位)
在这里插入图片描述

Flv Body

Flv Body由一个一个Tag组成,每个Tag都有一个preTagSize字段,标记着前面一个Tag的大小。
在这里插入图片描述
Tag有三种类型,Audio Tag(音频Tag),Video Tag(视频Tag),script Tag(又称Metadata Tag)

每个Tag由“Tag Header”和“Tag Data”组成,对于不同类型的Tag,“Tag Header”的格式都是相同的,“Tag Body”的格式就不一样了。
在这里插入图片描述
下面这张图归纳一下上面讲的内容,看完后对flv应该有个总体的了解了。
在这里插入图片描述
一般一个flv文件由一个头部信息,一个script Tag,以及若干个video Tag和audio Tag组成。
在这里插入图片描述
下面来详细讲解每种类型的Tag Data
在这里插入图片描述

Tag Data

Flv有三种tag:“Audio Tag Data”、“Video Tag Data”、“Script Tag Data”
在这里插入图片描述

Aideo tag是由tag Header + Tag Data组成:

tag Header:
TagType: 8 (1 byte)
TagType 代表含义如下:

  • 8: audio

  • 9 : video

  • 18 : script data

DataSize: 7 (3 bytes)
tag Data大小
tag Header大小 = Previous Tag Size - DataSize
TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID

Audio Tag Data:
在这里插入图片描述

Video tag 解析:

video tag是由tag Header + Tag Data组成:
在这里插入图片描述
tag Header:

TagType: 9 (1 byte)
TagType 代表含义如下:

  • 8: audio
  • 9 : video
  • 18 : script data

DataSize: 50 (3 bytes)

  • tag Data大小

  • tag Header大小 = Previous Tag Size - DataSize

TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID

Video Tag Data
在这里插入图片描述

scripts tag 解析:

该类型Tag又通常被称为MetadataTag,会放一些关于FLV视频和音频的元数据信息如:duration、width、height等。通常该类型Tag会跟在FileHeader后面作为第一个Tag出现,而且只有一个。
在这里插入图片描述
tag Header:

TagType: 18 (1 byte)
TagType 代表含义如下:

  • 8: audio

  • 9 : video

  • 18 : script data

DataSize: 293 (3 bytes)

  • tag Data大小

  • tag Header大小 = Previous Tag Size - DataSize

TimeStamp: 0 (3 bytes) 时间戳
TimestampExtended: 0 (1 byte) 扩展时间戳
StreamId: 0 (3 bytes) 流ID

tag Data:

AMF包:第一个字节表示AMF包的类型
在这里插入图片描述
第一个AMF包:
第一个字节一般为0x02,表示字符串,第2-3个字节表示字符串的长度,一般为0x000A,后面跟的就是字符串,一般为"onMetaData"。

第二AMF包:
第一个字节为0x08,表示数组,第2-5个字节表示数组元素个数,后面跟着就是数组的元素,格式为:元素名长度(UI16) + 元素名(UI8[n]) + 元素的值(double),最后以“009”结尾。
在这里插入图片描述

标签:字节,tag,FLV,Header,Tag,格式,Data,详解
来源: https://blog.csdn.net/zranxi/article/details/122866828

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有