音视频学习(一百零五):Access Unit (AU)和RTP分包

📅 发布时间:2026/9/6 7:36:20
音视频学习(一百零五):Access Unit (AU)和RTP分包
一、Access Unit (AU) 概述1.1 什么是 Access UnitAccess Unit访问单元简称 AU是音视频编码标准中的一个基本概念代表编码数据流中可以被独立解码和呈现的最小单元。在不同的编解码标准中AU 的具体含义略有差异H.264/AVC H.265/HEVC一个 AU 通常包含一帧完整的视频图像所需的所有 NAL 单元包括 SPS、PPS、SEI、Slice 等AAC 音频一个 AU 对应一个音频帧包含 1024 或 960 个音频采样点MPEG-4AU 是可以独立解码的编码对象单元1.2 AU 的重要特性┌─────────────────────────────────────┐ │ Access Unit (AU) │ ├─────────────────────────────────────┤ │ • 独立解码 │ │ • 完整呈现时间戳 (PTS/DTS) │ │ • 可能包含多个 NAL 单元 │ │ • 边界明确 │ └─────────────────────────────────────┘关键属性PTS (Presentation Time Stamp)呈现时间戳指示该 AU 何时显示DTS (Decoding Time Stamp)解码时间戳指示该 AU 何时解码完整性AU 必须完整传输才能被正确解码1.3 AU 在流媒体传输中的意义在流媒体传输场景中AU 是封装和传输的基本单位RTP 传输每个 AU 需要被分包成一个或多个 RTP 包时间同步通过 AU 的时间戳实现音视频同步丢包恢复AU 边界清晰便于错误恢复和重传策略缓冲管理接收端以 AU 为单位进行缓冲和播放控制二、RTP 协议基础2.1 RTP 简介RTP (Real-time Transport Protocol)是互联网上传输实时数据如音频、视频的标准协议。┌──────────────────────────────────────────┐ │ RTP Packet Header │ ├──────────────────────────────────────────┤ │ V(2) | P(1) | X(1) | CC(4) | M(1) | PT(7)│ │ Sequence Number (16) │ │ Timestamp (32) │ │ SSRC Identifier (32) │ │ Payload (variable) │ └──────────────────────────────────────────┘关键字段Sequence Number包序号用于检测丢包和乱序Timestamp采样时间戳用于同步和抖动消除M (Marker) bit标记位通常用于标识帧边界PT (Payload Type)载荷类型指示编码格式2.2 为什么需要分包MTU 限制网络最大传输单元通常为 1500 字节以太网超过需要分包实时性要求大包传输延迟高分包可以降低传输延迟丢包影响小包丢失影响范围小便于错误恢复三、RTP 分包的主要方式3.1 单 NAL 单元模式Single NAL Unit Mode适用场景NAL 单元小于 MTU 时直接封装┌─────────────────────────────────────┐ │ RTP Header (12 bytes) │ ├─────────────────────────────────────┤ │ NAL Header (1 byte) │ ├─────────────────────────────────────┤ │ NAL Payload │ └─────────────────────────────────────┘特点✅ 简单高效无额外开销✅ 适合小尺寸 NAL如 SPS、PPS、小 Slice❌ 不适合大帧如 I 帧典型应用低分辨率视频流320x240参数集传输SPS/PPS音频帧传输3.2 分片单元模式Fragmentation Unit - FU适用场景单个 NAL 单元超过 MTU需要拆分成多个 RTP 包3.2.1 FU-A 模式H.264First Packet: ┌─────────────────────────────────────┐ │ RTP Header (M0) │ ├─────────────────────────────────────┤ │ FU Indicator (Type28) │ ├─────────────────────────────────────┤ │ FU Header (S1, E0, Typeslice) │ ├─────────────────────────────────────┤ │ NAL Payload Fragment 1 │ └─────────────────────────────────────┘ Middle Packets: ┌─────────────────────────────────────┐ │ RTP Header (M0) │ ├─────────────────────────────────────┤ │ FU Indicator (Type28) │ ├─────────────────────────────────────┤ │ FU Header (S0, E0, Typeslice) │ ├─────────────────────────────────────┤ │ NAL Payload Fragment N │ └─────────────────────────────────────┘ Last Packet: ┌─────────────────────────────────────┐ │ RTP Header (M1) │ ← Marker bit 标记结束 ├─────────────────────────────────────┤ │ FU Indicator (Type28) │ ├─────────────────────────────────────┤ │ FU Header (S0, E1, Typeslice) │ ← End bit 标记最后片段 ├─────────────────────────────────────┤ │ NAL Payload Fragment Last │ └─────────────────────────────────────┘FU Header 字段S (Start) bit首包标志E (End) bit尾包标志R (Reserved) bit保留Type (5 bits)原始 NAL 单元类型特点✅ 支持任意大小 NAL 单元的分片✅ 接收端可根据 S/E 标志重组✅ 适用于高清视频流⚠️ 丢失中间包会导致整个 NAL 单元不可用典型应用1080p/4K 高清视频直播I 帧传输通常几十到几百 KB3.3 聚合包模式Aggregation Packet - AP适用场景多个小 NAL 单元合并到一个 RTP 包中减少包头开销3.3.1 STAP-ASingle Time Aggregation Packet┌─────────────────────────────────────┐ │ RTP Header │ ├─────────────────────────────────────┤ │ STAP-A NAL Header (Type24) │ ├─────────────────────────────────────┤ │ NAL Size 1 (2 bytes) │ │ NAL Unit 1 (SPS) │ ├─────────────────────────────────────┤ │ NAL Size 2 (2 bytes) │ │ NAL Unit 2 (PPS) │ ├─────────────────────────────────────┤ │ NAL Size 3 (2 bytes) │ │ NAL Unit 3 (SEI) │ └─────────────────────────────────────┘特点✅ 减少 RTP 包数量降低网络开销✅ 适合聚合 SPS、PPS、SEI 等小 NAL❌ 要求所有 NAL 具有相同时间戳⚠️ 单包丢失会影响多个 NAL典型应用视频流初始化发送 SPSPPS低码率场景下的小 slice 聚合3.4 混合模式组合使用实际应用中常常混合使用以上模式AU (一帧视频) ├── SPS (小) ──────────── Single NAL Mode (RTP 1) ├── PPS (小) ──────────── STAP-A (RTP 2) ├── SEI (小) ──────────── STAP-A (RTP 2) └── Slice (大) ────────── FU-A (RTP 3~10)策略参数集SPS/PPS→ STAP-A 聚合小 Slice → Single NAL大 Slice/I 帧 → FU-A 分片四、不同场景下的分包策略4.1 低延迟直播延迟 500ms需求极低延迟容忍少量丢包策略优先使用 FU-A尽快发送不等待聚合小 MTU1200 字节减少单包传输时间无缓冲接收端立即解码允许跳帧丢包时跳过当前帧典型应用视频会议、云游戏、远程控制4.2 高质量直播延迟 2-5 秒需求画质优先允许适度延迟策略混合模式小 NAL 聚合大 NAL 分片标准 MTU1400 字节接收端缓冲2-3 秒平滑抖动和丢包FEC/重传纠错码或 NACK 重传典型应用体育赛事直播、音乐会直播4.3 点播流媒体HLS/DASH需求稳定传输支持切换码率策略TCP HTTP不使用 RTP直接传输完整 AU切片传输TS/fMP4每个切片包含若干完整 AU自适应码率根据网络动态调整典型应用YouTube、Netflix、爱优腾4.4 弱网环境移动网络需求抗丢包自适应策略小包策略800-1000 字节降低单包丢失影响冗余编码FECRS 码、喷泉码关键帧保护I 帧多路径传输动态码率调整SVC/分层编码典型应用移动直播、车载视频五、分包实现的关键要点5.1 NAL 单元边界检测需要解析 Annex B 格式Start Code或 AVCC 格式Length Prefix// Annex B: 0x00 0x00 0x00 0x01 或 0x00 0x00 0x01// AVCC: [4 bytes length][NAL data]5.2 Marker Bit 的设置Video每个 AU 的最后一个 RTP 包设置 M1Audio每个音频帧对应的 RTP 包设置 M15.3 时间戳计算RTP Timestamp PTS × (RTP Clock Rate / 时基)示例H.264时钟频率 90000Hz帧率 30fpsFrame 1: TS 0 Frame 2: TS 3000 (90000/30) Frame 3: TS 60005.4 序列号管理每发送一个 RTP 包序列号加 1循环使用0~65535接收端据此检测丢包和乱序六、工具与调试6.1 常用工具Wireshark抓包分析 RTP 流FFmpeg生成和解析 RTP 流ffmpeg-re-iinput.mp4-c:vlibx264-frtp rtp://192.168.1.100:5004VLC接收和播放 RTP 流GStreamer灵活的流媒体框架6.2 性能指标指标说明目标值丢包率丢失包占比 1%抖动包到达时间差异 30ms端到端延迟采集到播放 500ms低延迟码率单位时间数据量自适应七、总结Access Unit 和 RTP 分包是音视频流媒体传输的核心技术AU是编解码的基本单位保证了数据的独立性和完整性RTP 分包需要根据场景选择合适的模式单包模式小 NAL低开销分片模式FU大 NAL必选聚合模式AP多小 NAL减少包数实际应用中需要综合考虑延迟、带宽、丢包率等因素掌握这些技术是构建高质量流媒体系统的基础。参考资料RFC 3550 - RTP: A Transport Protocol for Real-Time ApplicationsRFC 6184 - RTP Payload Format for H.264 VideoRFC 7798 - RTP Payload Format for H.265/HEVC Video