音视频相关的一些基本概念

音视频相关的一些基本概念

文章目录

    • 音视频相关的一些基本概念
      • RTT
      • H264
      • profile & level
      • I帧 vs IDR
      • MP4 封装格式
      • AAC封装格式
      • TS封装格式
      • Reference

RTT

TCP中的RTT指的是“往返时延”(Round-Trip Time),即从发送方发送数据开始,到发送方接收到来自接收方的确认消息所经过的时间。
RTT时延通常由三部分决定:链路的传播时间、末端系统的处理时间、路由器等网络中间节点的缓存和排队时间。
正常情况下报文的传输时间和在应用处理时间相对固定,在网络拥堵情况下会出现RTT时延的波动。

RTT是衡量网络传输性能的重要指标之一,能够反映出数据在网络中传输的速度和稳定性。
通常情况下,RTT越短,网络传输的速度就越快,反之则越慢。
因此,通过监测TCP中的RTT时延,可以初步判断网络的性能如何。
但需要注意的是,RTT时延只是一个指标,要全面评估网络性能还需要结合其他指标进行综合分析。

H264

从功能角度分为两层: 视频编码层(VCL)和网络提取层(NAL)
从码流解析的角度: H264 码流实际可以理解为由一个一个的 NALU 单元组成。

视频编码层(VCL)

VCL: 进行视频编解码,包括预测(帧内预测和帧间预测),DCT 变化和量化,熵编码和切分数据等功能,是为了实现更高的视频压缩比。
NAL: 负责以网络所要求的恰当的方式对 VCL 数据进行打包和传送.
VCL工作过程:

  1. 压缩:预测(帧内预测和帧间预测)-> DCT 变化和量化 -> 比特流编码;
  2. 切分数据,主要为了第三步。这里一点,网上看到的“切片(slice)”、“宏块(macroblock)”是在VCL 中的概念,一方面提高编码效率和降低误码率、另一方面提高网络传输的灵活性。
  3. 压缩切分后的 VCL 数据会包装成为 NAL 中的一部分

NAL单元-NALU

NALU分为NAL unit header 和 NAL unit payoad

  • NALU header结构
    forbidden_zero_bit 在网络传输中发生错误时,会被置为 1,告诉接收方丢掉该单元;否则为 0。
    nal_ref_idc 用于表示当前NALU的重要性,值越大,越重要。解码器在解码处理不过来的时候,可以丢掉重要性为 0 的 NALU。NALU类型说明
  • NALU类型说明
    在这里插入图片描述
  • NALU header 解析举例

00 00 00 01 06: SEI
00 00 00 01 67: 0x67&0x1f = 0x07: SPS
00 00 00 01 65: 0x65&0x1f = 0x05: IDR

  • H264分层结构
    在这里插入图片描述

profile & level

Profile和Level是H.264中一个非常重要的概念,Profile用于确定视频编码过程中帧间压缩使用的算法(例如是否包含B帧、CABAC支持、颜色空间支持等),Profile越高,就说明采用了越高级的压缩特性,对应的对编解码硬件的要求也越高;
Level是对视频本身特性的一些描述(码率,分辨率,fps等),Level越高,视频的码率、分辨率、fps越高。

对于H.264的Profile和Level比较专业化的描述是:Profile@Level,例如Main@4.2,Baseline@3.1,High@5.0。

I帧 vs IDR

举个例子,在一段视频中,
存在以下帧:I P B P B P B B P1 I P2 B…
如果这段视频应用了多重参照帧,那么P2 帧在参照他前面的I 帧的同时,还可能会参照I 帧之前的P1 帧,由于I 帧前后的场景可能会有很大的反差甚至根本不同,所以此时P 帧参考I帧之前的帧不但会没有意义,反而会造成很多问题。
所以一种新型的帧被引入,那就是IDR 帧。如果这段视频应用了多重参考帧的同时采用了IDR 帧,那么帧的顺序就会变成这样:I P B P B P B B P1 IDR P2 B…由于IDR 帧禁止后面的帧向自己前面的帧参照,所以这回P2 帧就不会参照P1 帧了。

MP4 封装格式

Bento4-SDK-1-6-0-639.x86_64-microsoft-win32\bin\mp4dump.exe --verbosity 0 D:\test.mp4 >D:\test.txt

[ftyp] size=8+24major_brand = mp42minor_version = 1compatible_brand = mp42compatible_brand = mp41compatible_brand = isomcompatible_brand = avc1
[free] size=8+0
[mdat] size=8+11329609
[moov] size=8+157226[mvhd] size=12+96timescale = 1000duration = 300011duration(ms) = 300011[trak] size=8+96887[tkhd] size=12+80, flags=1enabled = 1id = 1duration = 300000width = 240.000000height = 136.000000[mdia] size=8+96787[mdhd] size=12+20timescale = 30000duration = 8999991duration(ms) = 299999language = und[hdlr] size=12+44handler_type = videhandler_name = Test MP4 - Video AVC[minf] size=8+96691[vmhd] size=12+8, flags=1graphics_mode = 0op_color = 0000,0000,0000[dinf] size=8+28[dref] size=12+16, flags=acf9fd[url ] size=12+0, flags=1location = [local to file][stbl] size=8+96627[stsd] size=12+135, flags=11e840entry_count = 1[avc1] size=8+123data_reference_index = 1width = 240height = 136compressor = [avcC] size=8+37Configuration Version = 1Profile = MainProfile Compatibility = 40Level = 13NALU Length Size = 4Sequence Parameter = [67 4d 40 0d 96 62 07 89 fc b0 80 00 00 32 00 00 0b b5 47 8a 14 89]Picture Parameter = [68 ee 3c 80][stts] size=12+12entry_count = 1[ctts] size=12+57276entry_count = 7159[stss] size=12+868entry_count = 216[stsc] size=12+28entry_count = 2[stsz] size=12+35972sample_size = 0sample_count = 8991[stco] size=12+2252entry_count = 562[trak] size=8+60215[tkhd] size=12+80, flags=1enabled = 1id = 2duration = 300011width = 0.000000height = 0.000000[mdia] size=8+60115[mdhd] size=12+20timescale = 48000duration = 14400512duration(ms) = 300010language = und[hdlr] size=12+44handler_type = sounhandler_name = Test MP4 - Audio AAC[minf] size=8+60019[smhd] size=12+4balance = 0[dinf] size=8+28[dref] size=12+16, flags=73b98f[url ] size=12+0, flags=1location = [local to file][stbl] size=8+59959[stsd] size=12+79, flags=a29ce1entry_count = 1[mp4a] size=8+67data_reference_index = 1channel_count = 2sample_size = 16sample_rate = 48000[esds] size=12+27[ESDescriptor] size=2+25es_id = 0stream_priority = 0[DecoderConfig] size=2+17stream_type = 5object_type = 64up_stream = 0buffer_size = 0max_bitrate = 0avg_bitrate = 0DecoderSpecificInfo = 11 90 [Descriptor:06] size=2+1[stts] size=12+12entry_count = 1[stsc] size=12+28entry_count = 2[stsz] size=12+56260sample_size = 0sample_count = 14063[stco] size=12+3520entry_count = 879

AAC封装格式

AAC(Advance Audio Coding):
即高级音频编码,出现在1997年,基于MPEG-2的音频编码技术,当时被称为MPEG-2 AAC,因此把其作为MPEG-2(MP2)标准的延伸。是由Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,目的是取代MP3格式,随着MPEG-4(MP4)标准在2000年的成型,则为AAC也叫M4A。

AAC格式包括ADIF,ADTS和LATM. 需要说明的是ADIF,ADTS和LATM只是AAC的三种封装方式,只是封装方式不同,编码数据都是一致的。

1:ADIF:只有一个头,其余后面都跟着raw data,文件存储体积小,只能从开始处一帧一帧解码,无法跳播,无法从中间位置解码。

Audio Data Interchange Format 音频数据交换格式,该格式一般应用在将音频通过写文件方式存储在磁盘里的场景,不能进行随机访问,不允许在文件中间开始进行解码;只能从文件头开始解码,无法跳播。

2:ADTS:每帧都有7个字节的头,方便跳播,从任何位置都可以直接进行解码。

ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。这种格式可以用于广播电视。
ADIF只有一个文件头,ADTS每个包前面有一个文件头。
在这里插入图片描述

3:LATM:LATM格式具有很大的灵活性,每帧的音频配置单元既可以带内传输,又可以带外传输。正因为如此,LATM不仅适用于流传输还可以用于RTP传输,特别时CMMB广播默认码流格式为LATM。

LATM 的全称为“Low-overhead MPEG-4 Audio TransportMultiplex”(低开销音频传输复用),是MPEG-4 AAC制定的一种高效率的码流传输方式,MPEG-2 TS 流也采用LATM作为AAC 音频码流的封装格式之一。

TS封装格式

TS 全称是 MPEG2-TS,MPEG2-TS 是一种标准容器格式,传输与存储音视频、节目与系统信息协议数据,广泛应用于数字广播系统,我们日常数字机顶盒接收到的就是 TS(Transport Stream,传输流)流。

+-+-+-+-+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
|  TS   |  =  |  Packet 1 |  Packet 2 |  Packet 3 | ... | Packet n-1|  Packet n |
+-+-+-+-+     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-

TS 传输流中几个基本概念:

  • ES (Elementary Stream):基本流,直接从编码器出来的数据流,可以是编码过的音频、视频或其他连续码流;
  • PES (Packetized Elementary Streams):PES流是ES流经过打包处理后形成的数据流,在这个过程中完成了将ES流分组、加入包头信息(PTS、DTS 等)操作。PES流的基本单位是PES包,PES包由包头和payload组成;
  • PS 流 (Program Stream):节目流,PS 流由 PS 包组成,而一个 PS 包又由若干个 PES 包组成。一个 PS 包由具有同一时间基准的一个或多个 PES 包复合合成;
  • TS 流 (Transport Stream):传输流,TS 流由固定长度(188 字节)的 TS 包组成,TS 包是对 PES 包的另一种封装方式,同样由具有同一时间基准的一个或多个 PES 包复合合成。PS 包是不固定长度,而 TS 包为固定长度;

TS 文件分为三层:TS 层、PES 层、ES 层。ES 层就是音视频数据,PES 层是在音视频数据上加了时间戳等数据帧的说明信息,TS层是在PES层上加入了数据流识别和传输的必要信息。

TS 包大小固定为 188 字节,TS 层分为三个部分:TS header、adaptation field、payload;
TS header 固定 4 个字节(0x47开头作为同步字节);
adaptation field 可能存在也可能不存在,主要作用是给不足 188 字节的数据做填充;
payload 是 PES 数据;

One TS Packet:4bytes          xbytes          (184-x)bytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| TS header | adaptation field | payload(PES) | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
One payload(PES):+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| PES header | optional PES header | payload(ES) | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
One payload(ES NALU)Video:3 or 4 bytes    1byte       xbytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| StartCode  | NAL header | H264 data | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+Audio:7bytes        xbytes
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| ADTS header | AAC data | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Reference

TCP中RTT时延的理解

H264码流结构详解
H.264中的Profile和Level
I帧、P帧和B帧的特点及IDR

AAC_ADTS_1
AAC_ADTS_2

音视频封装 - TS 封装格式
TS文件格式详解及解封装过程

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

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

相关文章

nVisual可视化资源管理工具

nVisual主要功能 支持自定义层次化的场景结构 与物理世界结构一致,从全国到区域、从室外到室内、从机房到设备。 支持自定义多种空间场景 支持图片、CAD、GIS、3D等多种可视化场景搭建。 丰富的模型库 支持图标、机柜、设备、线缆等多种资源对象创建。 资源可…

Web 表单开发全解析:从基础到高级掌握 HTML 表单设计

文章目录 前言一、什么是 Web 表单?二、表单元素详解总结前言 在现代 Web 开发中,表单 是用户与后端服务交互的重要桥梁。无论是用户登录、注册、搜索,还是提交反馈,表单都无处不在。在本文中,我们将从基础入手,全面解析表单的核心知识点,并通过示例带你轻松掌握表单开…

【LeetCode: 145. 二叉树的后序遍历 + 栈】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

2024年大热,Access平替升级方案,也适合Excel用户

欢迎各位看官,您来了,就对了! 您多半是Access忠实粉丝,至少是excel用户,亦或是WPS用户吧。那就对了,今天的分享肯定对您有用。 本文1100字,阅读时长2分50秒! 现实总是不尽人意&am…

【mac】mac自动定时开关机和其他常用命令,管理电源设置的工具pmset

一、操作步骤 1、打开终端 2、pmset 是用于管理电源设置的强大工具,我们将使用这个命令 (1)查询当前任务 pmset -g sched查看到我当前的设置是 唤醒电源开启在 工作日的每天早上8点半 上班时不用手动开机了 (2)删…

学习日记_20241126_聚类方法(自组织映射Self-Organizing Maps, SOM)

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

IIC和SPI的时序图

SCL的变化快慢决定了通信速率,当SCL为低电平的时候,无论SDA是1还是0都不识别: ACK应答:当从设备为低电平的时候识别为从设备有应答: 谁接收,谁应答: 起始位和停止位: IIC的时序图&am…

论文笔记-WWW2024-ClickPrompt

论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…

【游资悟道】-作手新一悟道心法

作手新一经典语录节选: 乔帮主传完整版:做股票5年,炼成18式,成为A股低吸大神!从小白到大神,散户炒股的六个过程,不看不知道自己水平 围着主线做,多研究龙头,研究涨停&am…

qt QToolButton详解

1、概述 QToolButton是Qt框架中的一个控件,它继承自QAbstractButton。QToolButton通常用于工具栏(QToolBar)中,提供了一种快速访问命令或选项的方式。与普通的QPushButton按钮相比,QToolButton通常只显示一个图标而不…

【算法day3】链表:增删改查及其应用

题目引用 移除链表元素设计链表翻转链表 链表介绍 链表与数组不同的是,它是以指针串联在一起的分布在内存随机位置上的,而不是像指针一样占用整块的连续空间。因此也不支持通过指针读取。所以在题目里面总是比较抽象,需要通过画图来帮助解题…

【通俗理解】步长和学习率在神经网络中是一回事吗?

【通俗理解】步长和学习率在神经网络中是一回事吗? 【核心结论】 步长(Step Size)和学习率(Learning Rate, LR)在神经网络中并不是同一个概念,但它们都关乎模型训练过程中的参数更新。 【通俗解释&#x…

Zookeeper选举算法与提案处理概览

共识算法(Consensus Algorithm) 共识算法即在分布式系统中节点达成共识的算法,提高系统在分布式环境下的容错性。 依据系统对故障组件的容错能力可分为: 崩溃容错协议(Crash Fault Tolerant, CFT) : 无恶意行为,如进程崩溃,只要…

Cesium 当前位置矩阵的获取

Cesium 位置矩阵的获取 在 3D 图形和地理信息系统(GIS)中,位置矩阵是将地理坐标(如经纬度)转换为世界坐标系的一种重要工具。Cesium 是一个强大的开源 JavaScript 库,用于创建 3D 地球和地图应用。在 Cesi…

SQL进阶技巧:非等值连接--单向近距离匹配

目录 0 场景描述 1 数据准备 2 问题分析 ​编辑 ​编辑 3 小结 数字化建设通关指南 0 场景描述 表 t_1 和表 t_2 通过 a 和 b 关联时,有相等的取相等的值匹配,不相等时每一 个 a 的值在 b 中找差值最小的来匹。 表 t_1:a 中无重复值…

微积分复习笔记 Calculus Volume 2 - 3.1

The first 2 chapters of volume 2 are the same as those in volume 1. Started with Chapter 3. 3.1 Integration by Parts - Calculus Volume 2 | OpenStax

红日靶场-5

环境搭建 这个靶场相对于前几个靶场来说较为简单,只有两台靶机,其中一台主机是win7,作为我们的DMZ区域的入口机,另外一台是windows2008,作为我们的域控主机,所以我们只需要给我们的win7配置两张网卡&#…

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳,首届鸿蒙生态大会上,软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合软通教育深度参与了大会多项重磅…

Mac配置和启动 Tomcat

Tomcat 配置与启动: 配置 Tomcat: homebrew install tomcat 启动 Tomcat: 如果cd ~/tomcat/bin文件夹存在startup.sh文件,可以直接在终端运行:./startup.sh 如果~/bin目录下,只有catalina文件。则在终端运行…

基于matlab程序实现人脸识别

1.人脸识别流程 1.1.1基本原理 基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb—Cr子平面上的投影将缩减,与中心区域显著不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。…