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

news2024/11/27 16:50:54

一、引言

根据《video_file_format_spec_v10_1.pdf》第75页,如果某个Tag的Tag header中的TagType值为8,表示该Tag为Audio Tag:

这时StreamID之后紧接着的就是AudioTagHeader,也就是说这时Tag header之后的就是AudioTagHeader:

然后这时如果Filter的值不为1,表示未加密,不需要预处理。则AudioTagHeader之后紧接着的就AUDIODATA:

所以,

1.当某个Tag的Tag header中的TagType属性的值为8时,该Tag为Audio Tag;

2.未加密的情况下,一个Audio Tag = Tag header + AudioTagHeader + AUDIODATA。

二、AudioTagHeader

根据《video_file_format_spec_v10_1.pdf》第76页,AudioTagHeader包含的属性如下:

其中:

SoundFormat:占4位(8位等于1个字节),音频的压缩编码格式。

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:占2位,音频采样频率。

0:5.5 kHz
1:11 kHz
2:22 kHz
3:44 kHz

SoundSize:占1位,即Bit depth(又叫位深度、位元深度、采样深度、采样位数、采样格式)。

0:8位
1:16位

该属性仅适用于未压缩的格式,Bit depth对于PCM编码是固定的,但对于有损压缩编解码器(如MP3和AAC),它是在编码期间计算的,并且可以因采样而异,具体可以参考:《音视频入门基础:AAC专题(3)——AAC的ADTS格式简介》。

SoundType:占1位,音频声道数目。

0:单声道

1:立体声

AACPacketType:占1字节,AAC数据包的类型。仅当FLV文件中的音频为AAC格式时,才有该属性。

值为0表示该AudioTag包含AAC sequence header,即包含audioObjectType属性为AAC格式时的AudioSpecificConfig;

值为1表示该AudioTag包含一帧AAC音频压缩数据。

所以当FLV文件中的音频不为AAC格式时,AudioTagHeader总共占1字节(SoundFormat + SoundRate + SoundSize + SoundType总共1字节);当FLV文件中的音频为AAC格式时,AudioTagHeader总共占2字节(SoundFormat + SoundRate + SoundSize + SoundType + AACPacketType总共2字节)。

从上面的介绍可以看到,AudioTagHeader指定了音频的压缩编码格式、音频采样频率、采样位数、音频声道数目等格式。

但是《video_file_format_spec_v10_1.pdf》第77页写道:“如果音频压缩编码格式为AAC,则SoundType属性的值应为1(立体声),SoundRate属性的值应为3 (44khz)。
然而,这并不意味着AAC音频在FLV中总是立体声,44khz。相反,Flash播放器会忽略这些值并在AAC比特流中提取信道和采样率数据编码。”

也就是会说,播放器在处理 AAC 音频时,需要忽略 AudioTagHeader 中的音频参数,而使用 AudioSpecificConfig的参数来初始化解码器:

三、AUDIODATA

根据《video_file_format_spec_v10_1.pdf》第77页,FLV文件未加密时,AUDIODATA为AudioTagBody:

四、AudioTagBody

根据《video_file_format_spec_v10_1.pdf》第77页,当FLV文件的音频压缩编码格式为AAC时,AudioTagBody为AACAUDIODATA:

五、AACAUDIODATA

根据《video_file_format_spec_v10_1.pdf》第77页,当AACPacketType值为0时,AACAUDIODATA为AudioSpecificConfig;当AACPacketType值为1时,AACAUDIODATA包含一帧AAC音频压缩数据:

六、AudioSpecificConfig

MPEG-4包括一个以统一方式处理不同音频格式组的系统。每种格式都用一个唯一的音频对象类型(Audio Object Type, 简称AOT)来表示。所有Audio Object Type共享的通用格式全局header称为音频特定配置(Audio Specific Config)。简单来讲Audio Specific Config是MPEG-4音频的全局header,该header包含了音频编码器的重要信息,比如编码器类别,音频频率,音频通道数等。具体可以参考:《音视频入门基础:AAC专题(11)——AudioSpecificConfig简介》。

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

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

相关文章

(二 上)VB 2010 设计初步

目录 一、常用类应用 1.Console类控制台 2.窗体基本控件 二、面向对象程序设计 1.类和对象 2.对象的属性、方法、事件属 1.属性 2.方法 3.事件、事件过程 1.事件 2.事件过程 3.对象浏览器 三、.NET类库与命名空间 1.命名空间 常用命名空间 1.System命名空间 2.…

基于uniapp微信小程序的校园二手书交易系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

学习threejs,使用粒子实现下雪特效

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.Points简介1.11 ☘️…

服务器文件访问协议

服务器文件访问协议 摘要NFS、CIFS、SMB概述SMBWindows SMBLinux SambaPython SMB NFS 摘要 本篇博客参考网上文档和博客,对基于网络的服务器/主机的文件访问、共享协议进行简要总结,完整内容将会不断更新,以便加深理解和记忆 NFS、CIFS、S…

基于ResNet50模型的船型识别与分类系统研究

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【LSTM模型实现光伏发电功率的预测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理视频监控新选择

在数字化转型的浪潮中,视频监控作为安防领域的核心组成部分,正经历着前所未有的技术革新。随着技术的不断进步和应用场景的不断拓展,视频监控系统的兼容性、稳定性以及安全性成为了用户关注的焦点。NVR小程序接入平台/设备EasyNVR&#xff0c…

单元测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 为什么需要单元测试? 从产品角度而言,常规的功能测试、系统测试都是站在产品局部或全局功能进行测试,能够很好地与用户的需…

基于 ThinkPHP+Mysql 灵活用工_灵活用工系统_灵活用工平台

基于 ThinkPHPMysql 灵活用工灵活用工平台灵活用工系统灵活用工小程序灵活用工源码灵活用工系统源码 开发语言 ThinkPHPMysql 源码合作 提供完整源代码 软件界面展示 一、企业管理后台 二、运用管理平台 三、手机端

【Linux内核揭秘】深入理解命令行参数和环境变量

文章目录 命令行参数什么是命令行参数main函数的参数 环境变量什么是环境变量常见的环境变量PATHHOMESHELLPWDOLDPWD 本地变量总结 命令行参数 什么是命令行参数 形如这样的命令后面带的选项就是命令行参数。 首先我们要了解一下命令行参数的原理。 我们知道像ls,mkdir,touch等…

Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义

Pytest-Bdd-Playwright 系列教程(4):基于敏捷的通用步骤定义 前言一、项目结构二、通用步骤定义三、特性文件设计四、测试脚本实现五、运行测试总结 前言 在敏捷迭代中,为了适应快速、高频的交付,自动化测试框架的设计…

银行信贷风控专题:Python、R 语言机器学习数据挖掘应用实例合集:xgboost、决策树、随机森林、贝叶斯等...

全文链接:https://tecdat.cn/?p38026 分析师:Fanghui Shao 在当今金融领域,风险管控至关重要。无论是汽车贷款违约预测、银行挖掘潜在贷款客户,还是信贷风控模型的构建,以及基于决策树的银行信贷风险预警,…

Ubuntu22.04环境搭建MQTT服务器

官网: https://mosquitto.org 1.引入库 sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa2.升级安装工具 sudo apt-get update 3.安装 sudo apt-get install mosquitto 4.安装客户端 sudo apt-get install mosquitto-clients5.添加修改配置文件 进…

Python | Leetcode Python题解之第519题随机翻转矩阵

题目: 题解: class Solution:def __init__(self, m: int, n: int):self.m mself.n nself.total m * nself.map {}def flip(self) -> List[int]:x random.randint(0, self.total - 1)self.total - 1# 查找位置 x 对应的映射idx self.map.get(x,…

【linux网络编程】| socket套接字 | 实现UDP协议聊天室

前言:本节内容将带友友们实现一个UDP协议的聊天室。 主要原理是客户端发送数据给服务端。 服务端将数据再转发给所有链接服务端的客户端。 所以, 我们主要就是要实现客户端以及服务端的逻辑代码。 那么, 接下来开始我们的学习吧。 ps:本节内容…

Windows 下实验视频降噪算法 MeshFlow 详细教程

MeshFlow视频降噪算法 Meshflow 视频降噪算法来自于 2017 年电子科技大学一篇高质量论文。 该论文提出了一个新的运动模型MeshFlow,它是一个空间平滑的稀疏运动场 (spatially smooth sparse motion field),其运动矢量 (motion vectors) 仅在网格顶点 (m…

随机采样方法之逆变换采样

抽样或采样是指从目标总体中抽取出部分个体也就是样本,通过对样本的属性或特征进行分析,以此对总体进行评估。采样作为一种重要的数据分析方法,在深度学习、渲染等诸多方面具有广泛的应用。本文将回顾一种基本的采样方法即逆变换采样。 一、…

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份)-最新出炉 附下载链接

国自然地学部立项名单(2021-2023年)和标书范本(2007-2017年33份) 下载链接-点它👉👉👉: 国自然地学部立项名单(2021-2023年)和标书范本(2007-201…

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变(了解) 析构函数的重写 override 和 final关键字 3. 重载,重写&…

信息安全数学基础(34)正规子群和商群

正规子群详述 定义: 设G是一个群,H是G的子群。若H的左陪集与右陪集总是相等(即对任何的a∈G,都有aHHa),则称H是G的正规子群或不变子群,记为H⊴G。 性质: 平凡性:任何群G…

日期选择简化版今日、本周、本月、本季度、本年

function 未来之窗_时间_现在() {let date new Date(),year date.getFullYear(), //获取完整的年份(4位)month date.getMonth() 1, //获取当前月份(0-11,0代表1月)strDate date.getDate() // 获取当前日(1-31),小时 date.getHours(),分钟 date.getMinutes();if (month &…