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