FLV封装格式
摘要:本文描述了FLV的文件格式。
关键字:FLV
1 简介
FLV流媒体格式是sorenson公司开发的一种视频格式,全称为Flash Video。 它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的使用等缺点。由于其视频文件体积轻、封装播放简单等优点,使得其非常合适在网络上传输,目前主流的视频网站无一例外支持FLV流媒体格式进行视频播放。
2020年12月31日,Chrome作为最后一个宣布将不再支持使用Flash的应用程序浏览器,flv视频均无法透过Google Chrome收看,除开BiliBili、优酷等视频网站以外的视频网站均停止使用flv作为视频格式。
2 FLV文件格式
FLV整个文件由两部分组成Header和Body,Header描述了FLV文件的基本信息,Body存储了流数据。Body中由一个个Tag组成。


2.1 FLV Header
FLV Header长度为9个字节,前三个字节是固定的FLV三个字符,表示当前文件的标签,第四个字节是当前文件的版本比如0或者1,第五个字节被分为了4个部分,前5个bit位作为预留,不使用的话写0;接下来的3个bit位每一位表示是否有对应的流,次序分别为音频,预留,视频,为1则表示当前文件有对应的流;最后4个字节表示当前Header的大小,一般为9如果有扩充就会变。
2.2 FLV Body
FLV Body紧跟在FLV Header之后,即FLV Header中的dataoffset也是FLV Body的起始位置。FLV Body由一系列的Back-Pointer和Tag组成,交错存储,大概的结构如下:

Back-Pointer就是一个4字节的区域,存储前一个Tag的长度,第一个Tag没有前任,一定是0。另外,FLV的Tag包含音频、视频或脚本元数据、可选的加密元数据和 payload。最基础的为FLV Tag,还有其他的Audio Tag,Vidoe Tag, Data Tag等。
2.2.1 FLV Tag
FLV Tag也有Header+Data组成,基本结构如下:

- Reserved(2 bit):用于FMS的保留字段, 值为0;
- Filter(1bit):指示packet是否需要预处理:
- 0 = 不需要预处理;
- 1 = packet 在渲染前需要预处理(例如解密);
- 未加密文件中此值为0,加密文件中此值为1;
- TagType(5bit):表示当前Tag的类型:
- 8:音频;
- 9:视频:
- 18:脚本数据;
- DataSize(3byte):Tag中除通用头外的长度,即Header+Data字段的长度 (等于Tag总长度 – 11,即StreamID以下的数据长度,不包含StreamID);
- Timestamp(3byte):当前Tag的解码时间戳 (DTS),单位是毫秒。FLV文件中第一个Tag的DTS总为0;
- TimestampExtended(1byte):和Timestamp字段一起构成一个32 位值, 此字段为高 8 位,单位毫秒;
- StreamID(3byte):总是为0;
- 上面的数据是一定有的,下面的数据是根据当前Tag类型或者其他一些属性来决定的:
- Tag Header:
- TagType为8,则为AudioTagHeader;
- TagType为9,则为VideoTagHeader;
- Filter为1,有EncryptionHeader;
- Filter为1,则有FilterParams;
- Data:
- TagType为8,则为音频数据;
- TagType为9,则为视频数据;
- TagType为18,则为脚本数据。
- Tag Header:
2.2.2 Audio Tag
Audio Tag包括AudioTagHeader和AudioTagBody两部分组成。
2.2.2.1 Audio Tag Header

Audio Tag Header主要描述了音频的基本参数,比如采样率等:
- SoundFormat:音频格式;
- 0: Linear PCM, platform endian;
- 1: ADPCM;
- 2: MP3;
- 3: Linear PCM, little endian;
- 4: Nellymoser 16-kHz mono;
- 5: Nellymoser 8-kHz mono;
- 6: Nellymoser;
- 7: G.711 A-law logarithmic PCM;
- 8: G.711 mu-law logarithmic PCM 9 = reserved;
- 10: AAC;
- 11: Speex;
- 14: MP3 8-Khz;
- 15: Device-specific sound;
- SoundRate:采样率,FLV支持的采样率比较有限,AAC总为3:
- 0: 5.5 kHz;
- 1: 11 kHz;
- 2: 22 kHz;
- 3: 44 kHz;
- SoundSize:采样位深,此参数仅适用未压缩格式,压缩格式总在内部被解码为16位:
- 0: 8位;
- 1: 16位;
- SoundType:声道数:
- 0: 单声道;
- 1: 立体声;
- AACPacketType:AAC帧类型。仅当声音格式为 10 时,存在此字段:
- 0: AAC sequence header;
- 1: AAC raw。
2.2.2.2 Audio Tag Body
音频数据段即AUDIODATA,根据是否加密可以存储加密数据即EncryptedBody或者AudioTagBody。AudioTagBody存储的数据根据当前格式不同而不同,如果是AAC即SoundFormat=10,则存储AACAUDIODATA,否则就是具体格式的数据。
AACAUDIODATA的存储结构根据是否设置AACPacketType而不同,0则存储的AudioSpecificConfig,否则直接存储AAC的数据。
2.2.3 Video Tag
Video Tag 包含 VideoTagHeader 和 VideoTagBody 两部分。
2.2.3.1 VideoTagHeader

- FrameType:帧类型;
- 1: keyframe (for AVC, a seekable frame);
- 2: inter frame (for AVC, a non-seekable frame);
- 3: disposable inter frame (H.263 only);
- 4: generated keyframe (reserved for server use only);
- 5: video info/command frame;
- CodecID:编解码器ID:
- 1: JPEG (currently unused);
- 2: Sorenson H.263;
- 3: Screen video;
- 4: On2 VP6;
- 5: On2 VP6 with alpha channel;
- 6: Screen video version 2;
- 7: AVC;
- AVCPacketType:AVC帧类型只有AVC编码才有:
- 0: AVC sequence header;
- 1: AVC NALU;
- 2: AVC end of sequence (lower level NALU sequence ender is not required or supported);
- CompositionTime:PTS与DTS的时间偏移值,单位ms,记作CTS,只有编码器为AVC才有。
2.2.3.2 VideoTagBody
同AudioTagBody,区分加密和非加密。而非加密的VideoTagBody根据编解码器类型不同存储的数据不同:
- FrameType == 5:UI8;
- CodecID == 2:H263VIDEOPACKET;
- CodecID == 3:SCREENVIDEOPACKET;
- CodecID == 4:VP6FLVVIDEOPACKET;
- CodecID == 5:VP6FLVALPHAVIDEOPACKET;
- CodecID == 6:SCREENV2VIDEOPACKET;
- CodecID == 7:AVCVIDEOPACKET。
2.2.4 Data Tags
数据 Tag 封装了单一方法,此方法通常在 Flash 播放器中的网络流对象上被调用。数据 Tag 包含方法名和一组参数。这部分就不详细说明了具体参考abode的标准。
3 简单查看下FLV的结构
FLV file version 1Contains audio tags: YesContains video tags: YesData offset: 9Prev tag size: 0
Tag type: 18 - Script data objectData size: 1195Timestamp: 0Timestamp extended: 0StreamID: 0Prev tag size: 1206
Tag type: 9 - Video dataData size: 54Timestamp: 0Timestamp extended: 0StreamID: 0Video tag:Frame type: 1 - keyframe (for AVC, a seekable frame)Codec ID: 7 - AVCAVC video tag:AVC packet type: 0 - AVC sequence headerAVC composition time: 0AVC nalu length: 23330847
参考文献
- Flash Video Format
相关文章:
FLV封装格式
摘要:本文描述了FLV的文件格式。 关键字:FLV 1 简介 FLV流媒体格式是sorenson公司开发的一种视频格式,全称为Flash Video。 它的出现有效地解决了视频文件导入Flash后,使导出的SWF文件体积庞大,不能在网络上很好的…...
[NLP]LLM---FineTune自己的Llama2模型
一 数据集准备 Let’s talk a bit about the parameters we can tune here. First, we want to load a llama-2-7b-hf model and train it on the mlabonne/guanaco-llama2-1k (1,000 samples), which will produce our fine-tuned model llama-2-7b-miniguanaco. If you’re …...
git在linux情况下设置git 命令高亮
只需要执行下面这个命令,这样就可以在查看git status明亮的时候高亮显示。 git config --global color.status auto未设置前 谁知之后...
C++ 表驱动方法代替if-else
连着用几十个if-else代码,运行效率不高,关键还手累,记得改成表驱动方法 #include <iostream> #include <unordered_map> #include <functional>using namespace std;void handleCondition1() {// 处理条件 1 的代码std::cout <<…...
2023国赛数学建模E题思路分析 - 黄河水沙监测数据分析
# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...
cadence后仿真/寄生参数提取/解决pin口提取不全的问题
post-simulation设置顺序与规则 1.Rules 设置 2.inputs设置 3.outputs设置 4.PEX 设置 会出现错误1,后有解决方案 第一步 :Netlist 第二步:LVS 5.RUN PEX 先RUN,后按照图中1 2 3步骤操作 点击OK之后,显示Calibre信息ÿ…...
Vue中实现3D得球自动旋转
具体实现 安装echarts 在终端下安装echarts npm install -D echarts 安装echarts-gl 在终端下安装echarts-gl npm install -D echarts-gl earth3D组件 earth3D.vue <template><div class"globe3d-earth-container" ><div class"globe3d-earth&qu…...
使用wkhtmltoimage实现生成长图分享
需求 用户可以选择以长图的形式分享本网页 方法 wkhtmltopdf wkhtmltopdf url filewkhtmltoimage url file java Runtime.getRuntime().exec() 下载 直接去官网下载对应的版本:官网 命令行使用WK > wkhtmltopdf https://www.nowcoder.com /opt/project/…...
新风机未来什么样?
新风机在未来将会有许多令人期待的发展和改进,让我们一起来看一看吧!以下是新风机未来的一些可能性: 智能化和智能家居:新风机将更多地与智能家居系统整合,通过物联网和人工智能技术,实现智能控制和智能调节…...
python的几种数据类型的花样玩法(一)
Python是一种动态类型语言,这意味着在Python中,你可以操作多种不同的数据类型,而且这些数据类型可以自动转换。以下是一些Python数据类型的花样玩法: 数字: 整数 (1, 100, -786 等) 浮点数 (1.1, -78.4, 3.14159 等)…...
python回调函数之获取jenkins构建结果
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 需求背景: 现在用jenkins构建自动化测试(2个job),公司现将自动化纳入到发布系统 要求每次构建成功之后&am…...
Docker底层实现
Docker采用c/s架构,Docker守护进程( Daemon )作为服务端,接受来自客户端(命令行)的请求,并处理这些请求(创建、运行、分发容器) 。客户端和服务端既可以运行在一个机器上…...
PY32F003F18之RS485通讯
PY32F003F18将USART2连接到RS485芯片,和其它RS485设备实现串口接收后再转发的功能。 一、测试电路 二、测试程序 #include "USART2.h" #include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf() #include "…...
概率论与数理统计学习笔记(7)——全概率公式与贝叶斯公式
目录 1. 背景2. 全概率公式3. 贝叶斯公式 1. 背景 下图是本文的背景内容,小B休闲时间有80%的概率玩手机游戏,有20%的概率玩电脑游戏。这两个游戏都有抽卡环节,其中手游抽到金卡的概率为5%,端游抽到金卡的概率为15%。已知小B这天抽…...
深入了解 Axios 的 put 请求:使用技巧与最佳实践
在前端开发中,我们经常需要与后端服务器进行数据交互。其中,PUT 请求是一种常用的方法,用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求,我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库࿰…...
浅谈Http协议、TCP协议(转载)
TCP标志位,有6种标示:SYN(synchronous建立联机) ,ACK(acknowledgement 确认) ,PSH(push传送),FIN(finish结束) ,RST(reset重置), URG(urgent紧急) Sequence number(顺序号码) ,Acknowledge num…...
flatten-maven-plugin使用
这篇文章主要介绍了flatten-maven-plugin使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 − 目录 一、简介 1.1 作用1.2 goal介绍二、使用总结 一、简介 1.1 作用 将pom工程父子pom的版…...
Vue3中快速简单使用CKEditor 5富文本编辑器
Vue3简单使用CKEditor 5 前言准备定制基础配置富文本配置目录当前文章demo目录结构 快速使用demo 前言 CKEditor 5就是内嵌在网页中的一个富文本编辑器工具 CKEditor 5开发文档(英文):https://ckeditor.com/docs/ckeditor5/latest/index.htm…...
qt简易网络聊天室 数据库的练习
qt网络聊天室 服务器: 配置文件.pro QT core gui networkgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exac…...
Navicat连接mysql8.0:提示无法加载身份验证插件“caching_sha2_password”
Navicat连接mysql时,提示:Unable to load authentication plugin ‘caching_sha2_password‘. 原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么?它的作用是什么? Spring框架的核心容器是IoC(控制反转)容器。它的主要作用是管理对…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
