Android面试题——掘金-音视频之基础原理(9.1)

一 概述

1
2
3
4
5
6
7
8
1.音视频的采集流程是怎样的?
2.常见的音视频编码格式有哪些?
3.什么是 PCM?它和 MP3、AAC 的区别?
4.什么是 YUV?YUV420 和 YUV422 有什么区别?
5.常见的视频帧格式有哪些?NV21 和 NV12 有什么区别?
6.视频帧率、码率、分辨率、GOP 各是什么意思?
7.音视频同步的原理是什么?
8.视频编码中的 I 帧、P 帧、B 帧的作用?

二 音视频基础原理

2.1 音视频的采集流程?

1
2
3
4
5
6
7
8
9
1.音频采集:
-使用 AudioRecord 进行麦克风录音。
-回调或手动读取 PCM 数据。

2.视频采集:
-使用 Camera2 或 CameraX 采集图像数据。
-可输出 YUV 或 RGBA 数据帧。

面试提示:音视频开发中,“采集”是第一步,后续才涉及编码、传输、解码、渲染。

2.2 常见的音视频编码格式有哪些?

1
2
3
-音频:AAC、MP3、Opus、PCM
-视频:H.264、H.265、VP8、VP9、AV1
-容器格式:MP4、FLV、MKV、TS

2.3 什么是 PCM?它和 MP3、AAC 的区别?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
一、PCM
PCM (Pulse Code Modulation) 是一种无损音频编码格式,
它将模拟音频信号转换为数字信号,通过对声音波形进行采样和量化来表示声音数据。
PCM 通常是原始的音频数据,没有压缩,因此文件大小较大,但质量保持不变。

二、PCM 与 MP3、AAC 的区别:
2.1 PCM:
-类型:无损音频编码。
-特点:音质最佳,因为没有任何数据丢失,保留了原始音频的所有细节。
-文件大小:较大,因为没有压缩。
-常见应用:音频录制、专业音频工作站。

2.2 MP3:
-类型:有损音频压缩格式。
-特点:通过去除人耳不太敏感的音频信息来减小文件大小,导致音质有所损失。
-文件大小:相对较小,适合存储和传输。
-常见应用:音乐播放、音频流媒体。

2.3 AAC:
-类型:有损音频压缩格式,通常被认为是 MP3 的升级版。
-特点:相比 MP3,AAC 在相同的比特率下提供更好的音质。它采用了更先进的编码算法,优化了压缩效率。
-文件大小:比 PCM 小,但比 MP3 略大。
-常见应用:流媒体服务(如 YouTube、Apple Music 等)。

3 总结:
-PCM 是无损格式,保留所有音频细节,文件较大。
-MP3 和 AAC 是有损压缩格式,能够减小文件大小,但会牺牲一定的音质。
AAC 在音质和压缩效率上优于 MP3。

2.4 什么是 YUV?YUV420 和 YUV422 有什么区别?

1-YUV

1
2
3
4
5
YUV是一种常用的视频颜色编码格式,用于将图像数据中的亮度(Y)和色度(U、V)信息分离,便于压缩与传输。
-Y:亮度(Luma)信息,决定图像的明暗;
-U/V:色度(Chroma)信息,表示颜色的差异。

这种分离方式可以在保证图像清晰度的同时,降低色彩数据量,从而提高压缩效率。

2-YUV420 vs YUV422 的区别:

对比项 YUV420 YUV422
色度采样比 每 4 个像素共享 1 个 U 和 1 个 V(4:2:0) 每 2 个像素共享 1 个 U 和 1 个 V(4:2:2)
数据量 更少,压缩效率高 数据量略多,画质更好
色彩还原 略低 更高,色彩更准确
常见应用 视频直播、移动设备播放等 专业视频编辑、摄像设备等

3-简单类比

1
2
YUV420:更省资源,适合高压缩率需求;
YUV422:保留更多色彩细节,适合画质要求高的场

2.5 常见的视频帧格式有哪些?NV21 和 NV12 有什么区别?

一、常见视频帧格式:

1
2
3
4
5
6
7
8
9
10
1.1 YUV420系列(最常见)
-I420(YUV420P):Y + U + V,按平面存储。
-NV12:Y 平面 + UV 交错(U 在前,V 在后)。
-NV21:Y 平面 + VU 交错(V 在前,U 在后)。

1.2 YUV422系列
-YUYV、UYVY、YUV422P:更高的色彩保留度。

1.3 RGB系列
-RGB24、RGBA8888:每像素分别保存红、绿、蓝分量,常用于图像处理。

二、NV21 和 NV12 的区别

比较项 NV21 NV12
存储顺序 Y + VU(交错) Y + UV(交错)
色度排列 V 在前,U 在后 U 在前,V 在后
Android支持 Android 系统默认使用 NV21 通常用于硬件解码或某些编码器中
应用场景 摄像头预览数据采集 视频编解码、OpenGL 纹理处理等

三、总结

1
2
3
-NV21 是 Android 摄像头默认输出格式;
-NV12 更常用于视频编解码(如 MediaCodec);
-两者主要区别在于 U/V 分量的交错顺序不同。转换时需要注意格式兼容。

2.6 视频帧率、码率、分辨率、GOP 各是什么意思?

1-概念

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1. 视频帧率(Frame Rate)
帧率是指每秒显示的图像帧数,单位为 FPS(Frames Per Second)。帧率决定了视频播放的流畅度。

常见帧率:
-24fps:电影的标准帧率,给人一种"电影感"。
-30fps:常用于普通视频流媒体和网络视频。
-60fps:适用于快速运动的场景或游戏视频。

帧率越高,视频看起来越流畅,但文件大小也越大。
对于实时视频应用,保持较高的帧率(如 30fps 或 60fps)是很重要的,以保证观看体验。

2. 码率(Bitrate)
码率是指每秒传输的视频数据量,单位是 Kbps 或 Mbps(千位/百万位每秒)。它影响视频的质量和文件大小。
-高码率:提供更好的画质,但文件大,传输需要更多带宽。
-低码率:画质会下降,但文件小,适合低带宽网络传输。

码率与画质之间的关系:
-码率越高,视频画质越好,但文件大小也更大。
-码率越低,视频文件越小,但质量会下降,出现马赛克、模糊等现象。

3.分辨率(Resolution)
分辨率是指视频图像的宽度和高度(以像素为单位)。

常见的分辨率包括:
-480p(SD):640x480,适用于低带宽网络。
-720p(HD):1280x720,高清,适用于网络视频和广播。
-1080p(Full HD):1920x1080,高质量视频,常见于高清视频播放。
-4K(Ultra HD):3840x2160,超高清,适用于大屏幕显示和高质量视频流。

分辨率越高,画面越清晰,但需要更高的带宽和更高的码率来保证流畅播放。

4. GOP(Group of Pictures)
GOP(Group of Pictures) 是指视频中关键帧(I 帧)和其他预测帧(P 帧和 B 帧)按一定顺序排列的一个组。
GOP 的长度(即帧数)影响视频的编码效率和视频质量。

-I 帧(Intra-coded frame):
关键帧,视频中的完整帧,包含完整的图像信息,不依赖其他帧。GOP 中的第一个帧通常是 I 帧。
-P 帧(Predicted frame):预测帧,依赖于前面的 I 帧或 P 帧,通过预测和差异编码来减少数据量。
-B 帧(Bidirectional predicted frame):双向预测帧,依赖于前后帧,压缩效率最高,但解码延迟也大。

GOP 长度(例如 GOP=30):
-表示每 30 帧(1 秒钟)后有一个 I 帧,其间是 P 帧和 B 帧。GOP 长度越长,压缩效率越高,但视频的延迟增加,且恢复速度较慢。
-短 GOP(如 GOP=15):适合低延迟应用,比如视频会议或实时直播。
-长 GOP(如 GOP=30 或更长):适合录制、点播等不需要低延迟的场景。

2-视频帧率、码率、分辨率、GOP 的关系:

项目 说明
帧率 每秒钟显示的帧数,影响视频流畅度,通常为 24fps、30fps、60fps
码率 每秒钟的视频数据量,影响视频质量和文件大小,常为 1Mbps 到 10Mbps
分辨率 视频图像的宽高,以像素为单位,常见有 480p、720p、1080p、4K
GOP I 帧、P 帧和 B 帧的组合,影响编码效率和解码延迟,通常在 15 到 30 帧之间

3-例子

1
2
3
4
5
6
7
8
假设一个视频的配置为:
-分辨率:1080p
-帧率:30fps
-码率:4Mbps
-GOP:30

这表示每 30 帧一个 I 帧,视频每秒钟会有 30 帧,分辨率是 1080p,码率是 4Mbps,
保证了较好的视频质量和适中的文件大小。

2.7 音视频同步的原理是什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
一、概念
音视频同步(A/V Sync)的核心目的是让声音和画面一致,
防止出现“声画不同步”的情况(比如嘴动了声音还没来)。

二、同步原理:
音视频数据通常都有时间戳(PTS),播放器根据时间戳决定何时播放对应的帧。

常见同步方式:
2.1 以音频为主(音频时钟):
-音频流连续稳定,作为主时钟;
-视频播放时比较当前视频帧的 PTS 与音频播放时间:
-如果视频帧时间早 → 等待;
-如果视频帧时间晚 → 丢帧或跳过。

2.2 系统时钟同步(系统时间为参考):
-比较每帧的 PTS 和系统当前时间,确保播放节奏同步。

2.3 自定义时钟(比如播放器内部维护的时钟):
更精细控制,适用于复杂场景(直播、快进快退等)。

3.总结:
音视频同步就是通过时间戳对齐,通常以音频为时钟基准,让视频播放节奏与音频保持一致,从而实现同步播放。

2.8 视频编码中的 I 帧、P 帧、B 帧的作用?

1-概念

1
2
3
4
5
6
在视频编码中,I 帧(Intra-coded Frame)、
P 帧(Predicted Frame)和 B 帧(Bidirectional Predicted Frame)是三种不同类型的帧,
它们在压缩视频时扮演着重要的角色。
它们之间的区别在于编码方式和所需的数据量不同,决定了视频的压缩效率、质量以及播放时的解码复杂度。

下面详细解释它们的作用和特点:

2-知识点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1. I 帧(Intra-coded Frame)——关键帧
作用:I 帧是视频中的 关键帧,它是独立的完整帧,包含了图像的所有信息,可以单独解码出来,因此 不依赖于其他帧。
I 帧通常用于视频中的关键位置,作为编码序列的起始点。

特点:
-不依赖任何其他帧。
-包含完整的图像数据。
-编码过程较复杂,数据量较大。

压缩效率:I 帧的压缩效率较低,因为它需要存储完整的图像数据,因此相对来说文件较大,编码和解码的计算开销较高。

使用场景:
I 帧通常在视频的起始位置、场景切换或需要精确定位的地方使用。
它们通常是一个 GOP(Group of Pictures) 中的第一个帧。

2. P 帧(Predicted Frame)——预测帧
作用:P 帧是通过与前面的 I 帧 或 P 帧 对比,使用 差分编码 进行压缩的帧。
P 帧只记录与前一帧(I 帧或 P 帧)之间的变化信息,而不是整个图像数据。

特点:
-依赖于前面的 I 帧或 P 帧。
-只存储与前一帧的差异数据。
-编码和解码相对较快,文件比 I 帧小得多。

压缩效率:P 帧通过差分编码,使得只存储图像中与前一帧不同的部分,节省了很多存储空间,提供了较高的压缩效率。

使用场景:P 帧适用于图像变化不大的连续帧,特别是在运动不大的视频中,它可以通过与前一帧的对比,有效减少数据量。


3. B 帧(Bidirectional Predicted Frame)——双向预测帧
作用:B 帧是通过与 前后的帧(I 帧或 P 帧) 进行双向预测,记录前后帧的差异信息,从而进一步压缩图像数据。
它结合了前后帧的差异来获得更高的压缩效率。

特点:
-依赖于前后帧(I 帧或 P 帧)。
-通过前后帧的差异信息进行编码。
-压缩效果最好,但解码延迟相对较高。

压缩效率:
B 帧提供了最高的压缩效率,因为它通过前后的帧差异进行编码,数据量最小,但也因此需要更多的计算资源来解码。

使用场景:
B 帧通常用于较复杂的场景和细节变化较小的部分,可以最大化视频的压缩效率。
由于解码时需要两帧的信息(前一帧和后一帧),解码延迟较高,
因此一般不会用于低延迟应用(如实时视频会议、直播等)。

2-I 帧、P 帧、B 帧的对比:

特征 I 帧 (关键帧) P 帧 (预测帧) B 帧 (双向预测帧)
依赖性 不依赖其他帧 依赖前面的 I 帧或 P 帧 依赖前后帧
压缩效率 低(较大) 较高(较小) 最高(最小)
编码方式 完整图像信息 差分编码(与前帧的差异) 双向差分编码(与前后帧的差异)
解码延迟 中等
计算开销 中等
使用场景 视频起始、场景切换 连续变化不大的部分 场景细节、压缩效率要求高的部分

3- 总结:I 帧、P 帧、B 帧的作用

1
2
3
I 帧 是视频中的关键帧,包含完整的图像数据,解码时不依赖其他帧,压缩效率较低,但用于场景切换和编码序列的开始。
P 帧 是通过与前一帧(I 帧或 P 帧)的差异进行编码的帧,压缩效率较高,适用于场景变化不大的部分。
B 帧 是通过与前后帧的差异进行双向预测的帧,提供最高的压缩效率,但解码延迟较高,适用于细节变化较小的部分。

三 参考

  • 掘金—知识库的大纲