写点什么

【每天学点‘音视频’】面试官:什么是音视频及实时音视频

  • 2025-06-05
    上海
  • 本文字数:1830 字

    阅读完需:约 6 分钟

【每天学点‘音视频’】面试官:什么是音视频及实时音视频

我最近突然一直在想这个问题,如果别人问我,我该如何作答,所以今天把这块梳理下,如果有不足,还望指正。

音视频

音视频是音频和视频技术的结合,涵盖从采集编码传输解码渲染的全过程。音频处理声音信号,视频处理动态图像。比如我们常见的直播、视频会议、视频通话等都是音视频场景。


音视频总流程可以概括为四点:

  1. 采集:就是通过麦克风、摄像头将物理信号转换为数字信号

  2. 编码:使用压缩算法(H264/AAC)分别将视频和音频数据进行压缩,主要为了减少数据体积,便于存储和传输(编码的本质是压缩

  3. 传输:通过协议(如 RTMP、WebRTC)实现实时或分发包传输。在传输过程中可能会涉及一些抗丢包的优化算法

  4. 渲染:就是观众可观听到视频和音频画面

实时音视频

是指能够在极低延迟(毫秒级到几百毫秒)下完成音频和视频数据的采集、编码、传输、播放,实现双方或多方几乎“同步”的交互体验。常见的实时音视频就是实时通信、互动直播(直播赛事、在线教育)等。


特点

  • 低延迟

  • 普通视频延迟可能几秒;而实时音视频要求端到端延迟控制在毫秒级别,例如七牛视频通话通常< 200ms。

  • 高实时性

  • 要求数据快速处理,避免卡顿确保交互流畅。

  • 强抗弱网性

  • 需要自适应网络丢包、抖动;涉及到的大概是通过 FEC、重传、码率自适应等技术保障流畅性。


所涉及到的关键技术和音视频类似


  1. 采集

  2. 音频:麦克风降噪( AI 降噪)、回声消除( AEC )

  3. 摄像头预览、美颜、滤镜、分辨率、帧率适配

  4. 编码与压缩

  5. 音频:Opus(低延迟音频编码)、AAC

  6. 视频:H264、H265、VP8、VP9

  7. 传输协议

  8. 基于 UDP 的协议减少 TCP 重传延迟

  9. 抗丢包技术:NACK(丢包重传)、FEC 等

  10. 渲染与播放


在音视频中其核心技术主要是编码,这也是音视频的重点和难点,编码格式包括 H264、H265,当然还有 VP8、VP9 等。通常被问的就是 H264 视频编码流程或者 H264 编码原理以及 H264 与 H265 的区别,

H264 视频编码流程

如何一句话概括 H264 视频编码流程?

H264 通过预测(空间(帧内预测)和时间(帧间预测)冗余)、变换量化(丢弃人眼不敏感的细节)和熵编码(高效压缩数据),用最小的数据量保留最关键的视觉信息。

H264 也称为 AVC(Advanced Video Coding)是一种广泛使用的视频压缩标准,视频编码的意义是视频压缩,如何将视频压缩?分为以下几个步骤


  1. 分块处理

视频中有很多帧就像拼图一样,把每一帧画面切成 4x4 或者 16x16 的小方块,这个小方块叫做“宏块”


  1. 帧内/帧间预测

其核心思想就是利用视频的冗余(前后帧相似、相邻区域相似)来减少数据量。

分为两种预测方式:

  • 帧内预测

  • 例子: 比如画面有一面纯色墙,某个块的像素值和左边块几乎一样,就直接记录“这个块和左边块相同”,而不是记录所有像素值。

  • 方法: 用周围已编码的块预测当前块(方向预测、均值预测等)。

  • 帧间预测(参考前后帧猜)

  • 例子: 视频中一个人在走路,前后帧只有手臂位置变化,背景没变。只需记录“手臂移动了多少”,而不是重新存整个画面。

  • 方法: 通过运动估计(Motion Estimation)找到前一帧/后一帧中最相似的块,并计算运动向量(Movement Vector)。


  1. 变换与量化(细节取舍)

  • DCT 变换(离散余弦变换)

  • 作用: 将块内的像素值转换成“频率分量”(类似把声音分解成高音、低音)。

  • 通俗理解: 像把一幅画分解成“大体轮廓”+“细节纹理”,人眼对轮廓更敏感,细节可以适当丢弃。

  • 量化(有损压缩的关键)

  • 作用: 减少高频细节的精度(类似照片磨皮,去掉细小噪点)。

  • 控制参数: 量化步长(QP 值),步长越大,压缩率越高,画质损失越大。


4. 熵编码(终极压缩)

  • 目的: 用更短的二进制码表示高频出现的符号。

  • 方法:

  • CAVLC(上下文自适应变长编码):对常见符号用短码,罕见符号用长码(像摩斯密码,高频字母“E”用“·”表示)。

  • CABAC(上下文自适应二进制算术编码):更高级,进一步压缩 5~15%的体积。


提到了帧,不得不说三种视频帧,分别是 I 帧、P 帧、B 帧

  • I 帧(Intra Frame):关键帧,独立编码,不依赖其他帧(类似 JPEG 压缩)。视频第一帧从 I 帧开始,(就像写日记,记录全天事件)

  • P 帧(Predicted Frame):参考前一帧(I 或 P 帧)进行运动补偿预测。(就像写日记,只写“和昨天一样,除了下午去超市”)

  • B 帧(Bi-directional Frame):参考前后帧,压缩率最高,但延迟高(实时通信通常禁用)(就像写日记,写“和第一天一样,但晚上看了电影”)

如果实时通信中出现 B 帧会出现卡顿问题,另外在工作中经常使用的就是如何查看视频中是否存在 B 帧,可以使用命令

ffprobe -show_frames 视频 | grep "pict_type=B"


今天了解的内容消化下,下个章节再说。

发布于: 刚刚阅读数: 2
用户头像

出来乍到的程序猿,有一颗成为IT精英的梦想 2020-08-28 加入

座右铭:不想当开发的测试,不是一个好测试✌️。 我是一个致力于测试开发的博主,主要职责:测试开发、CI/CD,偶尔跟着开发学习音视频知识,希望输出的内容可以帮助和我一样初入职场,经验不足的小白。

评论

发布
暂无评论
【每天学点‘音视频’】面试官:什么是音视频及实时音视频_音视频_小曾同学.com_InfoQ写作社区