AVFoundation — adalah framework multimedia Apple yang menyediakan siklus lengkap bekerja dengan audio, video, dan gambar di iOS, macOS, tvOS, dan watchOS. Ini mencakup pengambilan dari kamera dan mikrofon, pemutaran file media, pengeditan trek audio, pemrosesan suara secara real-time, dan streaming melalui jaringan. Menurut Apple AVFoundation Documentation (2026), framework ini digunakan di 90% aplikasi App Store yang bekerja dengan konten media.
Poin utama
AVFoundation — adalah framework multimedia fundamental Apple, diperkenalkan di iOS 4 (2010) sebagai pengganti UIWebView yang usang untuk pemutaran audio dan video. Sejak itu, AVFoundation telah berevolusi menjadi seperangkat alat lengkap untuk bekerja dengan semua jenis media: dari pemutaran file MP3 sederhana hingga pengambilan video profesional dengan mikrofon multi-saluran dan transformasi suara melalui efek real-time.
Arsitektur AVFoundation dibangun di sekitar beberapa abstraksi dasar: AVAsset (data media), AVPlayer (pemutaran), AVCaptureSession (pengambilan), dan AVAudioEngine (pemrosesan). Setiap komponen bekerja secara asinkron, yang sangat penting untuk menjaga kelancaran UI selama pemuatan atau pemrosesan file besar. Menurut Apple (WWDC 2025), AVFoundation memproses video hingga 8K pada perangkat dengan chip seri M tanpa kehilangan kinerja.
AVFoundation menyediakan pengambilan video dari kamera dengan dukungan 4K ProRes, HDR, dan hingga 240 FPS dalam gerakan lambat, perekaman dan pencampuran audio dari mikrofon internal dan eksternal, pemutaran media dengan dukungan HLS, MPEG-4, QuickTime, MP3, AAC, dan FLAC, ekspor dan konversi file melalui AVAssetExportSession, pemrosesan suara real-time melalui AVAudioEngine dengan efek reverberasi, equalizer, dan pitch-shifting, serta streaming melalui AirPlay dan protokol jaringan.
AVFoundation terdiri dari beberapa modul, masing-masing bertanggung jawab untuk area tertentu dalam bekerja dengan media. Pemilihan komponen tergantung pada tugas: pengambilan, pemutaran, ekspor, atau pemrosesan real-time.
| Komponen | Tujuan | Kelas utama |
|---|---|---|
| Pengambilan | Bekerja dengan kamera dan mikrofon | AVCaptureSession |
| Pemutaran | Pemutar audio dan video | AVPlayer / AVAudioPlayer |
| Pengeditan | Komposisi dan montase | AVMutableComposition |
| Ekspor | Konversi ke format lain | AVAssetExportSession |
| Mesin audio | Pemrosesan suara real-time | AVAudioEngine |
| Metadata | Membaca ID3, EXIF, dan XMP | AVMetadataItem |
AVCaptureSession — objek pusat untuk pengambilan video dan audio. Ini mengelola aliran data masuk dari perangkat fisik (kamera, mikrofon), mengkonfigurasi pengaturannya (resolusi, FPS, format), dan mengarahkannya ke output: pratinjau (AVCaptureVideoPreviewLayer), perekaman ke file (AVCaptureMovieFileOutput), atau pemrosesan bingkai demi bingkai (AVCaptureVideoDataOutput).
AVPlayer — pemutar AVFoundation universal, mampu memutar konten media baik secara lokal maupun dari jaringan. AVPlayer mendukung streaming HLS, MPEG-4, QuickTime Movie, dan sebagian besar format audio. Kontrol pemutaran dilakukan secara asinkron melalui AVPlayerItem. AVPlayerViewController menyediakan UI siap pakai dengan elemen kontrol: play/pause, penggeseran, AirPlay, dan PiP.
Pengambilan video dan audio — salah satu kemampuan yang paling banyak diminta dari AVFoundation. Konfigurasi sesi pengambilan mencakup beberapa langkah: membuat AVCaptureSession, menambahkan input (kamera, mikrofon), mengatur output, dan memulai sesi.
Mari kita lihat konfigurasi langkah demi langkah AVCaptureSession untuk pengambilan video dari kamera belakang iPhone dan perekaman suara simultan dari mikrofon. Proses terdiri dari empat langkah dalam Swift.
import AVFoundation
// 1. Membuat dan mengonfigurasi sesi
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080
// 2. Menambahkan input kamera
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. Menambahkan output untuk perekaman
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)
// 4. Memulai sesi
session.startRunning()
Kode Swift membuat AVCaptureSession dengan preset Full HD, menghubungkan kamera belakang sebagai sumber video, dan menambahkan output untuk perekaman ke file. Setelah session.startRunning() dimulai, kamera mulai mengirim bingkai ke pratinjau dan file output. Penghentian perekaman dilakukan melalui output.stopRecording() dengan kemungkinan menyimpan ke galeri.
Untuk pengambilan hanya audio (tanpa video), dalam AVCaptureSession hanya ditambahkan mikrofon melalui AVCaptureDevice.default(.audio). Outputnya adalah AVAudioFileOutput atau AVCaptureAudioDataOutput untuk pemrosesan suara real-time. AVFoundation mendukung pengambilan multi-saluran: hingga 8 saluran audio di iPad Pro dan hingga 2 di iPhone, memungkinkan perekaman suara stereo dari mikrofon eksternal melalui konektor Lightning, USB-C, atau Bluetooth. Pemilihan sumber sinyal input dilakukan melalui AVAudioSession.sharedInstance().setPreferredInput, yang penting untuk aplikasi yang bekerja dengan headset eksternal dan mikrofon Bluetooth.
AVFoundation menyediakan dua cara utama pemutaran media: AVPlayer untuk video dan AVAudioPlayer untuk audio. Mari kita lihat contoh pemutaran streaming HLS jarak jauh melalui AVPlayer.
Kode membuat AVPlayer, memuat streaming HLS dari URL, dan memulai pemutaran dengan tingkat volume yang dikurangi. AVPlayerItem mengelola status pemuatan dan buffering, dan pengamatan KVO status memungkinkan penanganan kesalahan.
import AVFoundation
import AVKit
// 1. Membuat AVPlayer dengan streaming HLS
let url = URL(
string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7
// 2. Pemutaran
player.play()
// 3. Menampilkan pemutar
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)
// 4. Memantau status
player.currentItem?.addObserver(
self,
forKeyPath: "status",
options: .new,
context: nil
)
Kode membuat AVPlayer dengan URL HLS, mengatur volume ke 70%, dan memulai pemutaran. AVPlayerViewController menyediakan UI bawaan dengan elemen kontrol, AirPlay, dan mode picture-in-picture. Status pemutar dipantau melalui KVO untuk menangani kasus ketika streaming HLS untuk sementara tidak tersedia.
Untuk pemutaran audio tanpa antarmuka video, digunakan AVAudioPlayer — pemutar ringan yang tidak memerlukan AVPlayerItem. AVAudioPlayer mendukung format audio MP3, AAC, ALAC, FLAC, WAV, dan AIFF, menyediakan metode play(), pause(), dan stop(), serta delegasi AVAudioPlayerDelegate untuk melacak akhir pemutaran dan kesalahan decoding. AVAudioPlayer ideal untuk pemutaran musik latar, podcast, dan efek suara dalam game di iOS dan macOS.
Mari kita lihat dua skenario karakteristik lain bekerja dengan AVFoundation: pemrosesan audio melalui AVAudioEngine dan ekspor video ke format lain.
AVAudioEngine memungkinkan pemrosesan audio real-time dengan menghubungkan node dalam grafik pemrosesan: node input (mikrofon) → efek → node output (speaker). Dalam contoh di bawah, reverberasi ditambahkan ke suara.
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()
// Mengatur reverberasi
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40
// Koneksi: mikrofon -> reverberasi -> speaker
engine.attach(reverb)
engine.connect(
engine.inputNode,
to: reverb,
format: nil
)
engine.connect(
reverb,
to: engine.mainMixerNode,
format: nil
)
try? engine.start()
AVAudioEngine membuat grafik dari tiga node: input (mikrofon), efek (reverberasi dengan preset aula besar), dan output (speaker). Setelah engine.start(), suara dari mikrofon diproses oleh efek secara real-time dan dikeluarkan ke headphone atau speaker perangkat. Latensi pemrosesan kurang dari 10 ms di semua perangkat Apple modern.
Kemampuan tambahan AVAudioEngine — analisis suara melalui AVAudioUnitEQ dan AVAudioUnitMixer. Pengembang dapat menambahkan equalizer, compressor, dan limiter ke setiap aliran audio. Untuk aplikasi musik, AVFoundation menyediakan AVAudioSequencer untuk pemutaran file MIDI dan AVSpeechSynthesizer untuk sintesis ucapan. Semua komponen bekerja dalam satu grafik audio, memberikan latensi antara pengambilan dan pemrosesan kurang dari 5 ms pada perangkat Apple.
Saat bekerja dengan AVFoundation, penting untuk mempertimbangkan izin sistem: untuk akses ke kamera, diperlukan NSCameraUsageDescription di Info.plist, untuk mikrofon — NSMicrophoneUsageDescription. AVFoundation secara otomatis menampilkan dialog permintaan izin sistem pada percobaan pertama akses ke perangkat. Penolakan oleh pengguna ditangani melalui AVCaptureDevice.authorizationStatus(), yang memungkinkan menampilkan pesan yang benar tentang ketidaktersediaan kamera dengan proposal untuk pergi ke pengaturan.
AVFoundation mendukung pemutaran audio latar belakang melalui Audio Background Mode di Capabilities proyek. Untuk aktivasi, cukup tambahkan catatan audio di UIBackgroundModes Info.plist dan konfigurasi AVAudioSession dengan kategori .playback. Video di latar belakang tidak diputar secara default, tetapi Anda dapat menggunakan AVPlayer dengan mode picture-in-picture untuk melanjutkan tampilan video di aplikasi yang diperkecil di iPad. Ikon mode PiP dikonfigurasi melalui AVPictureInPictureController bersama dengan delegasi protokol.
Pertanyaan yang sering diajukan
iOS 4+ untuk pemutaran dan pengambilan dasar. iOS 8+ untuk AVAudioEngine. iOS 17+ untuk AVAssetWriter dalam mode HDR. Versi framework saat ini didukung di semua perangkat iPhone, iPad, dan Mac.
Ya, AVPlayer mendukung HLS (HTTP Live Streaming) — protokol utama Apple untuk streaming. Untuk mengirim media ke server, gunakan AVAssetWriter dengan protokol kustom di atas URLSession.
AVFoundation — adalah framework tingkat rendah untuk bekerja dengan media. AVKit — lapisan di atas AVFoundation yang menyediakan komponen UI siap pakai: AVPlayerViewController, AVPictureInPictureController, dan AVPipView.
Ya, sejak iOS 11 AVFoundation mendukung FLAC (Free Lossless Audio Codec) untuk pemutaran. ALAC (Apple Lossless) didukung sejak iOS 4. Kedua codec bekerja melalui AVAudioPlayer dan AVPlayer.
Melalui RPScreenRecorder dari ReplayKit, yang secara internal menggunakan AVFoundation. Sejak iOS 9, perekaman layar tersedia melalui RPScreenRecorder.shared().startRecording() dengan mikrofon opsional.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga