AVFoundation 是 Apple 提供的一个强大且全面的多媒体框架,支持处理音频和视频。它为 iOS、macOS、tvOS 和 watchOS 提供了创建、编辑和播放音频视频内容的核心工具。
主要功能
1、媒体捕捉
访问和控制设备摄像头和麦克风。
支持拍照、录制视频和音频。
自定义捕捉分辨率、帧率等设置。
支持深度数据捕捉和 AR 视频。
2、媒体播放
播放本地或远程的音视频文件。
支持时间和帧级别的精确控制。
支持字幕、元数据和多音轨。
3、媒体编辑
剪辑音频和视频。
混合音频轨道,添加效果。
插入水印、文字叠加或其他动态效果。
4、媒体元数据处理
读取和编辑音视频的元数据,如 ID3 标签或 EXIF 信息。
5、实时处理
使用滤镜、特效实时处理捕捉或播放的视频。
6、文件格式支持
支持多种音视频格式,包括 MP4、MOV、H.264、HEVC 等。
核心类和概念
1、媒体捕捉相关
AVCaptureSession
管理媒体捕捉会话,协调输入设备(如摄像头或麦克风)和输出目标(如文件或实时预览)。
AVCaptureDevice
表示一个硬件设备(如摄像头或麦克风)。可以用它来配置焦距、曝光、白平衡等属性。
AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput
用于实时处理视频和音频帧数据。
2、媒体播放相关
AVPlayer
核心视频播放器类,可加载和播放音视频内容。
AVPlayerItem
表示播放器的一个可播放单元,支持时间观察和状态监听。
AVPlayerLayer
用于在界面上展示播放器的内容,适合在 SwiftUI 或 UIKit 中集成。
3、媒体编辑相关
AVAsset
表示一个音视频文件的抽象,提供元数据和轨道信息。
AVAssetExportSession
用于导出编辑过的音视频文件。
AVMutableComposition
用于创建和编辑多轨道音视频。
4、实时处理相关
AVCaptureVideoPreviewLayer
实时预览捕捉到的视频流。
AVAudioEngine
用于实时音频处理和特效制作。
示例代码
1、播放本地视频
import SwiftUI
import AVKit
struct VideoPlayerView: View {
private let player = AVPlayer(url: URL(fileURLWithPath: "/path/to/video.mp4"))
var body: some View {
VideoPlayer(player: player)
.onAppear {
player.play()
}
}
}
2、捕捉设备摄像头画面
import AVFoundation
class CameraManager {
private var captureSession: AVCaptureSession?
func startCamera() {
captureSession = AVCaptureSession()
guard let session = captureSession else { return }
// 配置输入设备
guard let camera = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back),
let input = try? AVCaptureDeviceInput(device: camera) else { return }
session.addInput(input)
// 配置输出
let output = AVCaptureVideoDataOutput()
output.setSampleBufferDelegate(self, queue: DispatchQueue(label: "camera.queue"))
session.addOutput(output)
// 启动会话
session.startRunning()
}
}
extension CameraManager: AVCaptureVideoDataOutputSampleBufferDelegate {
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
// 实时处理视频帧
}
}
常见场景和用例
1、视频录制和编辑应用:例如 TikTok、抖音类的应用。
2、实时视频特效:结合 Core Image 或 Metal 实现滤镜特效。
3、AR 和混合现实:捕捉摄像头内容后与 ARKit 集成。
4、自定义播放器:开发一个高级的音视频播放器,支持自定义 UI 和交互。
学习和使用建议
1、官方文档:参考 Apple 的 AVFoundation 官方文档。
2、示例项目:学习 Apple 提供的示例代码,例如 AVFoundationDemo。
3、从简单场景入手:如播放音视频,然后逐步学习捕捉和编辑功能。