AVFoundation — nó là gì, API âm thanh và video trong iOS

Tác giả: IT Sectr Đã đăng: 2026-03-26 Thời gian đọc: 8 phút

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 — framework đa phương tiện của Apple để chụp, phát lại và xử lý âm thanh và video
  • AVCaptureSession quản lý việc chụp từ camera và micrô với cài đặt chất lượng và định dạng
  • AVPlayer cung cấp khả năng phát lại tệp phương tiện với hỗ trợ HLS, MP4 và AirPlay
  • AVAudioEngine cho phép xử lý âm thanh thời gian thực với hiệu ứng và trộn âm
  • AVAssetExportSession thực hiện xuất và chuyển đổi tệp phương tiện sang nhiều định dạng khác nhau

AVFoundation là gì?

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.

Khả năng chính

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.

Các thành phần chính của AVFoundation

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ầnMục đíchLớp chính
ChụpLàm việc với camera và micrôAVCaptureSession
Phát lạiTrình phát âm thanh và videoAVPlayer / AVAudioPlayer
Chỉnh sửaTổng hợp và dựng phimAVMutableComposition
XuấtChuyển đổi sang định dạng khácAVAssetExportSession
Công cụ âm thanhXử lý âm thanh thời gian thựcAVAudioEngine
Siêu dữ liệuĐọc ID3, EXIF và XMPAVMetadataItem

AVCaptureSession — Chụp bằng camera

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 — Phát lại phương tiện

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 phương tiện với AVFoundation

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.

Thiết lập AVCaptureSession

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.

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.

Phát lại phương tiện

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.

Ví dụ AVPlayer với HLS

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.

swift
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.

Ví dụ mã bổ sung

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.

Xử lý âm thanh qua AVAudioEngine

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.

swift
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

AVFoundation được hỗ trợ từ phiên bản iOS nào?

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ó thể sử dụng AVFoundation để phát trực tuyến không?

, 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 khác AVKit như thế nào?

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.

AVFoundation có hỗ trợ định dạng âm thanh FLAC và ALAC không?

, 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.

Làm thế nào để ghi video màn hình qua AVFoundation?

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

  • AVFoundation — framework đa phương tiện nền tảng của Apple để chụp, phát lại và xử lý âm thanh/video
  • AVCaptureSession quản lý camera và micrô với độ phân giải lên đến 8K và 240 FPS
  • AVPlayer cung cấp phát lại luồng cục bộ và HLS với AirPlay và PiP
  • AVAudioEngine xử lý âm thanh thời gian thực qua đồ thị nút với hiệu ứng
  • AVAssetExportSession chuyển đổi tệp phương tiện giữa các định dạng với hỗ trợ HDR
  • AVKit cung cấp giao diện người dùng có sẵn cho trình phát và quản lý chế độ hình trong hình
  • Framework này được sử dụng trong 90% ứng dụng iOS làm việc với nội dung đa phương tiện

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.

Thảo luận dự án

Đọc thêm