音视频是一个有一定技术门槛的垂直领域,对于前端、iOS/Android 客户端、服务端开发同学来说,这都是一个不错的职业发展方向。这里是一期音视频面试题大合集,给有需要的朋友们参考参考,强烈建议点赞、收藏、分享。
我们在知识星球上创建的音视频技术社群关键帧的音视频开发圈中一直在持续整理这样一个音视频面试题大合集,目前已整理的题目集如上图。
如果你需要这份合集的原始脑图文件,欢迎加入我们的星球来下载文件以及更多干货资源,现在加入还可以立享优惠,期待你来!
下面是面试题的索引:
采集
iOS 如何实现夜晚自动提示打开手电筒? 谈谈 iOS 音视频采集相关接口和数据结构的设计?
音频算法
你对视频倍速播放的时候,是否有改变音调? 直播中发现有回声,可能的原因是什么? 聊聊对音视频同步的理解?
图像算法
为什么在 YUV 转 RGB 转换中 UV 分量要减去 0.5? 纹理抗锯齿有哪些算法?各有哪些利弊?
特效
OpenGL 如何实现二分屏效果?
编解码
什么是 DTS 和 PTS?它们有什么区别? 什么是 IDR 帧?它和 I 帧有什么区别? 什么是 SPS 和 PPS?它们有什么区别? 什么是 SEI?我们可以用它来做什么? 如何根据 NALU 裸流数据来判断其是 H.264 编码还是 H.265 编码? 为什么会有 YUV 这种数据?它相比 RGB 数据有什么优点? 对 YUV 格式有了解吗?YUV 数据做转换是怎样实现的,比如说 YUV422 转为 YUV420? PCM 音频数据是怎么组织的? 说一下对信号时域、频域的理解? PCM 数据经过 AAC 编码器编码后,直接写 .aac 文件会怎么样? 简要介绍一下对 H.264 的了解? H.264 编码框架分层目的是什么? H.264 如何根据 NALU 判断当前视频帧的类型? 介绍一下 I、P、B 帧编码、解码、显示顺序? H.264 与 H.265 有什么区别? 如何代码实现 PSNR 来评估编码质量? 如何测试码率质量甜点? Android Surface 解码如何支持带角度视频? iOS 如何实现 HDR 转 SDR? 介绍一下 FFmpeg 中关于 timebase 的基础知识与应用? 如何识别一个视频是 HDR 视频? 请问 Android 上如何识别一个视频是哪种格式的 HDR 视频:HDR10+/DolbyVision/HLG/HDR10? HEVC OpenGOP 的新增的帧类型有哪些,在开发中需要注意什么? 介绍一下 Android 14 引入了 Ultra HDR Image 格式? iOS 平台上如何判断 VideoToolbox 是否支持某种编码格式(H.264、HEVC 等)或者某种颜色空间呢? Android 平台上使用 MediaCodec 编码,如何告知编码器结束编码? Android 平台上使用 MediaCodec 异步编码,使用 Surface 作为编码输入源的流程和使用 ByteBuffer 作为编码输入源有什么区别? 聊聊 iOS CVPixelBufferRef 相关的细节? 如何获取视频流中的 QP 值? 视频编码对 QP 值的控制有哪些? iOS 如何使用分段转码,如何设置分片大小? VideoToolbox 中是不是不存在平面格式(planar)对应的 YUV420、YUV422 和 YUV444 的 OSType 常量? iOS 中系统 API 提供了哪些视频编码的方式? Videotoolbox 视频帧解码失败以后应该如何重试? 如何使用 PSNR 对视频转码质量进行评估?
媒体封装
什么是 MP4 的 moov Box?我们在封装 MP4 时通常怎么处理它?为什么? AAC 封装到 MP4 中,是否需要为每个 AAC packet 添加 ADTS? iOS 如何支持封装 FMP4 格式? FFmpeg 如何支持封装 FMP4 格式?
媒体传输
RTMP 消息分优先级的设计有什么好处? CDN 在直播中有哪些运用? 为什么视频会议用 UDP?如果用 TCP 实现音视频,需要建立几次连接?用 UDP 实现音视频,有什么方法可以保证通话质量? RTMP 和 RTSP 有什么区别?使用 RTSP 是基于 UDP 传输的话,我们怎样进行乱序重排? 假如给你一堆乱序的 RTP 包,应该怎样实现乱序重排? 你在项目中是怎么降低端到端的延时的?
渲染
OpenGL 是按照什么架构设计的? 什么是渲染上下文(Context)? 什么是离屏渲染? 为什么离屏渲染会造成性能损耗? 什么是 OpenGL 渲染管线(Pipeline)? OpenGL 渲染管线主要包含哪些部分? 为什么说 OpenGL 渲染管线中的着色器(Shader)是可编程管线? 有哪些着色器可以由程序员进行编程? 什么是 VBO、EBO 和 VAO? Vertex Buffer Object 的布局格式是怎样的? Vertex Array Object 的布局格式是怎样的? 你在项目中使用过 SDL 进行渲染,能否讲一下 SDL 渲染? OpenGL 的双缓冲机制是什么?eglCreateWindowSurface、eglCreatePbuffferSurface 和双缓冲机制有什么关联吗? 想要把 iOS、Android 应用开发中 OpenGL ES 渲染相关模块下沉到 C++ 实现双端共用要怎么实现? 使用 OpenGL 绘制时对于二维坐标需要注意什么? 聊聊 OpenGL glFlush 和 glFinish 区别? 怎么实现 OpenGL 多线程同步? 如何实现 OpenGL 资源共享? OpenGL 纹理缓存要如何设计? 介绍一下 glReadPixels? 介绍一下 ImageReader? 介绍一下 PBO(Pixel Buffer Object)? 介绍一下 HardwareBuffer? 使用 OpenGL PBO 为什么能提高效率? 什么是 VAO,什么是 VBO,它们的作用是什么?
视频生产及编辑
视频编辑中如何实现视频倒放? 拍短视频想把同时播放的音乐录制下来一般要经过怎样的处理流程? Android Camera 如何优化视频录制的卡顿? 转码速度优化的几点建议? Seek 优化的几点建议? 音视频编辑 SDK 一般包含哪些模块?各模块是什么职责? 音视频编辑中转码流程 pipeline 的线程模型和缓冲区要怎么设计? 如何降低处理音视频链路中的内存峰值? 在编辑 SDK 中的播放器和播放 SDK 中的视频播放存在哪些区别呢?编辑场景的播放器对 OpenGL 的使用有哪些进阶的用法?
播放器
点播的倍速播放要如何实现? 播放器解码后的帧缓冲区一般设置多大合适? 如何监控视频播放黑屏、花屏、绿屏等异常? 如何通过优化播放器来优化音乐播放体验,比如提升音质或音效? 如果让你设计一个播放器的架构,你会分哪几层?
工具
介绍一下 SIMD 以及它在音视频处理中的应用?