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):

  • 也称封装格式、多媒体容器
  • 用于存储和组织音视频数据的文件格式
  • 定义了数据的存储结构、索引方式、元数据等
  • 类比:容器是"盒子",编码数据是"内容物"

容器的作用:

  1. 多路复用:将视频、音频、字幕等多个流封装在一起
  2. 同步信息:提供时间戳(PTS/DTS)实现音视频同步
  3. 索引信息:支持快进、快退、随机访问
  4. 元数据:存储标题、作者、时长、分辨率等信息
  5. 流管理:管理多音轨、多字幕、章节等

编码格式(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。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务