本篇介绍音视频核心概念面试题。来自公众号“关键帧Keyframe”的分享,对于想要开始学习音视频技术或进入该行业的朋友是份不错的入门资料。
1、FFmpeg 架构与基础
Q:什么是 FFmpeg 及其核心组件?
A:FFmpeg 是开源多媒体框架,提供录制、转换、流式传输能力。
核心组件:
| 库 / 工具 | 作用 |
|---|---|
| libavformat | 容器(解)复用 |
| libavcodec | 编解码 |
| libavutil | 通用工具 |
| libswscale | 视频缩放与色彩空间转换 |
| libpostproc | 后期处理 |
| ffmpeg | 命令行转码 |
| ffplay | 简易播放器 |
| ffserver | 流媒体服务器(已废弃) |
2、数据结构层次
Q:FFmpeg 数据结构层次如何工作?
A:四层模型:
- 协议层
AVIOContext、URLProtocol→ HTTP/RTMP/RTSP - 解/复用层
AVFormatContext、AVInputFormat→ MP4/FLV/TS - 编解码层
AVCodecContext、AVCodec→ H.264/AAC - 数据存储
AVPacket(压缩) ↔AVFrame(原始)
3、视频压缩基础
Q:为何原始视频可压缩到更小体积?
A:利用五种冗余:
- 空间相邻像素相似
- 时间帧间内容重复
- 编码像素值概率不均
- 视觉人眼对高频不敏感
- 知识规则结构可预测
Q:什么是 GOP?
A:Group of Pictures,由一个 I 帧和多个 P/B 帧组成。
- GOP 越大 → 压缩率越高,随机访问越差
- GOP 越小 → 适合快速 seek 和错误恢复
Q:MPEG 帧类型?
| 类型 | 参考关系 | 大小 | 用途 |
|---|---|---|---|
| I | 仅自身 | 大 | 随机访问点 |
| P | 前向参考 | 中 | 前向预测 |
| B | 双向参考 | 小 | 最高压缩率 |
4、核心结构体辨析
Q:AVFormatContext vs AVInputFormat?
A:
AVFormatContext→ 实例(含状态、流信息)AVInputFormat→ 模板(函数指针,如read_header)
通过avformat_open_input()绑定。
Q:解释 AVPacket 关键字段
A:
pts/dts:显示/解码时间戳data/size:压缩数据指针/长度stream_index:所属流序号flags:AV_PKT_FLAG_KEY等标志
5、流媒体协议
Q:直播 vs 点播区别?
| 维度 | 直播 | 点播 |
|---|---|---|
| 时态 | 实时生成 | 预生成 |
| 交互 | 推流+拉流同步 | 任意 seek |
| 缓存 | 边缘热缓存 | CDN 冷缓存 |
| 协议 | RTMP/UDP | HTTP/HLS/DASH |
Q:常见协议对比?
| 协议 | 传输 | 延迟 | 穿透 | 备注 |
|---|---|---|---|---|
| RTMP | TCP 1935 | 1–3 s | 一般 | 推流主流 |
| HLS | HTTP | 5–30 s | 优秀 | iOS 原生 |
| HTTP-FLV | HTTP | 1–3 s | 优秀 | 低延迟播放 |
| WebRTC | UDP | < 1 s | 优秀 | 连麦场景 |
6、性能优化
Q:如何实现“秒开”?
A:
- DNS 预解析 → 直接 IP 播放
- GOP 缓存 → 服务端缓存最新 GOP(1–2 s)
- 减少探测 →
probesize/analyzeduration调小 - 首帧零缓冲 → 立即送解码器
Q:低延迟与流畅如何平衡?
- 低延迟:UDP、小 GOP、硬件编码、动态缓冲 50–150 ms
- 流畅:自适应码率、 jitter buffer、分离拉流/解码线程、重连机制
7、编解码格式
Q:H.264 vs H.265 差异?
| 项目 | H.264 | H.265 |
|---|---|---|
| 块单元 | 16×16 宏块 | 8×8–64×64 CTU |
| 帧内模式 | 9 种 | 35 种 |
| 运动矢量 | ≤ 16 × 16 | ≤ 64 × 64 |
| 压缩率 | 基准 | ↑ 50 % |
| 计算复杂度 | 低 | 高 3–5× |
Q:为何用 YUV 而非 RGB?
- 带宽:色度子采样(4:2:0)减半数据量
- 兼容:黑白电视向前兼容
- 压缩:人眼对亮度更敏感
8. 音频处理
Q:AAC vs PCM?
| 特征 | PCM | AAC |
|---|---|---|
| 压缩 | 无 | 有损 |
| 大小 | 大 | ↓ 80 % |
| 质量 | 无损 | 接近 CD |
| 元数据 | 无 | 采样率/声道/比特率 |
Q:音频测试维度?
- 功能:播放/录制、格式兼容、3A(AEC/AGC/ANR)
- 性能:延迟、CPU、内存、功耗
- 质量:POLQA、主观 MOS
- 兼容:设备、系统、网络条件
9. 实际实现
Q:视频/图像合成步骤?
- 解复用 → 提取流
- 解码 → 原始帧
- 分辨率/时序处理 → 统一尺度与 pts
- 混合/叠加 → 滤镜(
overlay,blend) - 编码 → 目标格式
- 复用 → 输出容器
Q:硬解 vs 软解?
| 维度 | 硬解 | 软解 |
|---|---|---|
| 单元 | GPU/VPU | CPU |
| 功耗 | 低 | 高 |
| 格式支持 | 有限 | 任意 |
| 更新 | 依赖驱动 | 灵活 |
| 跨平台 | 需要适配 | 通用 |
10. 面试速答金句
- “FFmpeg 四层模型:协议→格式→编解码→数据”
- “GOP 平衡:越大压缩率↑,随机访问↓”
- “秒开三板斧:DNS 预解析 + GOP 缓存 + 探测减小”
- “低延迟=UDP+小GOP+硬编+动态缓冲”
- “零拷贝用 AVBufferRef,池化用 AVFrame/AVPacket 预分配
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。