AVFoundation — nedir, iOS'ta ses ve video API'si

Yazar: IT Sectr Yayınlanma: 2026-03-26 Okuma süresi: 8 dk

AVFoundation, iOS, macOS, tvOS ve watchOS üzerinde ses, video ve görüntülerle çalışmak için eksiksiz bir iş akışı sağlayan Apple'ın multimedya çerçevesidir. Kameradan ve mikrofondan yakalama, medya dosyası oynatma, ses parçası düzenleme, gerçek zamanlı ses işleme ve ağ üzerinden akışı kapsar. Apple AVFoundation Documentation (2026)'ya göre, bu çerçeve medya içeriğiyle çalışan App Store uygulamalarının %90'ında kullanılmaktadır.

Önemli Noktalar

  • AVFoundation — ses ve videoyu yakalamak, oynatmak ve işlemek için Apple'ın multimedya çerçevesi
  • AVCaptureSession, kalite ve biçim ayarlarıyla kamera ve mikrofon yakalamasını yönetir
  • AVPlayer, HLS, MP4 ve AirPlay desteğiyle medya dosyası oynatma sağlar
  • AVAudioEngine, efektler ve miksaj ile gerçek zamanlı ses işlemeyi mümkün kılar
  • AVAssetExportSession, medya dosyalarını çeşitli biçimlere aktarır ve dönüştürür

AVFoundation Nedir?

AVFoundation, ses ve video oynatma için kullanımdan kaldırılan UIWebView'in yerine iOS 4'te (2010) tanıtılan Apple'ın temel multimedya çerçevesidir. O zamandan beri AVFoundation, basit MP3 dosyası oynatmadan çok kanallı mikrofonla profesyonel video yakalamaya ve gerçek zamanlı efektlerle ses dönüşümüne kadar her tür medyayla çalışmak için kapsamlı bir araç setine dönüşmüştür.

AVFoundation mimarisi, birkaç temel soyutlama etrafında inşa edilmiştir: AVAsset (medya verileri), AVPlayer (oynatma), AVCaptureSession (yakalama) ve AVAudioEngine (işleme). Her bileşen asenkron olarak çalışır; bu, büyük dosyaların yüklenmesi veya işlenmesi sırasında kullanıcı arayüzünün akıcılığını korumak için kritik öneme sahiptir. Apple'a (WWDC 2025) göre AVFoundation, M serisi çipli cihazlarda performans kaybı olmadan 8K'ya kadar videoyu işler.

Temel Yetenekler

AVFoundation, 4K ProRes, HDR ve ağır çekimde 240 FPS'ye kadar destekle kamera video yakalama, dahili ve harici mikrofonlardan ses kaydı ve miksajı, HLS, MPEG-4, QuickTime, MP3, AAC ve FLAC desteğiyle medya oynatma, AVAssetExportSession ile dosya aktarımı ve dönüştürme, yankı, ekolayzır ve perde değiştirme efektleriyle AVAudioEngine aracılığıyla gerçek zamanlı ses işleme ve AirPlay ile ağ protokolleri üzerinden akış sağlar.

AVFoundation'ın Temel Bileşenleri

AVFoundation, her biri medya çalışmasının belirli bir alanından sorumlu olan birkaç modülden oluşur. Bileşen seçimi göreve bağlıdır: yakalama, oynatma, aktarma veya gerçek zamanlı işleme.

BileşenAmaçTemel Sınıf
YakalamaKamera ve mikrofonla çalışmaAVCaptureSession
OynatmaSes ve video oynatıcıAVPlayer / AVAudioPlayer
DüzenlemeKompozisyon ve montajAVMutableComposition
AktarmaDiğer biçimlere dönüştürmeAVAssetExportSession
Ses MotoruGerçek zamanlı ses işlemeAVAudioEngine
Meta verilerID3, EXIF ve XMP okumaAVMetadataItem

AVCaptureSession — Kamera Yakalama

AVCaptureSession, video ve ses yakalama için merkezi nesnedir. Fiziksel cihazlardan (kamera, mikrofon) gelen veri akışlarını yönetir, ayarlarını (çözünürlük, FPS, biçim) yapılandırır ve çıktıya yönlendirir: ön izleme (AVCaptureVideoPreviewLayer), dosya kaydı (AVCaptureMovieFileOutput) veya kare kare işleme (AVCaptureVideoDataOutput).

AVPlayer — Medya Oynatma

AVPlayer, hem yerel olarak hem de ağ üzerinden medya içeriğini oynatabilen evrensel bir AVFoundation oynatıcısıdır. AVPlayer, HLS akışı, MPEG-4, QuickTime Movie ve çoğu ses biçimini destekler. Oynatma kontrolü, AVPlayerItem aracılığıyla asenkron olarak gerçekleştirilir. AVPlayerViewController, oynat/duraklat, kaydırma, AirPlay ve PiP kontrolleriyle hazır bir kullanıcı arayüzü sağlar.

AVFoundation ile Medya Yakalama

Video ve ses yakalama, AVFoundation'ın en çok talep edilen yeteneklerinden biridir. Bir yakalama oturumu kurulumu birkaç adım içerir: AVCaptureSession oluşturma, girişler (kamera, mikrofon) ekleme, çıkışları yapılandırma ve oturumu başlatma.

AVCaptureSession Kurulumu

iPhone'un arka kamerasından video yakalamak ve aynı anda mikrofondan ses kaydetmek için AVCaptureSession'ın adım adım kurulumunu inceleyelim. Süreç Swift'te dört adımdan oluşur.

swift
import AVFoundation

// 1. Oturum oluşturma ve yapılandırma
let session = AVCaptureSession()
session.sessionPreset = .hd1920x1080

// 2. Kamera girişi ekleme
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. Kayıt için çıkış ekleme
let output = AVCaptureMovieFileOutput()
guard session.canAddOutput(output) else { return }
session.addOutput(output)

// 4. Oturumu başlatma
session.startRunning()

Swift kodu, Full HD ön ayarıyla bir AVCaptureSession oluşturur, arka kamerayı video kaynağı olarak bağlar ve dosya kaydı için bir çıkış ekler. session.startRunning()'den sonra kamera, ön izlemeye ve çıkış dosyasına kareler göndermeye başlar. Kayıt, galeriye kaydetme seçeneğiyle output.stopRecording() aracılığıyla durdurulur.

Yalnızca ses yakalama için (video olmadan), AVCaptureSession'a yalnızca mikrofon AVCaptureDevice.default(.audio) aracılığıyla eklenir. Çıkış, gerçek zamanlı ses işleme için AVAudioFileOutput veya AVCaptureAudioDataOutput'tır. AVFoundation, çok kanallı yakalamayı destekler: iPad Pro'da 8'e kadar ses kanalı ve iPhone'da 2'ye kadar kanal; bu, Lightning, USB-C veya Bluetooth aracılığıyla harici mikrofonlardan stereo kayda olanak tanır. Giriş kaynağı seçimi AVAudioSession.sharedInstance().setPreferredInput aracılığıyla yapılır; bu, harici kulaklıklar ve Bluetooth mikrofonlarla çalışan uygulamalar için kritiktir.

Medya Oynatma

AVFoundation, medya oynatma için iki ana yöntem sunar: video için AVPlayer ve ses için AVAudioPlayer. AVPlayer kullanarak uzak bir HLS akışını oynatma örneğine bakalım.

HLS ile AVPlayer Örneği

Kod bir AVPlayer oluşturur, bir URL'den HLS akışı yükler ve düşük ses seviyesinde oynatmayı başlatır. AVPlayerItem, yükleme ve arabelleğe alma durumunu yönetir ve durumun KVO gözlemi, hataların işlenmesine olanak tanır.

swift
import AVFoundation
import AVKit

// 1. HLS akışıyla AVPlayer oluşturma
let url = URL(
    string: "https://example.com/stream.m3u8"
) !
let player = AVPlayer(url: url)
player.volume = 0.7

// 2. Oynatma
player.play()

// 3. Oynatıcıyı gösterme
let playerVC = AVPlayerViewController()
playerVC.player = player
present(playerVC, animated: true)

// 4. Durumu izleme
player.currentItem?.addObserver(
    self,
    forKeyPath: "status",
    options: .new,
    context: nil
)

Kod bir HLS URL'si ile AVPlayer oluşturur, sesi %70'e ayarlar ve oynatmayı başlatır. AVPlayerViewController, kontroller, AirPlay ve resim içinde resim moduyla yerleşik bir kullanıcı arayüzü sağlar. Oynatıcı durumu, HLS akışının geçici olarak kullanılamadığı durumları ele almak için KVO aracılığıyla izlenir.

Video arayüzü olmadan ses oynatma için AVAudioPlayer kullanılır — AVPlayerItem gerektirmeyen hafif bir oynatıcı. AVAudioPlayer, MP3, AAC, ALAC, FLAC, WAV ve AIFF ses biçimlerini destekler, play(), pause() ve stop() yöntemlerinin yanı sıra oynatma tamamlama ve kod çözme hatalarını izlemek için AVAudioPlayerDelegate sağlar. AVAudioPlayer, iOS ve macOS'ta arka plan müzik oynatma, podcast'ler ve oyunlardaki ses efektleri için idealdir.

Ek Kod Örnekleri

AVFoundation ile çalışmanın iki tipik senaryosuna daha bakalım: AVAudioEngine aracılığıyla ses işleme ve videoyu başka bir biçime aktarma.

AVAudioEngine ile Ses İşleme

AVAudioEngine, bir işleme grafiğindeki düğümleri birleştirerek gerçek zamanlı ses işlemeyi mümkün kılar: giriş düğümü (mikrofon) → efektler → çıkış düğümü (hoparlör). Aşağıdaki örnekte sese yankı eklenmiştir.

swift
let engine = AVAudioEngine()
let reverb = AVAudioUnitReverb()

// Yankı ayarlama
reverb.loadFactoryPreset(.largeHall)
reverb.wetDryMix = 40

// Bağlantı: mikrofon -> yankı -> hoparlör
engine.attach(reverb)
engine.connect(
    engine.inputNode,
    to: reverb,
    format: nil
)
engine.connect(
    reverb,
    to: engine.mainMixerNode,
    format: nil
)

try? engine.start()

AVAudioEngine, üç düğümden oluşan bir grafik oluşturur: giriş (mikrofon), efekt (büyük salon ön ayarlı yankı) ve çıkış (hoparlör). engine.start()'tan sonra mikrofondan gelen ses gerçek zamanlı olarak efekt tarafından işlenir ve cihazın kulaklığına veya hoparlörüne gönderilir. Tüm modern Apple cihazlarında işleme gecikmesi 10 ms'nin altındadır.

AVAudioEngine'in ek bir yeteneği, AVAudioUnitEQ ve AVAudioUnitMixer aracılığıyla ses analizidir. Geliştirici, herhangi bir ses akışına ekolayzır, sıkıştırıcı ve sınırlayıcı ekleyebilir. Müzik uygulamaları için AVFoundation, MIDI dosyası oynatma için AVAudioSequencer ve konuşma sentezi için AVSpeechSynthesizer sağlar. Tüm bileşenler tek bir ses grafiğinde çalışarak Apple cihazlarında yakalama ve işleme arasında 5 ms'nin altında gecikme sağlar.

AVFoundation ile çalışırken sistem izinlerini dikkate almak önemlidir: kameraya erişmek için Info.plist'te NSCameraUsageDescription ve mikrofon için NSMicrophoneUsageDescription gereklidir. AVFoundation, bir cihaza ilk erişim denemesinde otomatik olarak sistem izin iletişim kutusunu gösterir. Kullanıcının reddetmesi, AVCaptureDevice.authorizationStatus() aracılığıyla işlenir ve Ayarlar'a gitme önerisiyle kameranın kullanılamadığına dair uygun bir mesaj gösterilmesine olanak tanır.

AVFoundation, proje Yeteneklerindeki Ses Arka Plan Modu aracılığıyla arka plan ses oynatmayı destekler. Etkinleştirmek için UIBackgroundModes Info.plist'e audio girişini ekleyin ve AVAudioSession'ı .playback kategorisiyle yapılandırın. Video varsayılan olarak arka planda oynatılmaz, ancak iPad'de küçültülmüş bir uygulamada video oynatmaya devam etmek için resim içinde resim moduyla AVPlayer kullanabilirsiniz. PiP modu simgesi, protokol temsilcisiyle birlikte AVPictureInPictureController aracılığıyla yapılandırılır.

Sıkça Sorulan Sorular

AVFoundation hangi iOS sürümlerinden itibaren destekleniyor?

iOS 4+ temel oynatma ve yakalama için. iOS 8+ AVAudioEngine için. iOS 17+ HDR modunda AVAssetWriter için. Çerçevenin mevcut sürümü tüm iPhone, iPad ve Mac cihazlarında desteklenmektedir.

AVFoundation akış için kullanılabilir mi?

Evet, AVPlayer, Apple'ın birincil akış protokolü olan HLS'yi (HTTP Live Streaming) destekler. Sunucuya medya göndermek için URLSession üzerinde özel bir protokolle AVAssetWriter kullanın.

AVFoundation ve AVKit arasındaki fark nedir?

AVFoundation, medyayla çalışmak için düşük seviyeli bir çerçevedir. AVKit, AVFoundation üzerinde hazır kullanıcı arayüzü bileşenleri sağlayan bir katmandır: AVPlayerViewController, AVPictureInPictureController ve AVPipView.

AVFoundation, FLAC ve ALAC ses biçimlerini destekliyor mu?

Evet, iOS 11'den itibaren AVFoundation, oynatma için FLAC'ı (Free Lossless Audio Codec) destekler. ALAC (Apple Lossless) iOS 4'ten beri desteklenmektedir. Her iki codec de AVAudioPlayer ve AVPlayer aracılığıyla çalışır.

AVFoundation ile ekran videosu nasıl kaydedilir?

ReplayKit'ten RPScreenRecorder aracılığıyla, dahili olarak AVFoundation kullanır. iOS 9'dan itibaren, ekran kaydı isteğe bağlı mikrofonla RPScreenRecorder.shared().startRecording() aracılığıyla kullanılabilir.

Özet

  • AVFoundation — ses/video yakalama, oynatma ve işleme için Apple'ın temel multimedya çerçevesi
  • AVCaptureSession, 8K ve 240 FPS'ye kadar çözünürlük ayarlarıyla kamera ve mikrofonu yönetir
  • AVPlayer, AirPlay ve PiP ile yerel ve HLS akış oynatma sağlar
  • AVAudioEngine, efektlerle düğüm grafiği aracılığıyla gerçek zamanlı ses işler
  • AVAssetExportSession, HDR desteğiyle medya dosyalarını biçimler arasında dönüştürür
  • AVKit, oynatıcı ve resim içinde resim modu yönetimi için hazır kullanıcı arayüzü sağlar
  • Çerçeve, medya içeriğiyle çalışan iOS uygulamalarının %90'ında kullanılır

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun