

梵高《星夜》像素版
音视频是一个有一定技术门槛的垂直领域,对于前端、iOS/Android 客户端、服务端开发同学来说,这都是一个不错的职业发展方向。对于刚开始接触音视频开发的同学,最头疼的问题应该是音视频纷繁庞杂的概念,如果删繁就简,音视频生产及消费的核心环节其实只有:采集(声音和图像的数字化) → 编码(压缩数据便于存储和传输) → 封装(按格式封装便于控制音视频的展现) → 传输(用于网络) → 解封装(封装的逆过程) → 解码(编码的逆过程) → 渲染(声音和图像的展现)。
因此,在前面的文章中,我们按照『声音和图像基础 → 音视频编码 → 音视频格式 → 音视频协议』路线图介绍了很多基础的音视频知识。这里面内容较多,其中大部分细节在日常开发中不见得会立即用到,所以暂时不深入了解也问题不大。但是,对很多音视频基础的概念最好还是留个印象,这样在遇到的时候就能快速知道大概的意思,理清思路。如果还想进一步了解其中的细节,则可以回过头来深入查看我们前面发的文章。
这篇文章就是为这些基础概念建一个索引,方便记忆和查阅。
为什么要声音和图像进行数字化?声音三要素是什么?波形图是什么?频谱图是什么?反应声音大小的物理量有哪些?日常所说的声音大小的分贝是指哪个物理量?音调和频率是什么关系?音调的计量单位是什么?乐音的音调由什么决定?科学音调记号法是什么?十二平均律是什么?声音的复杂波形可以分解成什么?音色由什么决定?音频数字化包括哪些步骤?数字音频三要素是什么?奈奎斯特采样定理是什么?44100 Hz 这个奇葩数字从何而来?常见的声道类型有哪些?最常见的数字音频数据是什么?人眼是如何感知到颜色的?人眼对颜色的感受可以分为哪些特征?日常音视频开发处理的视频数据对应的颜色模型是什么?YCbCr 颜色模型是如何发展而来?什么是 CIE RGB 颜色模型?什么是 CIE XYZ 颜色模型?什么是 NTSC YIQ 颜色模型?什么是 PAL YUV 颜色模型?什么是 ITU-R YCbCr 颜色模型?什么是加色模式?什么是减色模式?什么是色域、基色、互补色?什么是色度图?色度图的基准是什么?色度图的作用是什么?三基色的色域如何确定?ITU-R BT.601、BT.709、BT.2020 是什么?YCbCr 有哪些采样格式?YCbCr 有哪些存储格式?什么是显示伽马?什么是伽马校正?什么是编码伽马?图像数字化包括哪些步骤?数字图像包括哪些基本属性?最常见的数字图像数据是什么?为什么要对音视频数据进行编码?对信息进行压缩的理论基础是什么?对音频数据进行压缩的理论基础是什么?什么是频率掩蔽效应?什么是时域掩蔽效应?常见的音频编码格式有哪些?MPEG-2 AAC 编码工具有哪些?MPEG-4 AAC 相对 MPEG-2 AAC 增加了哪些编码工具?MPEG-2 AAC 有哪些编码规格?MPEG-4 AAC 相对 MPEG-2 AAC 增加了哪些编码规格?HE AAC、HE AAC v2 是指什么?ASC 是什么?MPEG-2 AAC 的音频编码数据格式哪些?MPEG-4 AAC 相对 MPEG-2 AAC 增加了哪些编码数据格式?对视频数据进行压缩的理论基础是什么?常见的视频编码格式有哪些?H.264 的句法元素有哪些?I 帧、B 帧与 P 帧有什么区别?什么是率失真?视频编码怎么进行率失真优化?什么是 DTS 和 PTS?什么是 GOP?什么是 IDR 帧?H.264 有哪些压缩方式?H.264 编码框架是如何分层的?视频编码层(VCL)是什么?网络适配层(NAL)是什么?什么是 SODB、RBSP、NAL?H.264 的编码工具有哪些?H.264 的编码流程是怎样的?什么是 Annex-b 码流格式?Annex-b 码流格式如何防止竞争?什么是 SPS、PPS?什么是 SEI?什么是 Slice?H.265 有哪些编码工具?H.265 相比 H.264 有特色编码技术?什么是 RQT 技术?什么是 ACS 技术?什么是去方块滤波(DBF)技术?什么是 SAO 技术?什么是 IBDI 技术?H.266 有哪些编码工具?从 H.264 到 H.265 再到 H.266,编码单元划分技术有什么改进?从 H.264 到 H.265 再到 H.266,帧内预测技术有什么改进?从 H.264 到 H.265 再到 H.266,帧间预测技术有什么改进?H.266 在变换和量化上有什么改进?H.266 在熵编码上有什么改进?H.266 在环路滤波上有什么改进?什么是屏幕内容编码?屏幕内容图像与自然图像有什么差别?什么是 360 度视频编码?H.266 针对 360 度视频有什么编码工具?H.266 在高层语法(HLS)层有哪些改进?为什么要对音视频编码数据进行封装?什么是 MP4?什么是 moov Box?为什么 moov Box 要前置?什么是 mdat Box?MP4 视频最少加载多少数据可以渲染出首帧?什么是 FLV?为什么直播首选 FLV 作为封装格式?FLV 中有哪些类型的 Tag?什么是 FLV 中的 AAC 音频同步包?用 FLV 封装 AAC 并传输音频流时,要如何处理 ADTS 头?什么是 FLV 中的 AVC(H.264) 视频同步包?什么是 M3U8?为什么实时直播一般不选择 M3U8 格式?为什么直播回放一般选择 M3U8 格式?什么是 M3U8 媒体播放列表?什么是 M3U8 主播放列表?EXT-X-DISCONTINUITY 标签表示什么?什么是 TS?为什么直播回放的切片一般用 TS 格式?TS 格式支持 seek 吗?如何实现对 TS 传输流的 seek?TS 流结构整体分为哪几层?TS 传输流层是什么数据?PES 分组化基本流层是什么数据?ES 基本流层是什么数据?TS 层的数据包大小是多少?为什么设计音视频传输协议?什么是 RTMP?为什么直播推流首选 RTMP 协议?RTMP 设计的目标是解决什么问题?什么是 RTMP 中的消息和块?RTMP 的核心设计思想是什么?RTMP 分包的设计有什么好处?RTMP 多路复用的设计有什么好处?RTMP 消息分优先级的设计有什么好处?RTMP 块大小协商的设计有什么好处?RTMP 块 Header 压缩优化的设计有什么好处?什么是 KCP?KCP 的核心设计思想是什么?KCP RTO 不翻倍的设计有什么好处?KCP 选择重传的设计有什么好处?KCP 快速重传的设计有什么好处?KCP ACK + UNA 的设计有什么好处?KCP 非退让流控的设计有什么好处?什么是 HLS?HLS 的核心设计思想是什么?HLS 有什么优点?HLS 有什么缺点?典型的 HLS 选择什么封装格式?