1、iOS音视频开发概述:音视频基础概念、直播与录制的技术栈、iOS多媒体框架概览
1.1 音视频基础概念:从像素到波形
做音视频开发,首先得搞懂几个核心概念。说白了,视频就是一系列快速播放的图片,音频就是声波的数字化表示。嗯,这里要注意几个关键点。
采样率与位深度:音频的采样率决定了声音的保真度。我记得刚入行时,有个项目把采样率设成了8kHz,结果录出来的声音像对讲机,用户直接投诉。常见的采样率有:
- 8kHz:电话语音质量,够用但别指望好听
- 44.1kHz:CD音质,直播场景我一般用这个
- 48kHz:专业影视标准,录制时我推荐这个
分辨率与帧率:视频的分辨率决定了清晰度,帧率决定了流畅度。我在项目中遇到过一个问题——把帧率从30fps降到24fps,画面明显卡顿,但码率降了30%。你想想看,这就是典型的「鱼和熊掌」问题。
核心公式:视频码率 = 分辨率 × 帧率 × 色彩深度 × 压缩比
这个公式我每次做技术方案都会默念一遍。码率太高,用户流量扛不住;码率太低,画面全是马赛克。
编码格式:H.264是当前最通用的编码,兼容性最好。H.265(HEVC)压缩率更高,但解码压力大。我个人习惯是:直播用H.264,录制用H.265。为什么?直播要低延迟,H.264解码快;录制要省空间,H.265压缩率高。
1.2 直播与录制的技术栈:从采集到播放
直播和录制,技术栈其实很像。我画个简单的流程图给你看:
采集 → 预处理 → 编码 → 封装 → 传输/存储 → 解码 → 渲染
每个环节都有坑。我曾经在采集环节踩过一个雷——iPhone的摄像头在暗光环境下会自动降帧率,从30fps掉到15fps。如果不做处理,直播画面会突然变卡。解决方案是:手动锁定帧率,或者用AI补帧。
直播技术栈:
- 采集层:AVCaptureSession(iOS原生)、GPUImage(第三方)
- 编码层:VideoToolbox(硬件编码)、FFmpeg(软件编码)
- 传输层:RTMP(推流)、HLS(拉流)、WebRTC(实时通信)
- 播放层:AVPlayer(原生)、IJKPlayer(第三方)
录制技术栈:
- 采集层:同上,但多了屏幕录制(ReplayKit)
- 编码层:AVAssetWriter(原生封装)、VideoToolbox(编码)
- 存储层:MP4(通用)、MOV(专业)、TS(直播录制)
- 后处理:AVFoundation(剪辑)、Core Image(滤镜)
我的建议:新手做直播,先用RTMP推流 + HLS拉流。这套方案成熟,坑少。等业务量上来了,再考虑WebRTC或者SRT。
1.3 iOS多媒体框架概览:苹果的「全家桶」
iOS的多媒体框架,说白了就是苹果给你搭好的积木。你只需要拼装,不需要从零造轮子。但问题是,这些积木的说明书有点厚。
AVFoundation:这是iOS音视频开发的核心框架。采集、播放、编辑、录制,全都能搞定。我80%的项目都在跟它打交道。举个例子:
// 创建一个简单的视频采集会话
AVCaptureSession *session = [[AVCaptureSession alloc] init];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:nil];
[session addInput:input];
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];
[session addOutput:output];
[session startRunning];
这段代码看起来简单,但实际项目中要考虑的事情多了去了:设备权限、分辨率适配、前后摄像头切换、闪光灯控制……嗯,每个点都能写一篇文章。
VideoToolbox:硬件编码解码的底层接口。AVFoundation虽然方便,但如果你想精细控制编码参数(比如码率、帧率、GOP大小),就得用VideoToolbox。我建议:
- 普通场景用AVFoundation,省心
- 高性能场景用VideoToolbox,可控
- 跨平台场景用FFmpeg,灵活
Core Media:这是底层的时间管理框架。CMSampleBuffer、CMTime这些概念,你会在音视频开发中天天见到。我曾经因为CMTime计算错误,导致音视频不同步——画面已经播到第5秒了,声音还在第3秒。排查了整整一天,最后发现是时间戳的分子分母搞反了。
避坑指南:CMTime的timescale不要随便设。我建议统一用1000(毫秒精度)或者1000000(微秒精度)。混用不同timescale,早晚会出问题。
其他框架:
| 框架 | 用途 | 我的评价 |
|---|---|---|
| Core Image | 图像滤镜、特效 | 性能好,但文档少 |
| Core Audio | 底层音频处理 | 复杂,但功能强大 |
| ReplayKit | 屏幕录制、直播 | iOS 12以后才稳定 |
| Metal | GPU加速渲染 | 做特效必备 |
最后说一句:iOS音视频开发,入门容易精通难。你可能会被各种奇怪的bug折磨——黑屏、卡顿、音画不同步、内存暴涨……但别怕,这些都是必经之路。我当年也是这么过来的。
下一章,我们开始动手搭建第一个采集会话。到时候我会手把手带你走一遍流程,顺便把那些坑都指出来。
本章小结:
- 音视频基础:采样率、分辨率、编码格式
- 直播技术栈:采集→编码→传输→播放
- 录制技术栈:采集→编码→存储→后处理
- iOS框架:AVFoundation(主力)、VideoToolbox(进阶)、Core Media(底层)
公众号:蓝海资料掘金营,微信deep3321