iOS 进阶面试题
iOS音视频原理
音视频开发是iOS中一个庞大且核心的技术领域,涵盖采集、编码、传输、解码、渲染等完整链路。本文从基础概念出发,深入iOS平台提供的音视频框架和底层原理。 音视频处理全链路 一个完整的音视频系统(如直播、视频通话、短视频)包含以下环节: flowchart LR A["采集Camera/Mic"] --> B["前处理美颜/降噪"] B --> C["编码H.264/AAC"] C --> D["封装FLV/MP4"] D --> E["传输RTMP/HLS"] E --> F["解封装解析容器"] F --> G["解码VideoToolbox"] G --> H["后处理滤镜/混音"] H --> I["渲染Metal/Speaker"] 环节 做什么 iOS中对应的技术 采集 从摄像头/麦克风获取原始数据 AVCaptureSession 前处理 美颜、滤镜、降噪、回声消除 CoreImage、vDSP 编码 将原始数据压缩为体积更小的格式 VideoToolbox、AudioToolbox 封装 将编码后的音视频数据打包到容器中 AVAssetWriter 传输 通过网络发送到服务器或其他端 URLSession、第三方推流SDK 解封装 从容器中分离出音频流和视频流 AVAssetReader 解码 将压缩数据还原为原始像素/采样数据 VideoToolbox、AudioToolbox 后处理 滤镜、水印、混音等 CoreImage、Metal 渲染 将画面显示到屏幕、声音输出到扬声器 AVSampleBufferDisplayLayer、Metal、AudioUnit 核心术语 在深入细节之前,先了解几个贯穿全文的核心概念: 什么是编解码器(Codec) Codec = Coder + Decoder,即编码器+解码器的合称。编码器负责将原始音视频数据压缩为更小的格式,解码器负责将压缩数据还原。 音视频中有两类完全不同的"格式"概念,初学者极易混淆: 编码格式(Codec):定义数据怎么压缩 视频:H.264、H.265、VP9、AV1 音频:AAC、MP3、Opus、FLAC 封装格式(Container):定义压缩后的数据怎么组织存储 MP4、MOV、FLV、MKV、TS 两者是独立的,可以自由组合: MP4容器 + H.264视频 + AAC音频 (最常见的组合) MOV容器 + H.265视频 + AAC音频 (iPhone录制默认) FLV容器 + H.264视频 + AAC音频 (直播推流常用) MKV容器 + AV1视频 + Opus音频 (新一代免费组合) 什么是H.264和H.265 H.264(也叫AVC,Advanced Video Coding)是目前使用最广泛的视频编码标准,由ITU-T和ISO/IEC联合制定,2003年发布。它定义了一套将视频帧压缩为比特流的算法规范——包括如何划分图像块、如何预测、如何变换量化等。几乎所有设备和平台都支持H.264硬件解码。 ...