概念
AUD(Access Unit Delimiter)访问单元分隔符
AUD 是在视频编码(特别是 H.264/AVC)中定义的一种 NALU(网络抽象层单元) 类型,用于指示视频流中一帧(访问单元)的边界。
它是一个特殊的 NAL 单元,其作用是:
- 明确表示一帧视频数据的开始。
- 提供解析边界,方便解码器正确解码每一帧。
技术细节
-
NAL unit type: 9
-
通常是可选的(对某些流媒体协议或容器格式来说)
-
内容示例(十六进制):
00 00 00 01 09 F0
应用场景
场景 | 作用 |
---|---|
视频解码同步 | 有助于解码器快速同步帧,尤其是在随机访问/关键帧跳转时 |
流媒体传输(如 RTP / RTMP) | 提供帧边界提示,有助于流中帧对齐 |
广播或低延迟直播 | 有时要求明确帧结构,以防解码器出错 |
调试或封装分析工具(如 ffmpeg, VLC) | 通过 AUD 检测视频流中帧的划分情况 |
封装为 Annex-B 格式的裸流 | 增强流的可移植性和通用解码兼容性 |
AUD 和 WebRTC 的关系
- WebRTC 默认不需要 AUD
- WebRTC 主要使用 RTP + SRTP + SDP 来封装和传输媒体,帧边界依靠 RTP Header 和 payload 处理,而不是依赖像 AUD 这样的显式帧分隔。
- WebRTC 解码器通常内建解析能力,不依赖 AUD。
- 但是某些编码器在输出 H.264 流时会包含 AUD
- 比如使用 FFmpeg + x264 时,如果设置了
-bsf h264_mp4toannexb
,就会插入 AUD。 - WebRTC 某些实现(比如使用硬件解码器的移动端)在处理含 AUD 的 NALU 时可能会出现兼容性问题。
- 比如使用 FFmpeg + x264 时,如果设置了
- SRS、FFmpeg 转码时 AUD 是否保留可能影响 WebRTC 播放
- 所以在实际部署时,通常会在转码环节判断是否剔除 AUD。
是否需要 AUD?
应用 | 推荐是否使用 AUD |
---|---|
本地解码 / 播放(MP4/MKV) | 通常不需要 |
Annex-B 裸流推送 | 推荐使用 |
RTP 推流(WebRTC/SIP) | 通常不需要 |
流媒体转码系统(如 FFmpeg + SRS) | 视兼容性决定,部分设备可能需要剔除 |
Annex-B 格式
Annex-B 是 H.264 裸流的标准封装形式,特点:
- 每个 NALU 以起始码
0x00000001
(或0x000001
)开头 - 所有 NALU 都是裸的,包括:
- SPS(NAL type 7)
- PPS(NAL type 8)
- IDR/I/P/B 帧(NAL types 5/1/2)
- AUD(NAL type 9)
r
00 00 00 01 09 F0 <- AUD
00 00 00 01 67 ... <- SPS
00 00 00 01 68 ... <- PPS
00 00 00 01 65 ... <- IDR
总结
AUD 是 H.264 视频中的一个帧分隔符,用于辅助解码器识别帧起点,但在 WebRTC 等现代实时通信协议中通常不需要,甚至应剔除。