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

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

文章目录

    • 音视频相关的一些基本概念
      • 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+24
  major_brand = mp42
  minor_version = 1
  compatible_brand = mp42
  compatible_brand = mp41
  compatible_brand = isom
  compatible_brand = avc1
[free] size=8+0
[mdat] size=8+11329609
[moov] size=8+157226
  [mvhd] size=12+96
    timescale = 1000
    duration = 300011
    duration(ms) = 300011
  [trak] size=8+96887
    [tkhd] size=12+80, flags=1
      enabled = 1
      id = 1
      duration = 300000
      width = 240.000000
      height = 136.000000
    [mdia] size=8+96787
      [mdhd] size=12+20
        timescale = 30000
        duration = 8999991
        duration(ms) = 299999
        language = und
      [hdlr] size=12+44
        handler_type = vide
        handler_name = Test MP4 - Video AVC
      [minf] size=8+96691
        [vmhd] size=12+8, flags=1
          graphics_mode = 0
          op_color = 0000,0000,0000
        [dinf] size=8+28
          [dref] size=12+16, flags=acf9fd
            [url ] size=12+0, flags=1
              location = [local to file]
        [stbl] size=8+96627
          [stsd] size=12+135, flags=11e840
            entry_count = 1
            [avc1] size=8+123
              data_reference_index = 1
              width = 240
              height = 136
              compressor = 
              [avcC] size=8+37
                Configuration Version = 1
                Profile = Main
                Profile Compatibility = 40
                Level = 13
                NALU Length Size = 4
                Sequence 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+12
            entry_count = 1
          [ctts] size=12+57276
            entry_count = 7159
          [stss] size=12+868
            entry_count = 216
          [stsc] size=12+28
            entry_count = 2
          [stsz] size=12+35972
            sample_size = 0
            sample_count = 8991
          [stco] size=12+2252
            entry_count = 562
  [trak] size=8+60215
    [tkhd] size=12+80, flags=1
      enabled = 1
      id = 2
      duration = 300011
      width = 0.000000
      height = 0.000000
    [mdia] size=8+60115
      [mdhd] size=12+20
        timescale = 48000
        duration = 14400512
        duration(ms) = 300010
        language = und
      [hdlr] size=12+44
        handler_type = soun
        handler_name = Test MP4 - Audio AAC
      [minf] size=8+60019
        [smhd] size=12+4
          balance = 0
        [dinf] size=8+28
          [dref] size=12+16, flags=73b98f
            [url ] size=12+0, flags=1
              location = [local to file]
        [stbl] size=8+59959
          [stsd] size=12+79, flags=a29ce1
            entry_count = 1
            [mp4a] size=8+67
              data_reference_index = 1
              channel_count = 2
              sample_size = 16
              sample_rate = 48000
              [esds] size=12+27
                [ESDescriptor] size=2+25
                  es_id = 0
                  stream_priority = 0
                  [DecoderConfig] size=2+17
                    stream_type = 5
                    object_type = 64
                    up_stream = 0
                    buffer_size = 0
                    max_bitrate = 0
                    avg_bitrate = 0
                    DecoderSpecificInfo = 11 90 
                  [Descriptor:06] size=2+1
          [stts] size=12+12
            entry_count = 1
          [stsc] size=12+28
            entry_count = 2
          [stsz] size=12+56260
            sample_size = 0
            sample_count = 14063
          [stco] size=12+3520
            entry_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文件格式详解及解封装过程

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

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

相关文章

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数,这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下,具有管理选项功能 (admin) 的用户可以使用受影响的功能,但是该插件有一个设置允许低权限用…

Linux—进程概念学习-03

目录 Linux—进程学习—31.进程优先级1.1Linux中的进程优先级1.2修改进程优先级—top 2.进程的其他概念3.进程切换4.环境变量4.0环境变量的理解4.1环境变量的基本概念4.2添加环境变量—export4.3Linux中环境变量的由来4.4常见环境变量4.5和环境变量相关的命令4.6通过系统调用获…

go语言逆向-基础basic

文章目录 go 编译命令 ldflags -w -s的作用和问题使用 file 命令查看文件类型 go 语言逆向参考go ID版本GOROOT和GOPATHGOROOTGOPATHGOROOT和GOPATH的关系示例 go build和 go modpclntab (Program Counter Line Table 程序计数器行数映射表)Moduledata程…

RAG架构类型

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

PostgreSQL详细安装教程

#安装PostgreSQL的yum仓库 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm#安装PostgreSQL 15版本 sudo yum install -y postgresql15-server#初始化数据库(若要自定义数据库存储目录…

uniapp介入极光推送教程 超级详细

直接按照下面教程操作 一步一步来 很快就能 完成 下面的文章非常详细 ,我就不班门弄斧了 直接上原文链接 https://blog.csdn.net/weixin_52830464/article/details/143823231

公司金融期末考试题目

公司金融期末考试题 选择题 1.现金折扣和信用条件(教材P253) 题目类似: 下列不属于信用条件的是()。 现金折扣 数量折扣信用期限 折扣期限 给定的信用条件为"1/10,n/40",则其含义…

图论入门编程

卡码网刷题链接:98. 所有可达路径 一、题目简述 二、编程demo 方法①邻接矩阵 from collections import defaultdict #简历邻接矩阵 def build_graph(): n, m map(int,input().split()) graph [[0 for _ in range(n1)] for _ in range(n1)]for _ in range(m): …

visionpro实践项目(一)进阶

在visionpro实践项目(一)中,我们是使用标签工具,将测得的零件宽度信息显示在图片上,在这篇文章中,我们换一种方法,使用脚本工具来显示宽度信息。这就涉及到写代码了。 将Job中的标签工具删掉&am…

KPAC(ICCV 2021)代码单图片推理

文章目录 KPAC(ICCV 2021)代码单图片推理创建虚拟环境安装依赖包数据集路径设置运行测试单图片推理 KPAC(ICCV 2021)代码单图片推理 论文链接:Single Image Defocus Deblurring Using Kernel-Sharing Parallel Atrous Convolutions 该论文研究的问题是散焦去模糊&…

Flink cdc同步增量数据timestamp字段相差八小时(分析|解决)不是粘贴复制的!

问题 我使用flink cdc同步mysql到mysql遇到了timestamp字段缺少八小时的问题。很少无语,flink ,cdc,debezium时区都设置了,没有任何效果! 分析 问题出现在mysql binlog身上!!! 因为默认mysql会使用UTC来…

算法新篇章:AI如何在数学领域超越人类

人工智能咨询培训老师叶梓 转载标明出处 尽管大模型在很多领域表现出色,比如理解自然语言和生成文本,但它们在解决一些复杂的推理任务时,比如数学问题、编程挑战或者医疗诊断,还是显得有些力不从心。最近,一个来自中国…

MTK主板_安卓主板方案_MTK联发科主板定制开发

联发科(MTK)主板以其强大的性能和多样化的功能而受到广泛关注。该平台包括多个型号,例如MT6761、MT8766、MT6762、MT6765、MT8768和MT8788等,均配置了四核或八核64位处理器,主频可高达2.0GHz。采用先进的12nm工艺,搭载Android 11.…

windows安全中心,永久卸载工具分享

使用方法 2024Goby红队版工具分享,附2024年漏洞POC下载 下载链接: https://pan.quark.cn/s/4fc2712a2afc一路回车,选项Y即可 耐心等待几秒种,自动重启 此时打开windows安全中心,已经完全不能使用了,响应…

css—轮播图实现

一、背景 最近和朋友在一起讨论的时候,我们提出了这样的一个提问,难道轮播图的效果只能通过js来实现吗?经过我们的一系列的争论,发现了这是可以通过纯css来实现这一效果的,CSS轮播图也是一种常见的网页展示方式&#x…

使用Python和Pybind11调用C++程序(CMake编译)

目录 一、前言二、安装 pybind11三、编写C示例代码四、结合Pybind11和CMake编译C工程五、Python调用动态库六、参考 一、前言 跨语言调用能对不同计算机语言进行互补,本博客主要介绍如何实现Python调用C语言编写的函数。 实验环境: Linux gnuPython3.10…

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

EXTI配置流程 含中断延时消抖点亮小灯

如图可知,配置流程分成以下一个部分 ①使能GPIO时钟 __HAL_RCC_GPIOA_CLK_ENABLE();// 打开时钟 ②初始化利用 HAL_GPIO_Init 一步到位,可以初始化外设GPIO的一切 4个参数 (引脚 Pull 这里选择的模式是从下面这几个里面选 速度&#x…

Scrapy图解工作流程-cnblog

1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

string类部分(C++)

目录 1. string类 1.1 auto和范围for auto关键词: 范围for: 1.2 string类的常用接口说明 a)string类对象的常见构造 b) string类对象的容量操作 size与length: capacity: empty: clear: reserve: 1.reserve&am…