FLV-初学总结

news/2024/3/29 18:46:32/文章来源:https://blog.csdn.net/ahundredmile/article/details/129145487

FLV-初学总结

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

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

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

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

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

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         			CommentTagType							UI8								8:audio, 9:video, 18:script data, others:reservedDataSize						UI24							tag body sizeTimestamp						UI24							相对于第一个tag的时间戳(毫秒),第一个tag的Timestamp为0TimestampExtended		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

image-20230221160921662

image-20230221160932375

image-20230221160909255

4.2.1 AACAudio Tags

image-20230221161044076

image-20230221161055940

4.3 Vedio Tags

image-20230221160541688

image-20230221160633069

4.4 ScriptData Tags

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

image-20230221161448292

5. 再次强调

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72086.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文解读 | [CVPR2019] 基于自适应文本区域表示的任意形状场景文本检测

目录 1 研究背景及意义 2 总体设计 3 方法论 3.1 自适应文本区域表示 3.2 文本建议 3.3 建议改进 4 损失函数 5 实验及结果 1 研究背景及意义 现有的场景文本检测方法使用固定点数的多边形来 表示文本区域。例如,水平文本使用2个点(左上/右下)表示文本区域&…

VR全景带你打卡《狂飙》经典取景地!

热度“狂飙”!电视剧《狂飙》的取景地——江门墟顶老街人气火爆,720VR全景带您了解,这个具有新活力的老街区,蛙色3DVR提供技术支持!通过航拍VR全景,全方位展示江门历史文化街区,720浏览&#xf…

【Java基础】反射

概述 引入 package ref;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r…

Revit项目浏览器的标准设置应用和快速视图样板?

一、Revit项目浏览器的标准设置应用 设计院阶段的BIM应用,主要是Revit出施工图方面,需要涉及到很多标准的制定方面的问题,而且这个标准不仅仅是一个命名标准,还有很多的符合本院的出图标准等等,本期就不做详细讨论&…

实验室通风橱通风柜的构成

一、实验室通风橱通风柜简介通风柜是一个密闭的同时又能排风的工作空间。其设计目的是为了控制、稀释以及排除这个密闭空间内产生制造的烟气、气雾和微粒,同时它也是实验室预防泄露控制的重要组成部分。在大多数实验室中,通风柜是保护实验室操作者免受有…

vulnhub LordOfTheRoot_1.0.1

总结:端口敲门,CVE-2015-8660提权, 目录 下载地址 漏洞分析 信息收集 端口敲门 网站分析 方法一 ssh登录提权 方法二 下载地址 LordOfTheRoot_1.0.1.ova (Size: 1.6 GB)Download: http://www.mediafire.com/download/m5tbx0dua05szjm…

OpenGL学习日记之模型绘制

自己编译运行过程中遇到的一些问题 下载Assimp已编译的lib(因为我们公司的电脑有很多权限和限制,也不能自己安装一些没有报备的软件,所以愁方便我就没有用cMake自己编译了)找到一位免费分享的博主的。 https://blog.csdn.net/lady_killer9/article/deta…

【论文阅读】SCRFD: Sample and Computation 重分配的高效人脸检测

原始题目Sample and Computation Redistribution for Efficient Face Detection中文名称采样和计算 重分配的 高效人脸检测发表时间2021年5月10日平台ICLR-2022来源Imperial College, InsightFace文章链接https://arxiv.org/pdf/2105.04714.pdf开源代码官方实现&…

STM32开发(13)----获取唯一设备标识符UID

获取唯一设备标识符UID前言一、什么事UID二、实验过程1.CubeMx配置2.代码实现3.实验结果总结前言 这一章节介绍如何获取STM32芯片中的唯一的ID号的两种方法。 一、什么事UID 在许多项目中,识别设备是必要的。从简单的设备描述到更复杂的设备,如 USB 串…

uboot / linux添加/去除 版本号LOCALVERSION

背景 偶然的机会,在insmod驱动模块的时候,遇到报错: 查找原因,说是当前系统内核版本和模块编译使用版本不同! 使用如下命令查看当前系统内核版本: uname -r 使用modinfo命令(嵌入式设备没有此…

2022年中国前10电商GMV总结

我是卢松松,点点上面的头像,欢迎关注我哦! 1,阿里8万亿;2,京东3万亿;3,拼多多3万亿;4,小程序私域电商3万亿;5,抖音电商1.4万亿。6,抖音本地生活服务电商600亿。7&#xf…

广东望京卡牌科技有限公司,2023年团建活动圆满举行

玉兔初临,春天相随,抖擞精神,好运连连。春天是一个万物复苏的季节,来自广东的望京卡牌科技有限公司,也迎来了新年第一次团建活动。在“乘风破浪、追逐梦想”的口号声中,2023望京卡牌目标启动会团结活动正式…

Fortinet推出新一代自研安全芯片,跨所有网络边缘加速网络与安全融合

专注网络与安全融合的全球网络安全领导者 Fortinet(NASDAQ:FTNT),近日宣布推出新一代自研安全芯片 FortiSP5,作为 Fortinet ASIC 技术的最新突破,有力推动了分布式网络边缘安全的重大飞跃。FortiSP5 源自 F…

快鲸scrm发布快递行业私域运营解决方案

现如今,快递行业竞争格局日益激烈,前有“四通一达”等传统快递企业,后有自带互联网基因、绑定电商流量新贵快递企业,如菜鸟、京东等。在这一背景下,很多快递企业开启了增长破局之旅,他们纷纷搭建起私域运营…

0/1 nodes are available: 1 node(s) didn‘t match Pod‘s node affinity.

主要是需要确认你的yaml文件中是否有nodeSelector的配置,一般是因为k8s集群中没有相应的node节点匹配导致 这个错误消息表明您正在尝试在不符合Pod的节点亲和性规则的节点上运行Pod。这通常是由于节点选择器或节点亲和性规则设置不正确引起的。 以下是一些可能导致…

前端零基础入门-002-集成开发环境

本篇目标 了解市面上常用的前端集成开发环境(ide)掌握 HBuiberX 的使用:下载安装,新建项目、网页、运行网页。 内容摘要 本篇介绍了市面上流行的几款前端集成开发环境(ide),并介绍了 Hbuilde…

微软Docker学习记录(第二单元)

文章目录什么是容器?什么是软件容器化?什么是 Docker?Docker 体系结构Docker 引擎Docker 客户端Docker 服务器Docker 对象原文链接: https://learn.microsoft.com/zh-cn/training/modules/intro-to-docker-containers以下原文部分…

Softing dataFEED OPC Suite Extended新版本支持从XML文件中读取生产数据

Softing dataFEED OPC Suite Extended V5.25的新功能——“文件读取(File Read)”,支持访问XML文件中可用的过程数据。 (文件读取功能支持获取由XML文件提供的过程数据)dataFEED OPC Suite Extended是用于OPC通信和云连…

技术干货!如何玩转Salesforce测试类 (Test Class)?

测试类主要用于评估其他代码片段,确保一切正常且可靠地运行。这可以作为一种早期预警系统,提醒开发人员出现了错误或问题。 不同类型的程序化测试 测试类可以分为多种不同的类型,这改变了我们编写测试的方式及其预期结果。对于Apex测试类&…

R语言实现可理解的随机森林模型(Random Forest)——iml包

Random Forest 解释模型1. 介绍2. 理解随机森林运行机理2.1导入需要的包2.2 构建随机森林模型2.3 RF特征重要性:2.4 特征对预测结果的影响2.5 交互作用2.6 替代模型(Decision tree surrogate model)2.71. 介绍 机器学习模型通常可以很好地进…