ES视频封装格式
ES(Elementary Stream,基本流)并不是一种“封装格式”,而是一种“未封装的原始媒体流”。它是视频或音频编码后的裸数据流,没有容器(Container)结构,不包含时间戳、同步信息或多路复用能力。
✅ 核心概念澄清
| 术语 | 说明 |
|---|---|
| ES(Elementary Stream) | 纯编码数据流(如 H.264 裸流、AAC 裸流),无封装 |
| 封装格式(Container) | 如 MP4、MKV、TS 等,用于打包 ES 流 + 元数据 + 同步信息 |
| PES(Packetized Elementary Stream) | ES 被切分为带简单头的包(用于 TS/PS 封装) |
| TS/PS | 传输流(Transport Stream) / 节目流(Program Stream),可包含多个 PES |
📌 关键结论:
ES 不是封装格式,而是“封装前的原始流”。
它不能直接用于播放或存储,必须被封装进容器(如 MP4、TS)才能使用。
一、ES 流的典型特征
1. 视频 ES 示例(H.264)
- 文件扩展名常为
.264、.h264、.bin - 内容仅为 NAL 单元序列(如 SPS、PPS、I/P/B 帧)
- 无帧率、分辨率、时长等元信息
- 无时间戳(PTS/DTS)
# 查看 H.264 ES 流(十六进制)
xxd video.264 | head
00000000: 0000 0001 674d 401f ... ← 起始码 0x00000001 + SPS
00000010: 0000 0001 68eb e3cb ... ← PPS
00000020: 0000 0001 65b8 ... ← I 帧
2. 音频 ES 示例(AAC)
- 扩展名常为
.aac - 仅为 AAC 原始帧(ADTS 头可能有,也可能无)
- 若无 ADTS 头,则连采样率、声道数都不知道
二、为什么 ES 不能直接播放?
| 问题 | 说明 |
|---|---|
| ❌ 无同步信息 | 播放器不知道帧间隔(如 1/30 秒?) |
| ❌ 无元数据 | 分辨率、色彩空间、音频采样率等缺失 |
| ❌ 无法多路复用 | 不能同时包含音视频 |
| ❌ 无错误恢复 | 丢一帧可能导致后续全乱 |
💡 类比:
ES 就像“一堆散落的乐高积木”,而封装格式(如 MP4)是“带说明书和盒子的完整套装”。
三、ES 的常见用途
尽管不能直接播放,ES 在以下场景非常重要:
1. 编码器输出
- 摄像头、FFmpeg 编码后先生成 ES 流;
- 再由复用器(Muxer)封装进 MP4/TS。
2. 流媒体传输中间格式
- RTSP/RTP 传输中常使用 H.264 ES(Annex B 格式);
- 接收端需自行解析 SPS/PPS 并重建时间戳。
3. 调试与分析
- 开发者用
h264bitstream、Elecard StreamEye分析 ES 内容; - 检查编码参数、帧类型分布等。
4. 硬件编解码接口
- GPU/NPU 的输入输出常为 ES 流(如 VAAPI、MediaCodec)。
四、如何将 ES 封装为可播放格式?
使用 FFmpeg 封装 H.264 ES 为 MP4:
# 假设 video.264 是 Annex B 格式的 H.264 ES
ffmpeg -i video.264 -c copy output.mp4
⚠️ 注意:
- 若 ES 无 SPS/PPS,需手动指定
-vcodec h264 -f h264;- 音频 ES(如 raw AAC)需确保带 ADTS 头,否则无法识别。
封装为 MPEG-TS(用于直播):
ffmpeg -i video.264 -i audio.aac -c copy -f mpegts stream.ts
五、ES 与相关格式对比
| 格式 | 是否封装 | 可否直接播放 | 典型扩展名 |
|---|---|---|---|
| ES(H.264) | ❌ 裸流 | ❌ 否 | .264, .h264 |
| Annex B | ❌(ES 的一种) | ❌ | 同上 |
| AVCC | ❌(ES 的另一种) | ❌ | — |
| MP4 | ✅ 容器 | ✅ | .mp4 |
| MPEG-TS | ✅ 容器 | ✅(部分播放器) | .ts, .m2ts |
| MKV | ✅ 容器 | ✅ | .mkv |
🔍 Annex B vs AVCC:
- Annex B:用
0x00000001起始码分隔 NAL 单元(用于 TS、RTSP);- AVCC:用 4 字节长度前缀(用于 MP4)。
✅ 总结
| 问题 | 答案 |
|---|---|
| ES 是封装格式吗? | ❌ 不是,它是未封装的原始编码流 |
| 能直接播放吗? | ❌ 不能,缺少元数据和同步信息 |
| 常见文件名? | .264(H.264)、.265(H.265)、.aac(AAC) |
| 如何使用? | 必须封装进 MP4/TS/MKV 等容器才能播放或传输 |
| 开发者注意 | 处理 ES 时需手动管理 SPS/PPS、时间戳、帧率等 |
💡 一句话记住:
ES = 视频/音频的“原材料”,封装格式 = “成品包装盒”。没有盒子,原材料无法上架销售(播放)。

浙公网安备 33010602011771号