音视频入门基础:FLV专题(3)——FLV header简介

一、引言

本文对FLV格式的FLV header进行简介,FLV文件的开头就是FLV header。

进行简介之前,请各位先从《音视频入门基础:FLV专题(1)——FLV官方文档下载》下载FLV的官方文档《video_file_format_spec_v10_1.pdf》和SWF的官方文档《swf-file-format-spec.pdf》。

《video_file_format_spec_v10_1.pdf》总共有89页,《swf-file-format-spec.pdf》总共有243页。本文下面所说的“页数”是指在pdf阅读器中显示的页数:

二、FLV的Simple data types

根据《video_file_format_spec_v10_1.pdf》第74页,FLV的Simple data types(简单数据类型)定义在SWF的官方文档中。Simple data types描述了FLV格式中的每个属性占用多少空间:

所以我们得翻阅SWF的官方文档《swf-file-format-spec.pdf》,该文档第15页到第20页描述了Simple data types(简单数据类型)。

第15页:

第18页:

其中:

SI8:有符号8位整数值。

SI16:有符号16位整数值。

SI32:32位带符号整数值。

SI8[n]:带符号的8位数组。n是数组元素的个数。

SI16[n]:带符号的16位数组。n是数组元素的个数。

UI8:无符号8位整数值。

UI16:无符号16位整数值。

UI32:无符号32位整数值。

UI8[n]:无符号的8位数组。n是数组元素的个数。

UI16[n]:无符号的16位数组。n是数组元素的个数。

UI24[n]:无符号的24位数组。n是数组元素的个数。

UI32[n]:无符号的32位数组。n是数组元素的个数。

UI64[n]:无符号的64位数组。n是数组元素的个数。

SB[nBits]:有符号的位值(nBits是用来存储值的位数)。
UB[nBits]:无符号的位值(nBits是用来存储值的位数)。

FB[nBits]:带符号的定点位值(nBits是用于存储值的位数)。

三、FLV header

FLV文件 = FLV header + tag1 + tag内容1 + tag2 + tag内容2 + ...+... + tagN + tag内容N。

根据《video_file_format_spec_v10_1.pdf》第74页,一个FLV文件应该以FLV header为开始。可以看出来FLV header中的属性加起来总共占9个字节(Signature占3个字节,Version占1个字节,TypeFlagsReserved+TypeFlagsAudio+TypeFlagsReserved+TypeFlagsVideo占1个字节,DataOffset占4个字节,加起来总共9字节),所以FLV header为9字节:

Signature:FLV header的前3个字节为Signature,为文件格式标识。对于FLV格式,固定为“FLV”(0x46 0x4C 0x56)。

Version:FLV header的第4个字节为Version,为格式版本。对于FLV格式,值必须为1。

FLV header的第5个字节比较特殊:

第5个字节的前5位(8位等于1个字节)是保留位(TypeFlagsReserved),值必须是0。

第6位为音频类型标志(TypeFlagsAudio),值为1表示FLV文件中含有音频,值为0表示不含音频。

第7位也是保留位,值必须是0。
第8位为视频类型标志(TypeFlagsVideo),值为1表示FLV文件中含有视频,值为0表示不含视频。

所以如果FLV header第5个字节的值为0x04(二进制的0b00000100)表示该FLV文件中仅含有音频不含视频;第5个字节的值为0x01(二进制的0b00000001)表示该FLV文件中仅含有视频不含音频;第5个字节的值为0x05(二进制的0b00000101)表示该FLV文件中既含视频也含音频。

DataOffset:FLV header的第6到第9个字节为DataOffset。为整个FLV header的长度,单位为字节。值固定为9。

四、FLV header实例分析

用notepad++打开《音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件》中生成的FLV文件,文件的开头(下图红框中的)就是FLV header。可以看到header为:0x46 0x4C 0x56 0x01 0x05 0x00 0x00 0x00 0x09:

由于该FLV header的第5个字节的值为0x05,所以能推测出来该FLV文件中既含视频也含音频。

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

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

相关文章

【第十二章:Sentosa_DSML社区版-机器学习之回归】

目录 12.1 线性回归 12.2 决策树回归 12.3 梯度提升决策树回归 12.4 保序回归 12.5 XGBoost回归 12.6 随机森林回归 12.7 广义线性回归 12.8 LightGBM回归 12.9 因子分解机回归 12.10 AdaBoost回归 12.11 KNN回归 12.12 高斯过程回归 12.13 多层感知机回归 【第十…

基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别

基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别 手扶电梯 行为识别 可检测有人正常行走,有人 跌倒,有人逆行三种行为 跌倒检测 电梯跌倒 扶梯跌倒 人体行为检测 YOLOv8LSTM。 基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别&#xf…

小程序构建npm失败

小程序构建npm失败 项目工程结构说明解决方法引入依赖导致的其他问题 今天在初始化后的小程序中引入TDesign组件库,构建npm时报错。 项目工程结构说明 初始化后的项目中,包含miniprogram文件夹和一些项目配置文件,在project.config.json文件中…

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介: 最新简洁大方的自动发卡网站源码,它就是鲸发卡v11.61系统源码,它是修复版。 说到鲸发卡系统,鲸发卡系统在发卡圈很多人都知道的,它是市面最好发卡系统之一,操作起来简单得很,界面也…

手机在网状态查询接口如何用PHP进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口,即输入手机号码查询手机号在网状态,返回有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态查询适用哪些场景…

无人机视角下的车辆数据集

车辆数据集 无人机视角下的车辆数据集。数据集为无人机俯拍的真实场景下的车辆机动车数据集。数据集已经标注好,yolo格式,txt标签。数据集已经划分好训练集(20970张图片)验证集(5242张图片)测试集&#xff…

Redis的主从模式、哨兵模式、集群模式

最近学习了一下这三种架构模式,这里记录一下,仅供参考 目录 一、主从架构 1、搭建方式 2、同步原理 3、优化策略: 4、总结: 二、哨兵架构 1、搭建哨兵集群 2、RedisTemplate如何使用哨兵模式 三、分片集群架构 1&#…

Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码...

原文链接:https://tecdat.cn/?p37724 在当今世界,粮食系统的稳定性至关重要。尽管现有的全球粮食系统在生产和分配方面表现出较高的效率,但仍存在大量人口遭受饥饿以及诸多粮食安全隐患。与此同时,在学术领域,准确评估…

Golang | Leetcode Golang题解之第430题扁平化多级双向链表

题目: 题解: func dfs(node *Node) (last *Node) {cur : nodefor cur ! nil {next : cur.Next// 如果有子节点,那么首先处理子节点if cur.Child ! nil {childLast : dfs(cur.Child)next cur.Next// 将 node 与 child 相连cur.Next cur.Chi…

汉王手写签批控件如何在谷歌、火狐、Edge等浏览器使用

背景 近日,有网友咨询汉王手写签批控件是否可以通过allWebPlugin中间件技术加载到谷歌、火狐、Edge等浏览器?为此,笔者详细了解了一下汉王手写签批控件,它是一个标准的ActiveX控件,曾经主要在IE浏览器使用,…

【计算机基础】用bat命令将Unity导出PC包转成单个exe可执行文件

Unity打包成exe可执行文件 上边连接是很久以前用过的方法,发现操作有些不一样了,并且如果按上述操作比较麻烦,所以写了个bat命令。 图1、导出的pc程序 如图1是导出的pc程序,点击exe文件可运行该程序。 添加pack_project.bat文件 …

大数据Flink(一百二十二):阿里云Flink MySQL连接器介绍

文章目录 阿里云Flink MySQL连接器介绍 一、特色功能 二、​​​​​​​语法结构 三、​​​​​​​​​​​​​​WITH参数 阿里云Flink MySQL连接器介绍 阿里云提供了MySQL连接器,其作为源表时,扮演的就是flink cdc的角色。 一、特色功能 MySQ…

操作系统 | 学习笔记 | | 王道 | 5.3 磁盘和固态硬盘

5.3 磁盘和固态硬盘 5.3.1 磁盘 磁盘结构 磁盘:磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据 磁道:磁盘的盘面被划分成一个个磁道。这样的一个“圈”就是一个磁道 扇区:一个磁道又被划分成一个个扇区&am…

大数据毕业设计选题推荐-网络电视剧收视率分析系统-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

通信工程学习:什么是NFVO网络功能虚拟化编排器

NFVO:网络功能虚拟化编排器 NFVO(Network Functions Virtualization Orchestrator),即网络功能虚拟化编排器,是网络功能虚拟化(NFV)架构中的核心组件之一。NFV是一种将传统电信网络中的网络节点…

从零开始学习Python

目录 从零开始学习Python 引言 环境搭建 安装Python解释器 选择IDE 基础语法 注释 变量和数据类型 变量命名规则 数据类型 运算符 算术运算符 比较运算符 逻辑运算符 输入和输出 控制流 条件语句 循环语句 for循环 while循环 循环控制语句 函数和模块 定…

黑马智数Day3

渲染基础Table列表 封装接口: export function getCardListAPI(params) {return request({url: /parking/card/list,params}) } 具体实现: import { getCardListAPI } from /apis/cardexport default {data() {return {// 请求参数params: {page: 1,pa…

乌克兰因安全风险首次禁用Telegram

据BleepingComputer消息,乌克兰国家网络安全协调中心 (NCCC) 以国家安全为由,已下令限制在政府机构、军事单位和关键基础设施内使用 Telegram 消息应用程序。 这一消息通过NCCC的官方 Facebook 账号对外发布,在公告中乌…

【小程序】uniapp自定义图标组件可动态更换svg颜色

组件描述 通过图标名称加载对应svg,size参数调整图标大小,color参数调整图标颜色 解决思路: 存svg获svg,对象方式正则替换svg的fill值,不改变源文件,通过base64直接加载缓存svg源文件,避免重…

上传富文本插入文件时报错:JSON parse error: Unexpected character解决办法

方式一(加密解密): 1.前端 (1)安装 crypto-js npm install crypto-js(2)util下创建asc.js asc.js import CryptoJS from crypto-js// 需要和后端一致 const KEY CryptoJS.enc.Utf8.parse(…