FLV-初学总结

FLV-初学总结

从零开始仅学习了一下午的总结,本文非常稚嫩…
本文为纯初学者的学习记录,为了方便理解,内容未必严谨,可以用作纯新手的入门了解篇。本文主要的参考链接如下⬇️

  • 详细了解FLV:FLV官方文档(Version 10.1)

  • 简单明了的解释FLV协议:稀土掘金:FLV协议5分钟入门浅析

  • 图片形式介绍FLV协议:CSDN:FLV格式详解

  • 案例解析FLV协议:简书:flv文件分析

文章目录

  • FLV-初学总结
    • 1. FLV是什么?(简介)
    • 2. FLV协议构成(Header + Body(tags))
    • 3. FLV header
    • 4. FLV file body
      • 4.1 tag header
      • 4.2 Audio Tags
        • 4.2.1 AACAudio Tags
      • 4.3 Vedio Tags
      • 4.4 ScriptData Tags
    • 5. 再次强调

1. FLV是什么?(简介)

FLV(Flash Video),是一种流媒体的格式,Youtube等视频网站都是通过Flash作为视频播放载体,支撑这些视频网站的技术基础就是——Flash 视频(FLV) 。

国内使用FLV视频格式的网站/应用 包括,淘宝直播,抖音视频,bilibili,土豆,(好像只有爱奇艺不是,但我不是很确定)。

看不懂官方英文简介可以看中文简介。

官方简介(简洁版) Flash video formats FLV, F4V, and SWF (Shockwave Flash) are designed for Flash Player, but they’re commonly used to stream video on YouTube. Flash is not supported by iOS devices.

官方简介(正式版):The FLV video format was developed by Adobe Systems for its Flash Player. It was created to embed video streams in Adobe applications and for use with a Flash plug-in, which made it a popular choice for streaming videos on YouTube. It was designed to offer users consistency and compatibility with other Adobe programs when editing and storing video files, and was notable for its interleaved audio, video, and metadata packets.

百度百科FLV (略有改动):FLV 是一种Adobe公司设计开发的流媒体视频格式,它利用了网页上广泛使用的Flash Player 平台,将视频整合到Flash动画中。也就是说,网站的访问者只要能看Flash动画,自然也能看FLV格式视频,而无需再额外安装其它视频插件,FLV视频的使用给视频传播带来了极大便利。

2. FLV协议构成(Header + Body(tags))

简单来说,FLV由(FLV)header和(FLV)body组成,body由一些tags组成。

FLV = header + body;

header主要包含一些标识,body则由一些tags组成⬇️

FLV body = tag0size + tag1 + tag1size + tag1 ... + tag(n-1)size + tagn 

body中的tags是什么?——可以直接理解为 音/视频内容

body tags分为三种类型:

  • Video Tag:存放视频相关数据;
  • Audio Tag:存放音频相关数据;
  • Script Tag:存放音视频元数据;

3. FLV header

通常来讲,一个协议的头部,是这个协议的标识,版本号,偏移等内容,FLV header也不例外。

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

即FLV header组成为:标识(固定为FLV三个字符) —— 版本号 —— 内容标识 ——Header字段长度;

其中内容标识Flags,标识的是视频、音频的存在情况,第0位和第2位,分别表示 video tags与 audio tags存在的情况,(1表示存在,0表示不存在)。比如,如果Flags = 0x05,也就是00000101,代表既有视频tags,也有音频tags。

FLV header的内容示例

UI8 = unsigned int 8, UB[5] = unsigned byte (1字节)中的第5bit

Field              Type         Comment
Signature          UI8          Signature byte always 'F' (0x46)
Signature          UI8          Signature byte always 'L' (0x4C)
Signature          UI8          Signature byte always 'V' (0x56)
Version            UI8          File version (for example, 0x01 for FLV
version 1)
TypeFlagsReserved  UB[5]        Must be 0
TypeFlagsAudio     UB[1]        Audio tags are present
TypeFlagsReserved  UB[1]         Must be 0
TypeFlagsVideo     UB[1]         Video tags are present
DataOffset         UI32          Offset in bytes from start of file to start of body (that is, size of header version 1 always is 9)

PS:这里我暂时没搞明白,为什么全是UB[1],按理说是写错了,TypeFlagsAudio应该是UB[2],TypeFlagsVideo应该是UB[0],但是全网都是采用这个数据,我怕是我自己理解错了,因此没进行改动。

4. FLV file body

前面已经说过,body由一些tags组成。

FLV file body = tag0size + tag1 + tag1size + tag1 ... + tag(n-1)size + tagn 

tags则由tag header + tag body组成。

tag_i_size 的大小:

  • tag0size = 0;
  • FLV version 1中,tag header 长度为11B。因此tag_i_size = tag_i_tag_body_size + 11。

4.1 tag header

FLV version 1中的tag header固定长度为11B,tag的主要内容如下⬇️

Field              	Type         			Comment

TagType							UI8								8:audio, 9:video, 18:script data, others:reserved

DataSize						UI24							tag body size

Timestamp						UI24							相对于第一个tag的时间戳(毫秒),第一个tag的Timestamp为0

TimestampExtended		UI8								时间戳的扩展字段,当Timestamp的3个字节不够时,启用这个字段,代表高8位

StreamID						UI24							Must be 0

//如上所示,tag header共11B
//注意,Data并不是tag header的内容,而是tag body的内容
Data								取决于TagType			(Tag的具体内容)TagType=8: AUDIODATA, TagType=9: VIDEODATA, TagType=18: SCRIPTDATAOBJECT

Tag内容主要取决于TagType

  • audio
  • video
  • script data
  • others(reserved)

注意:接下来的内容并非原创,主要是为了本文的内容完整性,均来自官方文档截图,对应FLV官方文档(Version 10.1)第70~78页。 如果以后有新的想法,可能会对此部分进行修改或解释。

4.2 Audio Tags

FLV-初学总结_第1张图片

FLV-初学总结_第2张图片

FLV-初学总结_第3张图片

4.2.1 AACAudio Tags

FLV-初学总结_第4张图片

image-20230221161055940

4.3 Vedio Tags

FLV-初学总结_第5张图片

FLV-初学总结_第6张图片

4.4 ScriptData Tags

ScriptData的内容主要是存放FLV相关的元数据,比如创建时间、时长、视频帧率、视频宽度、视频高度、音频采样率…,相对比Audio和Video复杂得多,这里本文没有给出详细截图,详见FLV官方文档(Version 10.1)吧。。。。

FLV-初学总结_第7张图片

5. 再次强调

本文为纯初学者的学习记录,为了方便理解,内容未必严谨,可以用作纯新手的入门了解篇。本文主要的参考链接如下⬇️

  • 详细了解FLV:FLV官方文档(Version 10.1)

  • 简单明了的解释FLV协议:稀土掘金:FLV协议5分钟入门浅析

  • 图片形式介绍FLV协议:CSDN:FLV格式详解

  • 案例解析FLV协议:简书:flv文件分析

你可能感兴趣的:(视频云,音视频)