AVFoundation là framework đa phương tiện của Apple cung cấp quy trình làm việc hoàn chỉnh để làm việc với âm thanh, video và hình ảnh trên iOS, macOS, tvOS và watchOS. Nó bao gồm chụp từ camera và micrô, phát lại tệp phương tiện, chỉnh sửa bản nhạc, xử lý âm thanh thời gian thực và phát trực tuyến qua mạng. Theo Apple AVFoundation Documentation (2026), framework này được sử dụng trong 90% ứng dụng App Store làm việc với nội dung đa phương tiện.
Những điểm chính
AVFoundation là framework đa phương tiện nền tảng của Apple, được giới thiệu từ iOS 4 (2010) để thay thế UIWebView đã lỗi thời cho việc phát lại âm thanh và video. Kể từ đó, AVFoundation đã phát triển thành một bộ công cụ hoàn chỉnh để làm việc với mọi loại phương tiện: từ phát lại tệp MP3 đơn giản đến chụp video chuyên nghiệp với micrô đa kênh và biến đổi âm thanh qua các hiệu ứng thời gian thực.
Kiến trúc của AVFoundation được xây dựng dựa trên một số trừu tượng cơ bản: AVAsset (dữ liệu phương tiện), AVPlayer (phát lại), AVCaptureSession (chụp) và AVAudioEngine (xử lý). Mỗi thành phần hoạt động không đồng bộ, điều này rất quan trọng để duy trì sự mượt mà của giao diện người dùng trong khi tải hoặc xử lý các tệp lớn. Theo Apple (WWDC 2025), AVFoundation xử lý video lên đến 8K trên các thiết bị có chip dòng M mà không giảm hiệu suất.
AVFoundation cung cấp khả năng chụp video từ camera với hỗ trợ 4K ProRes, HDR và lên đến 240 FPS ở chế độ chuyển động chậm, ghi âm và trộn âm thanh từ micrô tích hợp và bên ngoài, phát lại phương tiện với hỗ trợ HLS, MPEG-4, QuickTime, MP3, AAC và FLAC, xuất và chuyển đổi tệp qua AVAssetExportSession, xử lý âm thanh thời gian thực qua AVAudioEngine với các hiệu ứng vang, cân bằng và thay đổi cao độ, cũng như phát trực tuyến qua AirPlay và các giao thức mạng.
AVFoundation bao gồm nhiều mô-đun, mỗi mô-đun chịu trách nhiệm cho một lĩnh vực cụ thể của công việc với phương tiện. Việc chọn thành phần phụ thuộc vào nhiệm vụ: chụp, phát lại, xuất hoặc xử lý thời gian thực.
| Thành phần | Mục đích | Lớp chính |
|---|---|---|
| Chụp | Làm việc với camera và micrô | AVCaptureSession |
| Phát lại | Trình phát âm thanh và video | AVPlayer / AVAudioPlayer |
| Chỉnh sửa | Tổng hợp và dựng phim | AVMutableComposition |
| Xuất | Chuyển đổi sang định dạng khác | AVAssetExportSession |
| Công cụ âm thanh | Xử lý âm thanh thời gian thực | AVAudioEngine |
| Siêu dữ liệu | Đọc ID3, EXIF và XMP | AVMetadataItem |
AVCaptureSession là đối tượng trung tâm để chụp video và âm thanh. Nó quản lý các luồng dữ liệu đến từ các thiết bị vật lý (camera, micrô), cấu hình cài đặt của chúng (độ phân giải, FPS, định dạng) và hướng chúng đến đầu ra: xem trước (AVCaptureVideoPreviewLayer), ghi vào tệp (AVCaptureMovieFileOutput) hoặc xử lý từng khung hình (AVCaptureVideoDataOutput).
AVPlayer là trình phát AVFoundation đa năng có khả năng phát nội dung phương tiện cả cục bộ và qua mạng. AVPlayer hỗ trợ phát trực tuyến HLS, MPEG-4, QuickTime Movie và hầu hết các định dạng âm thanh. Việc điều khiển phát lại được thực hiện không đồng bộ qua AVPlayerItem. AVPlayerViewController cung cấp giao diện người dùng có sẵn với các điều khiển: phát/tạm dừng, tua, AirPlay và PiP.
Chụp video và âm thanh là một trong những khả năng được yêu cầu nhiều nhất của AVFoundation. Việc thiết lập phiên chụp bao gồm nhiều bước: tạo AVCaptureSession, thêm đầu vào (camera, micrô), cấu hình đầu ra và bắt đầu phiên.
Hãy xem qua thiết lập từng bước của AVCaptureSession để chụp video từ camera sau của iPhone và đồng thời ghi âm từ micrô. Quy trình bao gồm bốn bước bằng Swift.
import AVFoundation
// 1. Tạo và cấu hình phiên
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Thêm đầu vào camera
guard let camera = AVCaptureDevice.default(
for: .video
) else { return }
let cameraInput = try? AVCaptureDeviceInput(device: camera)
guard let input = cameraInput,
session.canAddInput(input)
else { return }
session.addInput(input)
// 3. Thêm đầu ra để ghi
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Bắt đầu phiên
session.startRunning()
Mã Swift tạo AVCaptureSession với cài đặt trước Full HD, kết nối camera sau làm nguồn video và thêm đầu ra để ghi vào tệp. Sau session.startRunning(), camera bắt đầu truyền khung hình đến bản xem trước và tệp đầu ra. Việc ghi được dừng qua output.stopRecording() với tùy chọn lưu vào thư viện.
Để chụp chỉ âm thanh (không có video), chỉ thêm micrô vào AVCaptureSession qua AVCaptureDevice.default(.audio). Đầu ra là AVAudioFileOutput hoặc AVCaptureAudioDataOutput để xử lý âm thanh thời gian thực. AVFoundation hỗ trợ chụp đa kênh: lên đến 8 kênh âm thanh trên iPad Pro và lên đến 2 trên iPhone, cho phép ghi âm thanh nổi từ micrô ngoài qua Lightning, USB-C hoặc Bluetooth. Việc chọn nguồn đầu vào được thực hiện qua AVAudioSession.sharedInstance().setPreferredInput, điều này rất quan trọng đối với các ứng dụng làm việc với tai nghe ngoài và micrô Bluetooth.
AVFoundation cung cấp hai cách chính để phát lại phương tiện: AVPlayer cho video và AVAudioPlayer cho âm thanh. Hãy xem ví dụ về phát luồng HLS từ xa bằng AVPlayer.
Mã tạo AVPlayer, tải luồng HLS từ URL và bắt đầu phát lại ở mức âm lượng thấp. AVPlayerItem quản lý trạng thái tải và đệm, và quan sát KVO về trạng thái cho phép xử lý lỗi.
import AVFoundation
import AVKit
// 1. Tạo AVPlayer với luồng HLS
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Phát lại
player.play()
// 3. Hiển thị trình phát
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Giám sát trạng thái
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Mã tạo AVPlayer với URL HLS, đặt âm lượng ở mức 70% và bắt đầu phát lại. AVPlayerViewController cung cấp giao diện người dùng tích hợp với các điều khiển, AirPlay và chế độ hình trong hình. Trạng thái trình phát được theo dõi qua KVO để xử lý các trường hợp luồng HLS tạm thời không khả dụng.
Để phát lại âm thanh không có giao diện video, sử dụng AVAudioPlayer — trình phát nhẹ không yêu cầu AVPlayerItem. AVAudioPlayer hỗ trợ các định dạng âm thanh MP3, AAC, ALAC, FLAC, WAV và AIFF, cung cấp các phương thức play(), pause() và stop(), cũng như AVAudioPlayerDelegate để theo dõi hoàn tất phát lại và lỗi giải mã. AVAudioPlayer lý tưởng cho phát nhạc nền, podcast và hiệu ứng âm thanh trong trò chơi trên iOS và macOS.
Hãy xem thêm hai kịch bản điển hình khi làm việc với AVFoundation: xử lý âm thanh qua AVAudioEngine và xuất video sang định dạng khác.
AVAudioEngine cho phép xử lý âm thanh thời gian thực bằng cách kết nối các nút trong đồ thị xử lý: nút đầu vào (micrô) → hiệu ứng → nút đầu ra (loa). Trong ví dụ dưới đây, hiệu ứng vang được thêm vào giọng nói.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Thiết lập vang âm
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Kết nối: micrô -> vang âm -> loa
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine tạo đồ thị gồm ba nút: đầu vào (micrô), hiệu ứng (vang với cài đặt trước hội trường lớn) và đầu ra (loa). Sau engine.start(), âm thanh từ micrô được xử lý bởi hiệu ứng trong thời gian thực và xuất ra tai nghe hoặc loa của thiết bị. Độ trễ xử lý dưới 10 ms trên tất cả các thiết bị Apple hiện đại.
Một khả năng bổ sung của AVAudioEngine là phân tích âm thanh qua AVAudioUnitEQ và AVAudioUnitMixer. Nhà phát triển có thể thêm bộ cân bằng, máy nén và bộ giới hạn vào bất kỳ luồng âm thanh nào. Đối với ứng dụng âm nhạc, AVFoundation cung cấp AVAudioSequencer để phát tệp MIDI và AVSpeechSynthesizer để tổng hợp giọng nói. Tất cả các thành phần hoạt động trong một đồ thị âm thanh duy nhất, cung cấp độ trễ giữa chụp và xử lý dưới 5 ms trên các thiết bị Apple.
Khi làm việc với AVFoundation, điều quan trọng là phải xem xét quyền hệ thống: để truy cập camera, cần NSCameraUsageDescription trong Info.plist và cho micrô, cần NSMicrophoneUsageDescription. AVFoundation tự động hiển thị hộp thoại yêu cầu quyền hệ thống ở lần truy cập đầu tiên vào thiết bị. Việc người dùng từ chối được xử lý qua AVCaptureDevice.authorizationStatus(), cho phép hiển thị thông báo phù hợp về việc không khả dụng của camera kèm đề xuất vào Cài đặt.
AVFoundation hỗ trợ phát lại âm thanh nền qua Chế độ Âm thanh Nền trong Capabilities của dự án. Để kích hoạt, chỉ cần thêm mục audio trong UIBackgroundModes Info.plist và cấu hình AVAudioSession với danh mục .playback. Video không phát ở chế độ nền theo mặc định, nhưng bạn có thể sử dụng AVPlayer với chế độ hình trong hình để tiếp tục phát video trong ứng dụng đã thu nhỏ trên iPad. Biểu tượng chế độ PiP được cấu hình qua AVPictureInPictureController cùng với delegate của giao thức.
Câu hỏi thường gặp
iOS 4+ cho phát lại và chụp cơ bản. iOS 8+ cho AVAudioEngine. iOS 17+ cho AVAssetWriter ở chế độ HDR. Phiên bản hiện tại của framework được hỗ trợ trên tất cả các thiết bị iPhone, iPad và Mac.
Có, AVPlayer hỗ trợ HLS (HTTP Live Streaming) — giao thức phát trực tuyến chính của Apple. Để gửi phương tiện đến máy chủ, hãy sử dụng AVAssetWriter với giao thức tùy chỉnh trên URLSession.
AVFoundation là framework cấp thấp để làm việc với phương tiện. AVKit là lớp trên AVFoundation cung cấp các thành phần giao diện người dùng có sẵn: AVPlayerViewController, AVPictureInPictureController và AVPipView.
Có, từ iOS 11 AVFoundation hỗ trợ FLAC (Free Lossless Audio Codec) để phát lại. ALAC (Apple Lossless) được hỗ trợ từ iOS 4. Cả hai codec đều hoạt động qua AVAudioPlayer và AVPlayer.
Qua RPScreenRecorder từ ReplayKit, sử dụng AVFoundation bên trong. Từ iOS 9, ghi màn hình có sẵn qua RPScreenRecorder.shared().startRecording() với micrô tùy chọn.
Tóm tắt
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm