音视频封装格式之FLV

FLV(Flash Video)是一种常见的视频文件格式,FLV 格式最初是由 Adobe 公司开发的,旨在为网络视频提供一种高效、可扩展且易于流式传输的解决方案。随着在线视频的迅速发展,FLV 因其良好的兼容性和流式传输性能,成为了许多视频分享网站(如早期的 YouTube、优酷等)首选的视频格式。

一、FLV 格式的特点

(一)流式传输

FLV 格式支持流式传输,这意味着用户无需等待整个视频文件下载完成就可以开始观看。视频数据可以在下载的同时进行播放,大大减少了用户的等待时间,提供了更流畅的观看体验。

(二)高效压缩

FLV 通常采用 H.264 等先进的视频编码标准和 AAC 等音频编码标准,能够在保证一定视频质量的前提下实现高效的压缩,减小文件大小,节省带宽资源。

(三)易于嵌入网页

FLV 格式可以很方便地嵌入到 HTML 网页中,通过 Adobe Flash Player 插件进行播放。这使得在网页上展示视频内容变得简单快捷,促进了网络视频的普及。

(四)支持元数据

FLV 文件可以包含丰富的元数据,如视频标题、作者、描述、标签等,方便对视频进行分类、搜索和管理。

二、FLV 格式的文件结构

FLV 文件由文件头(File Header)和一系列的标签(Tag)组成。flv格式以大端序存储。

文件组成如下:
在这里插入图片描述

2.1 文件头

文件头包含了 FLV 文件的基本信息,如文件标识、版本号、音频和视频流的存在标志等。

  • 9 个字节,包含文件格式标识和版本信息。
  • 前 3 个字节通常为 “FLV”(0x46 0x4C 0x56),表示这是一个 FLV 文件。
  • 第 4 个字节表示版本号。
  • 第 5 个字节的前 5 位通常为 0,后 3 位表示是否存在音频和视频。
  • 第 6 - 9 字节表示文件头的大小。

2.2 标签

标签是 FLV 文件的主要数据单元,分为音频标签(Audio Tag)、视频标签(Video Tag)和脚本标签(Script Tag)。各个标签的header部分相同,但是数据不同。

  1. 音频标签:包含音频数据的编码格式、采样率、声道数等信息以及音频帧数据。

  2. 视频标签:包含视频数据的编码格式、分辨率、帧率等信息以及视频帧数据。

  3. 脚本标签:用于存储与视频相关的元数据,如视频的标题、时长、创建时间等,以及用于交互操作的脚本信息。

2.2.1 tag header
字段名称长度(字节)描述
Tag Type1表示 Tag 的类型,如音频、视频、脚本数据等
Data Size3后续数据字段的大小(不包括 Tag Header 自身)
Timestamp3时间戳,单位为毫秒
Timestamp Extended1时间戳扩展位,用于扩展时间戳的范围
StreamID3总是为 0
2.2.2 Script Tag Data结构

该类型Tag⼜被称为MetaData Tag,存放⼀些关于FLV视频和⾳频的元信息,⽐如:duration、width、

height等。通常该类型Tag会作为FLV⽂件的第⼀个tag,并且只有⼀个,跟在File Header后。
在这里插入图片描述

2.2.3 Audio Tag Data结构(⾳频类型)

音频tag data的第一个字节包含了音频数据的参数信息,

第二个字节开始为音频流数据。需要考虑AACAUDIOPACKET字段中的AACPacketType头,如果为1,这里直接就是aac码流了,否则还会有一个aac sequence header(可以理解为flv协议定义的header)

注意虽然这里有采样率相关的信息,但一般我们还是从流中去解析实际的采样率
在这里插入图片描述

2.2.4 Video Tag Data结构(视频类型)

视频Tag Data第⼀个字节包含视频数据的参数信息,

第⼆个字节开始为视频流数据。

处理视频流数据时,需要考虑AVCVIDEOPACKET字段中的AVCPacketType头,如果有,这里直接就是es流了,否则还会有一个avc sequence header(可以理解为flv协议定义的header)
在这里插入图片描述

三、FLV如何解析

以下是一个简单的 FLV 标签(Tag)解析的流程图示例:

在这里插入图片描述

RTMP与FLV

RTMP(Real Time Messaging Protocol,实时消息传输协议)和 FLV(Flash Video)有着密切的关系。

FLV 是一种常见的视频格式。RTMP 通常用于在网络上进行实时数据传输,包括音频、视频和数据等。

RTMP 可以传输 FLV 格式的视频数据。在实际应用中,服务器和客户端之间通过 RTMP 协议建立连接,服务器将 FLV 格式的视频数据封装在 RTMP 数据包中进行传输,客户端接收并解析这些数据包,从而获取和播放 FLV 格式的视频内容。

当使用 RTMP 传输 FLV 时,服务器会对 FLV 数据进行分段和封装,添加必要的控制信息和包头,以适应 RTMP 协议的传输要求。客户端在接收到 RTMP 数据包后,按照协议规范进行解析和处理,提取出其中的 FLV 数据并进行解码和播放。

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

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

相关文章

喜羊羊做Python二级(模拟考试--易错点)

今天距离Python二级考试,还有28天左右。坚持每天做几套试卷,保持记忆和手感。 个人在做题的过程中是先不断练习选择题。当你选择题不达标的时候,系统不会看大题(大概是觉得选择题都做的那么差,大题也不会那么好&#…

mac 虚拟机PD19运行E-prime实验遇到E-prime unable to set display mode:0*80004001问题解决

作者:50% unable to set display mode问题 总结: 1. 修改该Experiment的Devices中的Dispaly为640*680,Color Bit Depth设置为32。(这个分辨率仅限于学习用,实际实验应该还是在真机上) 2. 右键开始菜单中的E…

hadoop生态圈(四)- MapReduce

目录 MapReduce的基本原理 MapReduce流程图 Map阶段执行流程 Reduce阶段执行流程 Shuffle机制 MapReduce解决的是海量数据计算 MapReduce的思想核心是“分而治之”。就是把一个复杂的问题按一定的“分解”方法分为规模较小的若干部分,然后逐个解决,…

Meta AI动画生成功能的规模化部署与优化策略

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

数据可视化大屏模板-美化图表

Axure作为一款强大的原型设计软件,不仅擅长构建交互式界面,更在数据可视化方面展现出了非凡的创意与实用性。今天,就让我们一起探索Axure设计的几款精美数据可视化大屏模板,感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…

基于ROM的VGA显示

前言 在早期计算机和嵌入式系统中,图形显示和用户界面的实现主要依赖于硬件技术。VGA(视频图形阵列)标准在1980年代中期成为主流图形显示技术,其高分辨率和良好的兼容性使其在计算机显示领域中占据了重要地位。VGA标准支持640x480…

如何在Java中使用protobuf

写在前面 本文看下在Java中如何使用protofbuf。 1:介绍 1.1:什么是protobuf 是一种数据格式,同json,xml,等。但是一种二进制数据格式。 1.2:强在哪里?为啥要用? 小&#xff0c…

聚类:k-Means 和 k-Medoid

1. 前言 在《对静态分析缺陷报告进行聚类,以降低维护成本》 提到使用 k-Medoid 通过相似缺陷的聚类,来减少程序员对大量缺陷分析的工作量。 k-Medoid 和传统的 k-Means 聚类算法有什么差别呢? 简单的说,K-Medoid 算法是一种基于…

KRTS网络模块:TCP服务端、客户端实例

KRTS网络模块:TCP服务端、客户端实例 目录 KRTS网络模块:TCP服务端、客户端实例TCP简介KRST服务端简介核心特性界面设计核心代码 KRTS客户端简介核心特性界面设置核心代码 运行实例 Socket模块基于Packet模块,实时提供更高的协议,如RAW-IP、TCP 和 UDP(参…

国科大 矩阵论2023秋季 叶世伟老师 考试试卷

叶老师的考试很难,图源一位胆大的勇者~ 希望能帮助大家!

AD7606芯片驱动-FPGA实现

简介 AD7606是一款16位ADC芯片,可实现8通道并行采集,每通道最大速度可达1M,可实现多种模式数据采集。 介绍 本次FPGA使用的是8通道串行采样模式,设计中所用到的AD7606引脚说明如下: 名称定义CONVST同步采集转换开始信…

Mysql语句性能优化

SQL查询过程 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。分析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看…

算法之二分查找法和双指针

用二分查找法刷leetcode算法题目的时候&#xff0c;经常遇到视频看着理解很透彻&#xff0c;当上手写时一看就会&#xff0c;一写就废。二分查找法涉及边界条件很多&#xff0c;逻辑很简单&#xff0c;就是写不好。何时写 while(left<right)&#xff0c;while(left<right…

通过写文件方式写入 Hive 数据

通过写文件方式写入 Hive 数据 Hive最简单的写入数据方式就是通过Hive Jdbc写入Hive数据&#xff0c;但这并不是写入Hive最高效的方法。 Hive通过读取相关Hdfs的文件来获取数据信息&#xff0c;而通过直接写入Hdfs文件数据达到写入Hive数据的效果&#xff0c;这是目前最高效的…

nerfstudio半离线配置踩坑记录

安装torch2.1.2 with cuda11.8 由于清华镜像源&#xff08;包括阿里源和豆瓣源&#xff09;都没有torch2.1.2cu118的包&#xff0c;因此只能从pytorch官网下载。 服务器上直接通过下面pip的方式安装会由于网络原因中断&#xff0c;无奈只能在本地先把torch的包下载下来再上传到…

SAP与生产制造MPM系统集成案例

一、需求介绍 某公司为保证企业内部生产管理系统的多项基础数据的同步更新&#xff0c;确保各模块间信息的一致性和准确性&#xff0c;对后续的生产计划和物料管理打下基础&#xff0c;该公司将MPM系统和SAP系统经过SAP PO中间件集成平台进行了集成。MPM全称为Manufacturing…

blender--二维平面图标变为三维网格

有时候我们希望把一些二维图片能变成三维网格&#xff0c;本案例我们就针对这一场景进行实现。 首先我们可以先去找一张需要的图片(注意&#xff0c;本例需要图片是svg格式)&#xff0c;我们可以在阿里巴巴矢量图标库等平台进行搜索&#xff0c;如图所示&#xff0c;找到需要的…

diffusion model(扩散模型)DDPM解析

DDPM 前向阶段 重复 2-5 步骤 x 0 ∼ q ( x 0 ) \mathbf{x}_0\sim q(\mathbf{x}_0) x0​∼q(x0​)从数据集中采样一张图片 t ∼ U n i f o r m ( { 1 , … , T } ) t\sim\mathrm{Uniform}(\{1,\ldots,T\}) t∼Uniform({1,…,T})&#xff0c;从 1~T 中随机挑选一个时间步 t ϵ …

三种tcp并发服务器实现程序

都需先进行tcp连接 1、多进程并发 2、多线程并发 3、IO多路复用并发 &#xff08;1&#xff09;select &#xff08;2&#xff09;epoll

SAP ERP与长城汽车EDI业务集成案例(SAP CPI平台)

一、项目背景 某智能座舱公司是国内领先的智能座舱领域科技公司&#xff0c;致力于成为智能网联行业变革的领导者和推动者&#xff0c;聚焦整车域控制器产品、智能网联软件产品和运营服务产品&#xff1b; 已建成首条先进的数智化域控制器生产线&#xff0c;为客户提供最优…