Visual LabINTERACTIVE LEARNING
阶段 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。

最小例子javascript
const keyframes = [0, 2, 4, 6, 8]; // seconds
const target = 5.3;
const decodeStart = keyframes
  .filter((time) => time <= target)
  .at(-1);
console.log({ decodeStart, target });
  1. 查找前一随机访问点 选择时间不晚于目标的最近关键帧。
  2. 从关键帧启动解码 重建后续预测依赖和参考帧集合。
  3. 丢弃目标前画面 解码但不展示,直到 Frame PTS 到达目标。

目标 5.3 秒的精确 Seek 可能从 4 秒开始解码,因此关键帧间距会影响响应时间。

本课概念
OPTIONAL · 按需查阅完整术语表与概念边界

遇到陌生术语时再展开,不打断主线实验。

展开⌄
LIVE EXPERIMENT · 先获得反馈

边改边运行

浏览器加载后会激活代码编辑器、独立运行环境与实时输出。

本课挑战

设计一套点播和低延迟直播各自的 GOP 策略,并说明取舍。

DEEP DIVE · 实验之后

回到原理,解释刚才发生了什么

先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。

CORE IDEA

核心讲解

01

IDR 清空旧参考依赖

H.264 中 IDR 是明确随机访问点,会阻止后续图像参考 IDR 之前的图像。普通 I slice 虽能帧内解码,却不必然切断跨越依赖。

02

GOP 越长通常越省码率

更少关键帧能提高压缩效率,但 Seek 需要多解码一段,丢包影响可能更久,直播首帧等待也更长。

OPTIONAL · 迁移时查阅Web 与原生实现对照

主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。

展开⌄
API COMPARISON

Web 与原生 Seek 都依赖容器索引和关键帧,只是控制粒度不同。

WebGL

播放器用 av_seek_frame 等定位关键 Packet,flush 解码器后丢弃目标时间前的 Frame。

WebGPU

设置 media.currentTime 后,浏览器寻找合适随机访问点并在内部解码追赶。

“精确 Seek”通常不是直接解码目标帧,而是从前一随机访问点解码到目标。