音视频面试题之tls-02三层结构

网络基础面试题(更新中) 答案:Pytest简单易用编写测试用例就像写普通函数使用assert语句进行断言,无需学习新的 API功能强大支持参数化测试丰富的标记系统(Mark)强大的 Fixtures 机制灵活的钩子函数(Hooks)插件丰富:并发执行:超时控制:HTML 报告:Allure 报告报告完善详细的错误信息支持多种报告格式清晰的测试结果展示兼容性好兼容 unittest兼容 nose支持多种测试风格# 简单的测试用例# 参数化测试(1, 2, 3), 阅读详情

1. TS 的"三层结构"是什么

一个完整的 TS 流,从外到内是这样封装的:

┌─────────────────────────────────────────────────┐
│  TS 层(Transport Stream,传输层)               │  ← 第1层:固定188字节的包
│  ┌───────────────────────────────────────────┐  │
│  │  PES 层(Packetized ES,打包基本流)       │  │  ← 第2层:把ES打成包
│  │  ┌─────────────────────────────────────┐  │  │
│  │  │  ES 层(Elementary Stream,基本流)  │  │  │  ← 第3层:原始音视频数据
│  │  │  (H.264 / AAC / ...)               │  │  │
│  │  └─────────────────────────────────────┘  │  │
│  └───────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘
层级名称作用
第1层TS 包(Transport Stream Packet)传输的最小单元,固定 188 字节,带 PID 标识
第2层PES 包(Packetized Elementary Stream)把原始音视频打成包,带 PTS/DTS 时间戳
第3层ES 流(Elementary Stream)原始的视频/音频编码数据

2. 第1层:TS 包详解(你图里的内容)

2.1 TS 包整体结构

每个 TS 包固定 188 字节,结构如下:

  4字节         0~N字节         剩余字节
┌────────┬─────────────────┬──────────────┐
│ header │ adaptation field│   payload    │
│ (4B)   │  (自适应区)     │   (有效载荷) │
└────────┴─────────────────┴──────────────┘
  • header:固定 4 字节,你图里那张表就是它
  • adaptation field:可选,是否存在由 header 里的 adaptation_field_control 决定
  • payload:承载的内容,通常是 PES 数据(或者 PAT/PMT 等表)

2.2 TS Header 逐字段解析

4 字节 = 32 bit,各字段的位分布如下:

字节1(8bit)         字节2(8bit)              字节3(8bit)          字节4(8bit)
┌─────────────┬─┬─┬─┬──────────────┬──┬──┬──────────────┬─────────────────┐
│  sync_byte  │T│P│T│     PID      │T │A │continuity    │  (adaptation     │
│   (0x47)    │E│U│P│   (13bit)    │S │F │counter(4bit) │   field /       │
│             │I│S│R│              │C │C │              │   payload...)    │
└─────────────┴─┴─┴─┴──────────────┴──┴──┴──────────────┴─────────────────┘

对照你图里的字段逐一讲:

字段位数含义通俗理解
sync_byte8b同步字节,固定 0x47(字符’G’)🔑 最重要!解析器就是靠不断找 0x47 来定位每个 TS 包的起点
transport_error_indicator1b传输错误指示,通常为0这个包传输出错了,丢了就行
payload_unit_start_indicator1b负载单元起始标识🔑 PES 包的第一个 TS 包标记为1。因为一个 PES 可能被拆到多个 TS 包里,靠这个位来找到 PES 的开头
transport_priority1b传输优先级,通常0不重要
pid13bPacket ID,包标识🔑 最重要的字段之一!每个 PID 代表一路流(比如视频PID=0x100,音频PID=0x101)。解析器靠 PID 来区分哪个包是视频、哪个是音频
transport_scrambling_control2b加扰控制,00=未加密付费电视加密用的,01/10/11是不同的加密密钥
adaptation_field_control2b自适应区控制🔑 决定这个包有没有自适应区和payload:01=只有payload;10=只有adaptation;11=两者都有
continuity_counter4b连续计数器,0~15循环🔑 每个 PID 独立计数,用来检测丢包(如果序号不连续说明中间丢包了)

2.3 Adaptation Field(自适应区)

当 adaptation_field_control 是 10 或 11 时存在。主要作用:

  1. 填充(padding):PES 数据不足 188 字节时,用 0xFF 填充到整包
  2. PCR(Program Clock Reference):节目时钟参考,用于音视频同步
  3. 随机访问指示:标记关键帧位置,方便 seek

结构大致是:

adaptation_field_length (1B) + flags (1B) + 各种可选字段 + 填充字节(0xFF)

3. 第2层:PES 包

PES = Packetized Elementary Stream,把原始音视频数据打成大包。

一个 PES 包可能很大(比如一帧视频就几十 KB),所以一个 PES 会被拆成很多个 TS 包来传输。

PES 包结构

  6字节        3字节         变长
┌──────────┬───────────┬──────────────┐
│ start code│ PES header│   PES data   │
│ 0x000001  │ (含PTS/DTS)│  (ES数据)   │
└──────────┴───────────┴──────────────┘

关键字段:

字段作用
start code0x000001 + stream_id,PES 包的起始码,用来定位
PTS(Presentation Time Stamp)显示时间戳——这帧应该在什么时候显示给用户
DTS(Decoding Time Stamp)解码时间戳——这帧应该在什么时候送入解码器
PES data里面装的就是 ES 流数据(原始音视频帧)

💡 为什么有 PTS 和 DTS 两个时间戳?
因为视频有 B 帧(双向预测帧),解码顺序和显示顺序不一样。比如显示顺序是 I→B→P,但解码顺序可能是 I→P→B,所以需要两个时间戳分别控制。


4. 第3层:ES 流

ES = Elementary Stream,最原始的编码数据。

  • 视频 ES:H.264 / H.265 / AV1 等编码的裸流,由一个个 NALU 组成
  • 音频 ES:AAC / MP3 / AC-3 等编码的裸流

PES 的 payload 部分就是 ES 数据。


5. 完整的封装流程(发送端)

原始视频帧(H.264)  原始音频帧(AAC)
      │                  │
      ▼                  ▼
┌──────────┐      ┌──────────┐
│  ES 流   │      │  ES 流   │
└────┬─────┘      └────┬─────┘
     │ 打成PES包        │ 打成PES包
     ▼                  ▼
┌──────────┐      ┌──────────┐
│ PES 包   │      │ PES 包   │
│ 带PTS/DTS│      │ 带PTS/DTS│
└────┬─────┘      └────┬─────┘
     │ 拆成188B的TS包   │ 拆成188B的TS包
     │ 视频PID=0x100    │ 音频PID=0x101
     ▼                  ▼
  ┌───────────────────────────┐
  │     TS 流(混合在一起)    │
  │  [视频包][音频包][视频包]… │
  │  + PAT表 + PMT表          │   ← 告诉播放器哪个PID对应什么流
  └───────────────────────────┘

什么是 PAT 和 PMT?

TS 流里除了音视频数据,还有两张特殊的"节目表":

  • PAT(Program Association Table):PID = 0x0000,是节目关联表,告诉你 PMT 在哪个 PID
  • PMT(Program Map Table):节目映射表,告诉你这个节目里有哪些流、每个流的 PID 是什么、是视频还是音频

播放器启动时的查找顺序:

先找 PID=0 的包 → 解析出 PAT → 找到 PMT 的 PID → 解析 PMT → 知道视频PID/音频PID → 开始播放

6. 解析流程(接收端)

以一个播放器解析 TS 文件为例,步骤是:

1. 同步:从数据流中找 0x47,每隔188字节验证一次,确认找到了TS包边界
          ↓
2. 找 PAT:提取 PID=0x0000 的 TS 包,解析出 PMT 的 PID
          ↓
3. 找 PMT:提取 PMT 对应的 PID 包,解析出视频PID、音频PID各是多少
          ↓
4. 按 PID 分流:把 TS 包按 PID 分别送到视频队列和音频队列
          ↓
5. 组装 PES:在每个 PID 队列里,找 payload_unit_start_indicator=1 的包
             作为 PES 开头,把后续 TS 包的 payload 拼起来
          ↓
6. 解析 PES:从 PES 头取出 PTS/DTS
          ↓
7. 取出 ES:PES 的 data 部分就是原始音视频数据
          ↓
8. 送解码器:按 PTS/DTS 把 ES 数据送入解码器解码播放

7. 一张图总结三层关系

一个TS文件里有N多个TS包(188B每个)
 │
 ├── PID=0x0000 → PAT表(节目索引)
 ├── PID=0x1000 → PMT表(节目映射:视频=0x101, 音频=0x102)
 │
 ├── PID=0x101 → 视频TS包序列
 │     ├── [start=1] → PES包第1部分 → 组装PES → 取出视频ES帧
 │     ├── [start=0] → PES包第2部分 ↗
 │     ├── [start=0] → PES包第3部分 ↗
 │     └── ...
 │
 └── PID=0x102 → 音频TS包序列
       ├── [start=1] → PES包第1部分 → 组装PES → 取出音频ES帧
       ├── [start=0] → PES包第2部分 ↗
       └── ...

8. 几个关键的面试/理解要点

  1. 为什么 TS 包固定 188 字节?
    历史原因:ATM 网络的信元是 48 字节有效载荷,188 = 48×4 - 4(4字节头部),适配 ATM 传输。

  2. 怎么从一堆二进制数据里找到 TS 包的起点?
    找 0x47(sync_byte),然后每隔 188 字节验证下一个 0x47,连续验证几次都对就说明同步上了。

  3. 一个 PES 包对应一帧视频吗?
    通常是的,但也不绝对。一个 PES 可以包含多个帧,一个帧也可能被拆成多个 PES(虽然少见)。

  4. PID 是全局唯一的吗?
    在同一个 TS 流里,每个 PID 对应一路唯一的流。不同节目可以复用不同的 PID。

面试突击:MQTT底层原理七连问(附大疆音视频驱动真题解析) 本文深度解析MQTT协议栈的底层实现原理,涵盖架构分层、核心组件、连接建立、发布/订阅模式、消息重传等七大核心机制,并结合大疆音视频驱动面试真题,帮助开发者掌握MQTT的底层实现细节,提升物联网开发能力。 阅读详情

相关推荐

计算机网络-HTTP常见面试题

3xx 资源位置发生了变动,需要重新发送请求获取资源(重定向)4xx 客户端发送的请求报文有误 服务器无法处理。总结:HTTP是一个在计算机世界里面专门用于。(服务器与服务器之间、服务器与客户端之间)5xx 服务器处理请求时内部发生的错误。1xx 提示信息,协议处理的中间状态。2xx 服务器成功处理了客户端的请求。两种实现方式:强制缓存 协商缓存。传输文字、图片、视频等数据的。

qq_45993474的博客 2179

音视频面试题之tls-03http协议传输

HTTP协议是Web通信的基础,基于客户端-服务器模型,使用TCP 80(HTTP)或443(HTTPS)端口。

qq_43538607的博客 42

鸿蒙应用开发全景解析:从音视频处理到IoT安全通信

本文系统介绍了HarmonyOS开发体系的核心技术架构与实践方案。主要内容包括:1)基于分布式数学模型的设备协同机制;2)音视频模块的编解码优化与硬件加速实现;3)采用双因子认证的社区通信安全协议;4)支付与IoT集成的双通道验证方案;5)涵盖性能优化、安全防护等核心面试题库;6)运行时完整性校验等安全防护体系;7)模块化版本适配与分布式能力升级路线。通过数学模型、代码示例和架构设计,全面展示了HarmonyOS在分布式协同、多媒体处理、安全通信等领域的创新解决方案。

郑伟强dev的专栏 397

音视频面试题集锦第 28 期

WebRTC 中的 ICE 作用?WebRTC 中媒体协商过程?WebRTC NAT 有几种类型?WebRTC 中的 GCC 机制?

1188

WebRTC与WebSocket音视频联调实战:信令、ICE、Track全链路排障

WebRTC 是浏览器原生实时音视频通信的核心技术,其本质是一套基于 SDP 协商与 ICE 连接的状态机协议;WebSocket 则是承载该状态同步的关键信令通道,而非简单消息管道。二者深度耦合决定了音视频链路的稳定性——从 candidate 交换失败、addIceCandidate 静默忽略,到弱网下 track 降级失效、WebSocket 断线后状态失步,问题根源往往不在单点 API 调用,而在协议语义理解、状态生命周期管理与网络异常兜底设计。本文聚焦真实工程场景,覆盖信令协议防错设计、ICE 候

weixin_29002595的博客 319

Python《打砖块》小游戏

Python《打砖块》小游戏!

PanDaoxi 1275

探秘HTTPS:如何通过SSL TLS保证网络通信安全,2024年BATJ30套大厂网络安全经典高频面试题

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!

m0_58269520的博客 574

增程式永磁电机发电系统电压环二自由度控制器设计

本论文主要研究增程式永磁电机发电系统的电压环二自由度控制器设计。该系统采用二自由度控制策略,通过精确调节电压环和电流环,显著提高系统的动态响应性能和稳态稳定性。基于SVPWM(空间矢量脉宽调制)技术,本研究设计的电压环控制器能够在负载突变和外部扰动的情况下,快速恢复并保持电压稳定,从而满足增程式永磁电机发电系统对电压精度和稳定性的高要求。仿真分析表明,所设计的控制器在不同工况下展现出良好的电压稳定性、较短的响应时间和较低的稳态误差,能够有效抑制电压波动并提高系统的鲁棒性。实验结果表明,控制器在维持高效能和高

weixin_44553616的博客 897

音视频面试题之tls-05 hls高频面试题

HLS 是苹果推出的基于 HTTP 的流媒体协议,将视频切分为 2-10 秒的 TS 片段,通过 m3u8 播放列表管理。

qq_43538607的博客 44

k8s集群部署私有镜像仓库

本文介绍了在Kubernetes集群中部署私有镜像仓库的完整方案。使用registry:2镜像创建Deployment,通过NodePort(30500)暴露服务,并采用hostPath(/data/registry)实现数据持久化。部署过程包括节点标记、YAML配置、资源创建及验证步骤,同时提供了Docker和Containerd两种环境下的详细使用方法,包括配置不信任私有仓库、镜像推送/拉取操作指南。该方案特别适合开发测试环境,为团队提供便捷的本地镜像管理能力。

weixin_42728286的博客 893

5G NR上行控制信道PUCCH

一、PUCCH概述 PUCCH用于承载上行控制信息,相比LTE,NR PUCCH支持5种不同的格式,按照时域上所占用的符号数量可以分为短格式和长格式两种,如下表所示,短格式占用1-2个符号,可以承载1-2bit信息,长格式占用4-14个符号,可承载大于2bit的信息。NR引入短格式PUCCH的目的是可以缩短HARQ-ACK反馈的时延,长格式仍然是考虑到持续时间长可以保证覆盖。 NR中,考虑到系...

一个关于5G NR的博客^^ 3万+

音视频面试题之tls-01核心知识梳理

HLS(HTTP Live Streaming)是苹果推出的流媒体协议,将视频切分为10秒左右的.ts片段,通过m3u8播放列表按序播放。支持自适应码率、点播与直播,兼容性强,基于HTTP可高效利用CDN。

qq_43538607的博客 50

电机控制必看!SVPWM谐波优化:5段式与7段式全参数对比测试

本文通过实测数据,对比分析了电机控制中5段式与7段式SVPWM控制算法的谐波性能。实验表明,7段式SVPWM在电流波形质量(THD)和低速性能上更优,而5段式SVPWM则在开关损耗和效率方面表现突出。文章为工程师在不同应用场景(如对噪音、效率或动态响应的侧重)下的算法选型提供了清晰的依据和实用的工程指南。

weixin_28331555的博客 178

音视频面试题之tls-04 ffplay_hls拉流源码分析

hls拉流源码分析

qq_43538607的博客 38

人形机器人_双足行走动力学:基于OpenSim平台的股骨模型与建模

摘要 本文系统解析了股骨模型的生物力学特性、建模方法及应用场景,并探讨了基于OpenSim平台的股骨与42块肌肉Hill-type建模的技术流程。股骨作为人体核心承重骨骼,其几何结构、力学性能及多尺度建模方法在医学仿真、假体设计和仿生机器人领域具有重要价值。OpenSim通过逆向动力学、肌肉力优化及多物理场耦合,为临床步态分析、手术规划及仿生系统开发提供量化工具。同时对比了Hill-type模型与其他肌肉模型的优劣,并展望AI驱动建模、智能材料集成等前沿方向。未来研究将聚焦个性化仿真、实时计算优化及生物-机

一枚农夫,闲来有事聊聊天,交个朋友,让沉闷的生活畅想下 1579

YOLO26改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 212

【音视频直播开发】WebRTC 的安全机制

WebRTC 的安全机制对实时通信至关重要。通过使用 DTLS 和 SRTP 协议对媒体流进行加密和鉴别,以及使用 TLS 对所有传输的数据进行加密和使用身份验证机制来验证每个参与者的身份,WebRTC 能够确保数据的机密性、完整性和来源,防止中间人攻击和未经授权的访问。在开发 WebRTC 应用程序时,必须要重视安全问题,并采取必要的安全措施,以确保应用程序的安全性和用户的隐私保护。【直播开发】WebRTC 的安全机制 - 掘金。

irainsa的博客 383

串口、COM、UART、TTL、USB、RS-232、RS-485、I2C、SPI、CAN、1-WIRE

一文搞定,赶紧收藏吧

记得诚 3万+

Android网络编程面试题汇总(含详细解析 四)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊👀你想要的面试题这里都有👀👇👇👇。

Misdirection_XG的博客 138

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

架构面试题汇总:网络协议34问(2024版)

在当今的互联网时代,网络协议是实现各种设备和应用程序之间顺畅通信的基石。无论是构建分布式系统、开发Web应用,还是进行网络通信,对网络协议有深入的理解都是至关重要的。 为了评估候选人在这方面的专业知识和实践经验,我们精心准备了一系列关于网络协议的面试题。这些问题涵盖了RPC(远程过程调用)的基本原理、HTTP协议方法的细节,以及在网络通信中处理故障和确保数据完整性的策略。

码到三十五 1883

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【tls招新web部分题解】(1),网络安全工程师的面试题

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!【完整版领取方式在文末!!

2401_84140485的博客 692

面试题:Https通信原理及交互流程

面试题:Https通信原理及交互流程

m0_60259116的博客 487

TCP/IP、TCP/UDP、HTTP、MQTT&EMQX 最全高频面试题

HTTP 是应用层超文本传输协议,默认明文、无状态、短连接HTTP/1.1、HTTP/2 基于 TCPHTTP/3 基于 UDP(QUIC)HTTPS = HTTP + TLS 加密。

wabi_的博客 317

2024年安卓最新面试官:我面Android程序员,经常遇到背题的,一问原理就露馅了,小米软件测试面试题

1、进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径。(进程可以创建多个线程)。2、在支持线程机制的系统中,进程是系统资源分配的单位,线程是CPU调度的单位。3、进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器。4、进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在。5、进程切换的开销较大。线程相对较小。(前面也提到过,引入线程也出于了开销的考虑)。四、Java对象的生命周期。

2401_84520150的博客 523

Android技术面试题,你会做吗?

前言 首先介绍一下自己基本情况:渣本毕业快4年,一直在小厂摸鱼混日子,学历和简历背景不是很好看,所以面试邀约也不是很多,面试也到处碰壁。 从3月中旬开始面试,一直到4月底。共面试9家公司,近20轮面试,拿到2个小公司和1个上市公司(不是出名的公司)的offer,最后准备去上市公司了。也投递了BAT、360、抖音、快手、平安等大厂的岗位,不过大部分没给面试机会,少数大厂在后续面试中也把我拒绝了,原因是:基础知识不够扎实,技术深度不够。 面试分享 每轮面试都会有自我介绍,所以在面试前大家可以先准备一段自我介绍,

Gaga246的博客 305

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 232
上一篇: 音视频面试题之tls-01核心知识梳理
下一篇: 音视频面试题之tls-05 hls高频面试题
八月的雨季997
博客等级 码龄8年 932粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八月的雨季997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值