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

news2024/9/28 10:19:45

一、引言

从《音视频入门基础:FLV专题(3)——FLV header简介》中可以知道,

在FLV header之后,FLV文件剩下的部分应由PreviousTagSize和Tag组成。FLV文件 = FLV header + PreviousTagSize0 + Tag1 + PreviousTagSize1 + Tag2 + ...+... + PreviousTagSizeN-1 + TagN + PreviousTagSizeN。本文对Tag的Tag header进行简介。

二、Tag header

根据《video_file_format_spec_v10_1.pdf》第75页,一个FLV tag(简称Tag)包含音频、视频或脚本的元数据(metadata),可选的加密元数据和有效负载:

Tag有三种类型:音频Tag,视频Tag和脚本Tag。但不管是哪种Tag都包含Reserved、Filter、TagType、DataSize、Timestamp、TimestampExtended、StreamID这几个属性。所以我们一般称每个Tag都包含的公共部分(Reserved + Filter + TagType + DataSize + Timestamp + TimestampExtended + StreamID)为Tag header。这些属性加起来总共11个字节,所以Tag header固定为11字节。

一个Tag = Tag header + Tag data。也就是说:除了Tag header,一个Tag剩下的部分就是Tag data。

注意FLV的官方文档《video_file_format_spec_v10_1.pdf》和FFmpeg源码中是没有Tag header和Tag data的概念的,这两个概念是FLV分析工具flvAnalyser里面提出来的:

Tag header的第1个字节等于Reserved + Filter + TagType:

Reserved:占2位(8位等于1个字节),为保留位。值必须是0。

Filter:占1位。表示是否对报文进行过滤。0:未加密,不需要预处理;1:加密。

TagType:占5位。该Tag的类型。值为8:音频Tag;值为9:视频Tag;值为18:脚本Tag。

DataSize:Tag header的第2到第4个字节为DataSize,为属性StreamID之后的那个字节到该Tag结尾的字节数,也就是Tag data的长度,单位为字节。DataSize的值等于整个Tag的长度 - 11,这个很容易理解,因为Tag header固定为11字节。

Timestamp:Tag header的第5到第7个字节为Timestamp。为该Tag的时间戳,单位为毫秒。第1个Tag的Timestamp总是为0。如果是脚本Tag,Timestamp就是0。

TimestampExtended:Tag header的第8个字节为TimestampExtended。为时间戳扩展,和上面的Timestamp一起让时间戳变成4字节以存储更长时间的flv时间信息。TimestampExtended作为时间戳的最高位。

StreamID:Tag header的第9到第11个字节为StreamID。值必须是0。

三、Tag header实例分析

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

红框中的Tag header的第1个字节为0x12,即0b00010010。所以Filter的值为0,表示该Tag未加密。TagType为0x12,表示该Tag为脚本Tag。

红框中第2到第4个字节为0x00 0x01 0x73,即十进制的371。所以整个Tag data的长度为371字节。

红框中第5到第8个字节为0x00 0x00 0x00 0x00。所以该Tag的整个时间戳为0。

用flvAnalyser工具可以直接显示Tag header的每个属性的值:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顺序表算法题 —— 移除元素、删除有序数组中的重复项、合并两个有序数组

目录 一、顺序表算法题 1、移除元素 2、删除有序数组中的重复项 3、 合并两个有序数组 二、顺序表问题与思考 一、顺序表算法题 1、移除元素 移除元素 - 力扣(LeetCode) 思路分析: 思路一:创建一个新数组,开辟…

828华为云征文|在Flexus X实例上安装JDK和Tomcat保姆教学

目录 一、Flexus云服务器X实例 1.1 Flexus X实例概述 1.2 Flexus X实例场景优势 1.3 其他型号与Flexus X实例比较 二、Flexus X实例上安装JDK 2.1 确定安装版本 2.2 yum命令直接安装 2.3 查看版本 三、Flexus X实例上安装tomcat 3.1 上传安装包到Flexus X实例服务器 …

拯救Air780EP模块紧急项目:异常断链的吐血经历。。。

小编最近被老板驱使,要用Air780EP模块做几个紧急项目 并且由于时间紧任务重,遇到了一些棘手问题,简直呕心沥血…… 左思右想,还是在这里把遇到的问题,排查记录下来 也许可以帮到因遇到类似的问题,并且一…

你要的Air201录音和播放录音功能?直接拿去!

最近拼拼收到同学们的疑问:Air201是否支持录音、播放录音功能? 必须支持!Air201可是高集成化设计,并且Air201自带了ES8311音频解码芯片(Audio Codec)及MIC麦克,可支持本地的录音功能&#xff1…

掌握编码最佳实践

你准备好把你的编程技能提升到一个新的水平了吗?在本文中,我们将探讨秘密破坏您的生产力的常见编码错误,并分享您需要了解的优化工作流程的最佳实践。 通过实施这些技巧,您将更快,更智能地编码,并在创纪录…

预训练词向量的使用

目录 1.代码实现 2.知识点: 两个网站可以下载预训练词向量 GloVe网站:GloVe: Global Vectors for Word RepresentationfastText网站:https://fasttext.cc 1.代码实现 import os import torch from torch import nn import dltools class …

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑异步区域调频资源互济的电能、惯性与一次调频联合优化出清模型》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Web后端开发原理!!!什么是自动配置???什么是起动依赖???

引言: 当然,在我们学习的过程中,得知其然,还得知其所以然。So理解了其原理,更能让我们对其开发的理解,遇到问题,也更能快速找到解决办法!!! 1. SprngBoot-配…

网站建设中,营销型网站与普通网站有什么区别

营销型网站与普通网站在建站目的、交互设计以及结构优化等方面存在区别。以下是具体分析: 建站目的 营销型网站:以销售和转化为主要目标,通过专业的市场分析和策划来吸引潜在客户,并促使其采取购买行动。普通网站:通常…

Golang | Leetcode Golang题解之第441题排列硬币

题目: 题解: func arrangeCoins(n int) int {return sort.Search(n, func(k int) bool { k; return k*(k1) > 2*n }) }

Python in Excel作图分析实战!

Excel 中的 Python 现已正式发布,适用于 Microsoft 365 商业版和企业版的 Windows 用户。去年 8 月,微软与 Anaconda 合作,通过集成 Python 为 Excel 引入了一个令人兴奋的新增功能,从而可以将 Python 和 Excel 分析无缝结合到同一…

OLMo - 训练和使用AI2 模型

文章目录 一、关于 OLMo安装 二、模型概览Checkpoints 三、推理关于微调检查点的推理量化 四、Reproducibility训练检查训练数据 五、微调六、评估 一、关于 OLMo OLMo: Open Language Model OLMo是一个用于训练和使用AI2最先进的开放语言模型的存储库。它由科学家为科学家构建…

java初识

目录 1.命名规范 2.数据类型 3.数据类型转换(就是见识一下) 4.java里面的输入输出 4.1判断是不是偶数 4.2判断是不是闰年 4.3其他的输入输出 4.4顺序的问题 5.分支语句补充 5.IDEA里面的调试 6.continue的一个案例 1.命名规范 这个命名规范就…

【Mysql】Mysql数据库基本操作-------DDL(中)

1、对表结构的常用操作----创建表 创建表格式: creat table (if not exists ) (可以省略) 表名( 字段一 类型[(宽度)] [约束条件] [comment 字段说明], 字段二 类型[(宽度)] [约束条件] […

翻译:Recent Event Camera Innovations: A Survey

摘要 基于事件的视觉受到人类视觉系统的启发,提供了变革性的功能,例如低延迟、高动态范围和降低功耗。本文对事件相机进行了全面的调查,并追溯了事件相机的发展历程。它介绍了事件相机的基本原理,将其与传统的帧相机进行了比较&am…

Github 2024-09-28Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-09-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Starlark项目1Python项目1TypeScript项目1Pake: 利用 Rust 轻松构建轻量级多端桌面应用 创建周期:491 天开发语言:Rust协议类型:M…

Linux云计算 |【第四阶段】RDBMS1-DAY2

主要内容: 常用函数(函数分类1:单行、分组;函数分类2:字符、数学、日期、流程控制)、分组查询group by、连接查询 一、常用函数 1. 按使用方式分类 ① 单行函数 单行函数(Scalar Functions&…

LeetCode[中等] 78.子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 思路 迭代法 每次遍历nums中的新的数,将其加到之前所有得到的set中&#xff0c…

多个树模型特征贡献度与可视化

背景 在机器学习中,特征的重要性是了解模型如何做出预测的关键指标之一,在树模型中,特征重要性通常通过特征的分裂节点来衡量,通过观察特征在模型中的贡献,可以对数据集中的重要特征有更深入的理解,之前的…

F28335 的 EPWM 外设

1 PWM 简介 2 F28335的ePWM介绍 2.1 时基模块TB (1)时基模块的功能 (2)时基模块的关键信号和寄存器 给出时基模块内部结构图来了解里面的关键信号和寄存器,时基模块内部结构图如下所示: (3…