C++音视频八股文(封装格式基础)
1. 常见的视频封装格式有哪些?MP4、FLV、MKV、AVI各有什么特点?
常见视频封装格式:
- MP4(MPEG-4 Part 14)
- FLV(Flash Video)
- MKV(Matroska)
- AVI(Audio Video Interleave)
- MOV(QuickTime)
- TS(MPEG Transport Stream)
- WebM
MP4特点:
- 最流行的封装格式,兼容性最好
- 基于QuickTime容器,ISO标准
- 支持编码:H.264/H.265视频,AAC/MP3音频
- 支持流式传输(moov前置)
- 支持字幕、章节、元数据
- 适合:网络视频、移动设备、流媒体
- 文件扩展名:.mp4、.m4v、.m4a
- 优点:广泛支持、标准化、功能完善
- 缺点:不支持某些高级特性(如多音轨切换)
FLV特点:
- Adobe Flash视频格式
- 结构简单,解析快速
- 支持编码:H.264/VP6视频,AAC/MP3音频
- 流式传输友好,延迟低
- 适合:直播、RTMP推流
- 文件扩展名:.flv
- 优点:低延迟、简单高效
- 缺点:Flash已淘汰、功能有限、不支持H.265
MKV特点:
- 开源、功能最强大的容器
- 支持几乎所有编码格式
- 支持多音轨、多字幕、章节、附件
- 支持可变帧率
- 适合:高清视频、蓝光原盘、动漫
- 文件扩展名:.mkv、.mka、.mks
- 优点:功能全面、开放标准、扩展性强
- 缺点:硬件支持较少、文件头较大
AVI特点:
- 微软开发的老格式(1992年)
- 结构简单,兼容性好
- 支持多种编码,但标准不统一
- 不支持流式传输
- 文件大小限制(2GB或4GB)
- 适合:本地播放、老设备
- 文件扩展名:.avi
- 优点:兼容性好、简单
- 缺点:功能落后、效率低、标准混乱
格式对比:
MP4 |
最好 |
中等 |
支持 |
通用、流媒体 |
FLV |
中等 |
基础 |
优秀 |
直播 |
MKV |
一般 |
最强 |
支持 |
高清、收藏 |
AVI |
好 |
基础 |
不支持 |
本地播放 |
2. 什么是容器格式?容器格式和编码格式有什么关系?
容器格式(Container Format):
- 也称封装格式、多媒体容器
- 用于存储和组织音视频数据的文件格式
- 定义了数据的存储结构、索引方式、元数据等
- 类比:容器是"盒子",编码数据是"内容物"
容器的作用:
- 多路复用:将视频、音频、字幕等多个流封装在一起
- 同步信息:提供时间戳(PTS/DTS)实现音视频同步
- 索引信息:支持快进、快退、随机访问
- 元数据:存储标题、作者、时长、分辨率等信息
- 流管理:管理多音轨、多字幕、章节等
编码格式(Codec):
- 音视频数据的压缩算法
- 视频编码:H.264、H.265、VP9、AV1等
- 音频编码:AAC、MP3、Opus等
- 决定压缩效率和质量
容器与编码的关系:
1. 独立但相关:
视频文件 = 容器格式 + 编码格式 例如: video.mp4 = MP4容器 + H.264视频 + AAC音频 video.mkv = MKV容器 + H.265视频 + Opus音频
2. 容器支持多种编码:
- MP4可以封装H.264、H.265、MPEG-4等
- MKV几乎支持所有编码格式
- 同一编码可以用不同容器封装
3. 不是所有组合都有效:
- FLV不支持H.265
- WebM只支持VP8/VP9/AV1视频和Vorbis/Opus音频
- 需要查看容器规范确定支持的编码
常见组合:
MP4 + H.264 + AAC(最常用) MKV + H.265 + AAC(高清) WebM + VP9 + Opus(开源) FLV + H.264 + AAC(直播) TS + H.264 + AAC(HLS流)
类比理解:
- 容器 = 快递盒子(定义包装方式)
- 编码 = 盒子里的物品(实际内容)
- 可以用不同盒子装同样的物品
- 不同盒子有不同的承载能力
3. MP4文件的基本结构是怎样的?什么是moov、mdat、ftyp?
MP4文件结构:
- 基于Box(也称Atom)的层次结构
- 每个Box包含:大小(4字节)+ 类型(4字节)+ 数据
- Box可以嵌套,形成树状结构
基本结构:
[ftyp] - 文件类型
[mdat] - 媒体数据(可选位置)
[moov] - 元数据和索引
[mvhd] - 电影头
[trak] - 视频轨道
[tkhd] - 轨道头
[mdia] - 媒体信息
[mdhd] - 媒体头
[hdlr] - 处理器
[minf] - 媒体信息
[stbl] - 样本表
[stsd] - 样本描述(编码信息)
[stts] - 时间戳
[stsc] - 样本到块映射
[stsz] - 样本大小
[stco] - 块偏移
[trak] - 音频轨道
...
[free/skip] - 空闲空间(可选)
关键Box详解:
ftyp(File Type Box):
- 文件类型和兼容性信息
- 位置:文件开头
- 内容: major_brand:主品牌(如isom、mp42)minor_version:版本号compatible_brands:兼容品牌列表
- 作用:标识文件类型,播放器据此判断兼容性
- 示例:
mdat(Media Data Box):
- 实际的音视频数据
- 位置:可在moov之前或之后
- 内容:编码后的音视频帧数据(压缩数据
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++八股文全集 文章被收录于专栏
本专栏系统梳理C++技术面试核心考点,涵盖语言基础、面向对象、内存管理、STL容器、模板编程及经典算法。从引用指针、虚函数表、智能指针等底层原理,到继承多态、运算符重载等OOP特性从const、static、inline等关键字辨析,到动态规划、KMP算法、并查集等手写实现。每个知识点以面试答题形式呈现,注重原理阐述而非冗长代码,帮助你快速构建完整知识体系,从容应对面试官提问,顺利拿下offer。