阶段 2 · 压缩编码基础22 分钟
GOP 与关键帧:随机访问从哪里开始
IDR、Keyframe、Closed/Open GOP、Seek 与错误恢复
理解一组图像如何围绕随机访问点组织,以及 GOP 长度对压缩率、启动、Seek、直播延迟和错误恢复的影响。
LEARNING GOALS
先明确本课目标
1
区分 I 帧、Keyframe 与 IDR
2
解释 GOP 长度的权衡
3
理解 Seek 为什么常先跳到前一关键帧
MENTAL MODEL · 再建立心智模型
GOP 像一段从完整存档开始的增量历史;关键帧是可进入点,后续帧靠它和其他参考逐步重建。
MINIMAL EXAMPLE
播放器为什么不能从任意 P 帧开始?
预测帧只保存相对参考帧的运动和残差,没有参考图像就无法重建。容器索引会标出可独立开始解码的随机访问 Sample。
javascriptconst keyframes = [0, 2, 4, 6, 8]; // seconds
const target = 5.3;
const decodeStart = keyframes
.filter((time) => time <= target)
.at(-1);
console.log({ decodeStart, target });- 查找前一随机访问点 选择时间不晚于目标的最近关键帧。
- 从关键帧启动解码 重建后续预测依赖和参考帧集合。
- 丢弃目标前画面 解码但不展示,直到 Frame PTS 到达目标。
目标 5.3 秒的精确 Seek 可能从 4 秒开始解码,因此关键帧间距会影响响应时间。
OPTIONAL · 按需查阅完整术语表与概念边界遇到陌生术语时再展开,不打断主线实验。
展开⌄
音视频原理I-frame仅使用当前画面内部信息编码的图像,不依赖其他帧进行像素预测。音视频原理Reference Frame被后续图像用于运动补偿和预测的已解码图像。音视频原理GOP由随机访问点及其后预测图像组成的一组图像结构,影响压缩效率、Seek 与错误恢复。音视频原理Keyframe容器或传输层标记的可随机访问图像,播放器可从这里开始建立解码状态。音视频原理IDRH.264 中切断此前参考依赖并重置随机访问状态的一类关键图像。音视频原理Random Access不从流开头顺序解码,而从可恢复解码状态的入口附近开始播放或读取媒体的能力。音视频原理Seek把播放位置跳到目标时间的操作;通常先定位到目标前的随机访问点,再解码并丢弃到准确时间。音视频原理Closed / Open GOPClosed GOP 不引用组外图像,边界更适合独立随机访问;Open GOP 可跨组引用以提高压缩效率,但切入和剪辑更复杂。
LIVE EXPERIMENT · 先获得反馈
边改边运行
浏览器加载后会激活代码编辑器、独立运行环境与实时输出。
本课挑战
设计一套点播和低延迟直播各自的 GOP 策略,并说明取舍。
回到原理,解释刚才发生了什么
先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。
CORE IDEA
核心讲解
IDR 清空旧参考依赖
H.264 中 IDR 是明确随机访问点,会阻止后续图像参考 IDR 之前的图像。普通 I slice 虽能帧内解码,却不必然切断跨越依赖。
GOP 越长通常越省码率
更少关键帧能提高压缩效率,但 Seek 需要多解码一段,丢包影响可能更久,直播首帧等待也更长。
OPTIONAL · 迁移时查阅Web 与原生实现对照主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。
展开⌄
Web 与原生 Seek 都依赖容器索引和关键帧,只是控制粒度不同。
WebGL
播放器用 av_seek_frame 等定位关键 Packet,flush 解码器后丢弃目标时间前的 Frame。
WebGPU
设置 media.currentTime 后,浏览器寻找合适随机访问点并在内部解码追赶。
“精确 Seek”通常不是直接解码目标帧,而是从前一随机访问点解码到目标。