音视频面试题集锦 2022.04

1,404 阅读5分钟

前些时间,我在知识星球上创建了一个音视频技术社群:关键帧的音视频开发圈,在这里群友们会一起做一些打卡任务。比如:循序渐进地归纳总结音视频技术知识,绘制一幅音视频知识图谱,你可以看看《音视频知识图谱 2022.03》。再比如:周期性地整理音视频相关的面试题,汇集一份音视频面试题集锦

下面是 2022.04 月音视频面试题集锦内容的节选:

1)RTMP 消息分优先级的设计有什么好处?

RTMP 的消息优先级是:控制消息 > 音频消息 > 视频消息。当网络传输能力受限时,优先传输高优先级消息的数据。

要使优先级能够有效执行,分块也很关键:将大消息切割成小块,可以避免大的低优先级的消息(如视频消息)堵塞了发送缓冲从而阻塞了小的高优先级的消息(如音频消息或控制消息)。

2)什么是 DTS 和 PTS?它们有什么区别?

DTS 是解码时间戳;PTS 是显示时间戳。

虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。

3)什么是 IDR 帧?它和 I 帧有什么区别?

IDR 帧全称叫做 Instantaneous Decoder Refresh,是 I 帧的一种。IDR 帧的作用是立刻刷新,重新算一个新的序列开始编码,使错误不致传播。

IDR 帧有如下特性:

  • IDR 帧一定是 I 帧,严格来说 I 帧不一定是 IDR 帧(但一般 I 帧就是 IDR 帧);
  • 对于 IDR 帧来说,在 IDR 帧之后的所有帧都不能引用任何 IDR 帧之前的帧的内容。与此相反,对于普通的 I 帧来说,位于其之后的 B 和 P 帧可以引用位于普通 I 帧之前的 I 帧(普通 I 帧有被跨帧参考的可能);
  • 播放器永远可以从一个 IDR 帧播放,因为在它之后没有任何帧引用之前的帧。因此,视频开头的 I 帧一定是 IDR 帧;一个封闭类 GOP 的开头的 I 帧也一定是 IDR 帧。

所以,在直播场景通常每个 I 帧都是 IDR 帧,这样服务端下发流数据的时候总是从一个 I 帧开始,播放器就可以立即开始播放。

4)什么是 SPS 和 PPS?它们有什么区别?

SPS,Sequence Paramater Set,保存了一组编码后的图像序列所依赖的全局参数。

PPS,Picture Paramater Set,保存了每一帧编码后的图像所依赖的参数。

SPS 中的信息至关重要,如果其中的数据丢失,解码过程就可能失败。SPS 和 PPS 通常作为解码器的初始化参数。一般情况,SPS 和 PPS 所在的 NAL 单元位于整个码流的起始位置,但是在某些场景下,在码率中间也可能出现这两种结构:

  • 解码器要在码流中间开始解码。比如,直播流。
  • 编码器在编码过程中改变了码率的参数。比如,图像的分辨率。

5)什么是 SEI?我们可以用它来做什么?

SEI 即补充增强信息(Supplemental Enhancement Information),属于码流范畴,它提供了向视频码流中加入额外信息的方法,是 H.264 标准的特性之一。

SEI的基本特征如下:

  • 并非解码过程的必须选项;
  • 可能对解码过程(容错、纠错)有帮助;
  • 集成在视频码流中。

在直播场景,我们通常使用 SEI 来携带推流端的信息,一直随着直播流传输到播放端。由于 SEI 是绑定着视频帧,所以它可以支持诸如:

  • 统计直播推流端到播放端延时。
  • 支持和视频帧绑定的内容交互。比如,直播答题在播放端的弹窗等。

6)什么是 MP4 的 moov Box?我们在封装 MP4 时通常怎么处理它?为什么?

moov Box 即 Movie Box,MP4 中存储所有媒体数据的索引信息的 Box。moov Box 可以说是 MP4 文件中最重要的 Box,一般播放器的实现都需要读取到 moov 的数据才能开始播放流程。

对于通过网络播放 MP4 视频的场景,都建议将视频处理为 moov 前置。因为 moov 前置后,从网络读取和播放 MP4 文件时,就可以较快获取到 moov 的数据并开始播放。


如果你也对音视频技术感兴趣,比如,符合下面的情况:

  • 在校大学生 → 学习音视频开发
  • iOS/Android 客户端开发 → 转入音视频领域
  • 直播/短视频业务开发 → 深入音视频底层 SDK 开发
  • 音视频 SDK 开发 → 提升技能,解决优化瓶颈

我们创建了一个社群,vx 搜索『gjzkeyframe』 关注『关键帧Keyframe』咨询,或知识星球搜『关键帧的音视频开发圈』即可加入。