Android面试题——掘金-音视频之知识拓展(9.8)

一 概述

1
2
3
4
5
1.OpenGL 在音视频中扮演什么角色?
2.WebRTC 原理及其适用场景?
3.Android 如何实现视频通话?
4.音视频混音、混流的常见方法?
5.硬编和软编的区别与使用场景

二 知识拓展

2.1 OpenGL 在音视频中扮演什么角色?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
在音视频开发中,OpenGL 主要用于 视频渲染与图像处理,扮演着“硬件加速图像显示”的关键角色。

一、OpenGL 的核心作用:
1.1 视频渲染
-用于将解码后的 YUV 或 RGB 数据渲染到屏幕(如 TextureView、Surface)。
-提高渲染性能,适用于高分辨率视频和实时播放场景。

1.2 图像处理 / 视频前处理
-实现滤镜、美颜、马赛克、磨皮、虚化等特效。
-常配合 GPUImage、GLSL(着色器语言)完成高效图像处理。

1.3 视频帧合成
-多路视频画面拼接、合成(比如直播连麦)。
-画中画、动态贴纸、水印。

1.4 处理 OpenGL Surface 作为渲染目标
-与 MediaCodec、Camera、SurfaceTexture 搭配,实现编码/解码的高效渲染。

二、总结:
OpenGL 在音视频中主要负责高效、实时的图像渲染和处理任务,
借助 GPU 提升性能,是构建高质量播放与特效体验的核心技术。

2.2 WebRTC 原理及其适用场景?

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
一、WebRTC 原理
WebRTC(Web Real-Time Communication) 是一个支持网页和移动端进行实时音视频通信的技术框架,
核心原理包括:

1.1 P2P 连接
-使用 ICE、STUN、TURN 协议进行 NAT 穿透,建立点对点连接。

1.2 音视频采集、编解码
-使用系统硬件采集摄像头/麦克风数据,采用 VP8/H.264(视频)、Opus(音频)进行压缩编码。

1.3 传输协议
-基于 UDP + SRTP(加密) 传输低延迟的音视频数据。
-支持数据通道(DataChannel)进行文本、文件等同步通信。

1.4 信令机制
-需要自定义或接入第三方信令服务器(WebSocket/MQTT)交换 SDP 和 ICE 信息,用于连接协商。

二、适用场景
-音视频通话 / 视频会议(如:Google Meet、钉钉会议)
-互动直播 / 在线课堂(低延迟双向互动)
-远程监控 / 安防视频流
-实时客服、远程协

三、总结一句话:
WebRTC 适合构建低延迟、双向实时音视频通信系统,
具备 P2P、加密、安全、跨平台等优势,广泛用于音视频通话、直播连麦等场景。

2.3 Android 如何实现视频通话?

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
在 Android 上实现视频通话,核心是通过 采集 + 编解码 + 网络传输 + 渲染 四个环节,
常借助 WebRTC、自研 RTC、或第三方 SDK 实现。

一、现流程:
1.1 音视频采集
-视频:Camera2 / CameraX
-音频:AudioRecord

1.2 音视频编码
-使用 MediaCodec 编码为 H.264(视频)和 Opus/AAC(音频)

1.3 网络传输
-使用 WebRTC 的传输层(基于 UDP + SRTP)或 Socket/QUIC 自建传输层
-P2P 连接或服务器中转(TURN)

1.4 解码与播放
-使用 MediaCodec 解码
-视频渲染使用 SurfaceView / TextureView / OpenGL

1.5 信令交换
-通过 WebSocket 或 MQTT 实现 SDP、ICE 信息的交换,建立连接

二、总结:
视频通话 = 采集 + 编解码 + 网络传输 + 渲染 + 信令控制
常用方案:WebRTC 或调用如腾讯 IM、Agora、声网、网易云信等 SDK 快速接入。

2.4 音视频混音、混流的常见方法?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
一、音频混音(Audio Mixing)
音频混音指的是将多个音频流合并成一个音频输出流,常见的技术方法有:

1.1 硬件混音:通过音频硬件(如音频芯片)直接进行混合,较为高效,但需要特定硬件支持。
1.2 软件混音:
-使用 AudioTrack 和 AudioRecord 进行录制和播放的音频合成。
-在播放时将多个音频流的 PCM 数据按比例混合,处理各自的音量、增益。
-例如,多个音频流可以通过 AudioTrack 播放时,调节每个流的音量进行混合。

二、视频混流(Video Mixing)
视频混流是指将多个视频源合成一帧视频,常见的技术方法有:

2.1 硬件加速混流:
-使用 OpenGL 或 Vulkan 等 GPU 加速技术,进行多个视频流的拼接、合成。
-通过图像合成的方式,例如 画中画、拼接等,将多个视频源渲染到一个画布上。

2.2 软件混流:
-使用 FFmpeg 进行视频流的合成(如视频拼接、画中画等)。
-对各个视频流进行解码后,再利用软件进行处理并合成。

三、总结:
音频混音通常通过 AudioTrack 和 AudioRecord 软件混合,
而 视频混流则可以使用 OpenGL 或 FFmpeg 进行合成。
音视频混合处理在直播、视频会议等场景中广泛应用。

2.5 硬编和软编的区别与使用场景

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
一 硬件编码(硬编)
1.1 原理:使用专门的硬件(如专用的编码芯片、GPU、NPU)进行视频的编码。

1.2 特点:
-高效:硬件加速,编码速度快,性能开销小。
-低延迟:处理速度非常快,适合实时场景。
-资源占用低:不占用 CPU,释放计算资源。

1.3 使用场景:
-直播、视频通话等需要低延迟的实时场景。
-设备硬件支持良好的场景,如高性能视频会议设备、硬件加速的手机或机顶盒。

二、软件编码(软编)
2.1 原理:通过 CPU 和软件算法(如 FFmpeg、x264)进行视频的编码。
2.2 特点:
-灵活性高:可以支持多种编码格式和自定义参数,适应性强。
-兼容性强:支持的软件编码器可以在各种设备和操作系统上运行。
-较高的资源消耗:由于依赖 CPU 计算,性能开销大,适用于较少并发的场景。

2.3 使用场景:
-高度定制的编码需求,如特殊格式、压缩需求。
-设备不具备硬件编码支持的场景,或者硬件资源有限的场合。
-视频转码、录制等非实时场景。

三、总结:
-硬编适合 实时、高效 场景,如直播、视频会议等。
-软编适合 定制、非实时 场景,如视频处理、转码等。

三 参考

  • 掘金—知识库的大纲