当前位置: 首页 > news >正文

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,则为脚本数据。

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代码&#xff0c;运行效率不高&#xff0c;关键还手累,记得改成表驱动方法 #include <iostream> #include <unordered_map> #include <functional>using namespace std;void handleCondition1() {// 处理条件 1 的代码std::cout <<…...

2023国赛数学建模E题思路分析 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响&#xff0c; 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…...

cadence后仿真/寄生参数提取/解决pin口提取不全的问题

post-simulation设置顺序与规则 1.Rules 设置 2.inputs设置 3.outputs设置 4.PEX 设置 会出现错误1&#xff0c;后有解决方案 第一步 :Netlist 第二步&#xff1a;LVS 5.RUN PEX 先RUN&#xff0c;后按照图中1 2 3步骤操作 点击OK之后&#xff0c;显示Calibre信息&#xff…...

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() 下载 直接去官网下载对应的版本&#xff1a;官网 命令行使用WK > wkhtmltopdf https://www.nowcoder.com /opt/project/…...

新风机未来什么样?

新风机在未来将会有许多令人期待的发展和改进&#xff0c;让我们一起来看一看吧&#xff01;以下是新风机未来的一些可能性&#xff1a; 智能化和智能家居&#xff1a;新风机将更多地与智能家居系统整合&#xff0c;通过物联网和人工智能技术&#xff0c;实现智能控制和智能调节…...

python的几种数据类型的花样玩法(一)

Python是一种动态类型语言&#xff0c;这意味着在Python中&#xff0c;你可以操作多种不同的数据类型&#xff0c;而且这些数据类型可以自动转换。以下是一些Python数据类型的花样玩法&#xff1a; 数字&#xff1a; 整数 (1, 100, -786 等) 浮点数 (1.1, -78.4, 3.14159 等)…...

python回调函数之获取jenkins构建结果

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 需求背景&#xff1a; 现在用jenkins构建自动化测试&#xff08;2个job&#xff09;&#xff0c;公司现将自动化纳入到发布系统 要求每次构建成功之后&am…...

Docker底层实现

Docker采用c/s架构&#xff0c;Docker守护进程&#xff08; Daemon &#xff09;作为服务端&#xff0c;接受来自客户端&#xff08;命令行&#xff09;的请求&#xff0c;并处理这些请求&#xff08;创建、运行、分发容器&#xff09; 。客户端和服务端既可以运行在一个机器上…...

PY32F003F18之RS485通讯

PY32F003F18将USART2连接到RS485芯片&#xff0c;和其它RS485设备实现串口接收后再转发的功能。 一、测试电路 二、测试程序 #include "USART2.h" #include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf() #include "…...

概率论与数理统计学习笔记(7)——全概率公式与贝叶斯公式

目录 1. 背景2. 全概率公式3. 贝叶斯公式 1. 背景 下图是本文的背景内容&#xff0c;小B休闲时间有80%的概率玩手机游戏&#xff0c;有20%的概率玩电脑游戏。这两个游戏都有抽卡环节&#xff0c;其中手游抽到金卡的概率为5%&#xff0c;端游抽到金卡的概率为15%。已知小B这天抽…...

深入了解 Axios 的 put 请求:使用技巧与最佳实践

在前端开发中&#xff0c;我们经常需要与后端服务器进行数据交互。其中&#xff0c;PUT 请求是一种常用的方法&#xff0c;用于向服务器发送更新或修改数据的请求。通过发送 PUT 请求&#xff0c;我们可以更新服务器上的资源状态。 Axios 是一个流行的 JavaScript 库&#xff0…...

浅谈Http协议、TCP协议(转载)

TCP标志位,有6种标示&#xff1a;SYN(synchronous建立联机) &#xff0c;ACK(acknowledgement 确认) &#xff0c;PSH(push传送)&#xff0c;FIN(finish结束) &#xff0c;RST(reset重置)&#xff0c; URG(urgent紧急) Sequence number(顺序号码) &#xff0c;Acknowledge num…...

flatten-maven-plugin使用

这篇文章主要介绍了flatten-maven-plugin使用&#xff0c;本文通过示例代码给大家介绍的非常详细&#xff0c;对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 − 目录 一、简介 1.1 作用1.2 goal介绍二、使用总结 一、简介 1.1 作用 将pom工程父子pom的版…...

Vue3中快速简单使用CKEditor 5富文本编辑器

Vue3简单使用CKEditor 5 前言准备定制基础配置富文本配置目录当前文章demo目录结构 快速使用demo 前言 CKEditor 5就是内嵌在网页中的一个富文本编辑器工具 CKEditor 5开发文档&#xff08;英文&#xff09;&#xff1a;https://ckeditor.com/docs/ckeditor5/latest/index.htm…...

qt简易网络聊天室 数据库的练习

qt网络聊天室 服务器&#xff1a; 配置文件.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时&#xff0c;提示&#xff1a;Unable to load authentication plugin ‘caching_sha2_password‘. 原因&#xff1a;mysql 8.0 默认使用 caching_sha2_password 身份验证机制。 D:\MySQL8.0\install\bin>mysql -uroot -p123456789 #登录 mysql: [War…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...