AVPlayer — Temel kavramlar, özellikler ve kullanım

Yazar: IT Sectr Yayınlanma: 2026-05-23 Okuma süresi: 9 dk

AVPlayer, Apple'ın AVFoundation'un bir parçası olan ve iOS, macOS, tvOS ve visionOS'ta ses ve video oynatma sağlayan bir medya oynatıcı framework'üdür. AVPlayer, yerel MP4 dosyalarından uyarlanabilir HLS akışlarına kadar geniş bir format yelpazesini — Apple Silicon yongalarında donanım hızlandırmalı kod çözme ile birleşik bir API aracılığıyla destekler. Apple WWDC (2024)'ye göre AVPlayer, Apple TV, Music ve Photos dahil olmak üzere medyayla çalışan iOS uygulamalarının %90'ında kullanılmaktadır.

Önemli Noktalar

  • AVPlayer — Tüm Apple platformları için AVFoundation'dan Apple'ın medya oynatıcı framework'ü.
  • Donanım Hızlandırma — AVPlayer, GPU'da kod çözme için VideoToolbox kullanır, güç tüketimini azaltır.
  • HLS — Otomatik uyarlanabilir bit hızı değiştirme ile yerel HTTP Live Streaming desteği.
  • Picture in Picture — iPad, iPhone ve Mac'te resim içinde resim modu için yerleşik destek.
  • DRM — Premium içerik koruması için FairPlay Streaming ile entegrasyon.

AVPlayer nedir?

AVPlayer, AVFoundation framework'ünün merkezi bileşenidir ve tüm Apple platformlarında multimedya oynatmadan sorumludur. iOS 4.0'da (2010) kullanımdan kaldırılan MPMoviePlayerController'ın yerine tanıtılan AVPlayer, kod çözme parametrelerinin ince ayarı, ses-video senkronizasyonu ve AirPlay ile Picture in Picture gibi sistem hizmetleriyle entegrasyon ile oynatma üzerinde düşük seviyeli kontrol sağlar.

Üçüncü taraf oynatıcılardan farklı olarak, AVPlayer Apple Silicon yongalarında donanım hızlandırmasından yararlanır. Video kod çözme, özel M-serisi medya motorlarını (Media Engine) kullanarak VideoToolbox aracılığıyla gerçekleştirilir ve minimum güç tüketimiyle 8K HDR oynatma sağlar. HEVC (H.265) ve ProRes için kod çözme, CPU'yu yormadan özel yonga bloklarında gerçekleşir.

AVPlayer, Apple ekosistemiyle sıkı bir şekilde entegredir: cihazlar arasında oynatmayı aktarmak için Handoff desteği, Apple TV'ye akış için AirPlay 2, dinamik kafa takibi ile uzamsal ses ve MPNowPlayingInfoCenter aracılığıyla sistem kontrol öğeleriyle senkronizasyon. Bu entegrasyonlar, AVPlayer'ı Apple platformlarında medyayla çalışan tüm uygulamalar için fiili standart haline getirir.

AVFoundation ve sınıf hiyerarşisi

AVFoundation framework'ü, oynatma için üç seviyeli bir hiyerarşi sağlar: AVAsset (meta veriler ve içerik bilgisi), AVPlayerItem (belirli bir içerik örneğinin durumu ve yönetimi) ve AVPlayer (oynatma kontrolü). Bu mimari, meta veri yüklemeyi, oynatma hazırlığını ve oynatma sürecinin kendisini ayırır — bu, birden çok bit hızı seçeneğine sahip HLS akışları için özellikle önemlidir.

AVAsset bir medya içerik modelini — bir dosya veya akışı — temsil eder. AVAsset kendi başına oynatılabilir değildir; parçalar (AVAssetTrack), meta veriler (commonMetadata), süre bilgisi ve diğer özellikleri içerir. AVAsset'ten bir AVPlayerItem oluşturulur ve daha sonra oynatma için AVPlayer'a iletilebilir.

AVPlayer'ın temel özellikleri

AVPlayer, basit dosya oynatmadan DRM'li karmaşık canlı yayınlara kadar çoğu oynatma senaryosunu kapsayan bir dizi yetenek sunar. Kullanım örnekleriyle temel özellikleri keşfedelim.

ÖzellikAçıklamaPlatformlar
Yerel dosyalarMP4, MOV, M4V, AVI, MKV (uzantılar yoluyla)iOS, macOS, tvOS
HLSUyarlanabilir ABR ile HTTP Live StreamingTüm Apple platformları
FairPlay DRMAkış lisansıyla korunan HLS içeriğiiOS, tvOS, macOS
Picture in PictureDiğer uygulamaların üzerinde yüzen video penceresiiPad, iPhone (iOS 14+), Mac
AirPlay 2Apple TV ve hoparlörlere kablosuz akışTüm platformlar
Uzamsal sesDolby Atmos ve dinamik kafa takibiiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG ekran desteğiyleiOS 11+, macOS 10.13+

HLS desteği ve uyarlanabilir değiştirme

AVPlayer, ek kitaplık gerektirmeden yerel HLS desteğine sahiptir. Bir HLS akışını oynatırken AVPlayer, Apple platformları için optimize edilmiş yerleşik bir ABR algoritması kullanarak otomatik olarak uyarlanabilir bit hızı değiştirmeyi yönetir. Algoritma yalnızca ağ bant genişliğini değil, aynı zamanda cihazın termal durumunu da dikkate alır — aşırı ısınma durumunda AVPlayer, CPU yükünü azaltmak için bit hızını düşürebilir.

FairPlay Streaming ile HLS akışları için AVPlayer, AVContentKeySession delegate'i aracılığıyla otomatik olarak lisans alma ve yenilemeyi yönetir. Geliştiricinin, şifre çözme anahtarı alınması veya yenilenmesi gerektiğinde oynatıcı tarafından çağrılan AVContentKeySessionDelegate protokolünü uygulaması gerekir. Widevine iOS'ta desteklenmediğinden, Apple platformlarında HLS içeriğini korumanın tek yolu budur.

Picture in Picture

PiP, uygulamalar arasında geçiş yaparken kullanıcıların videoyu yüzen bir pencerede izlemeye devam etmesini sağlayan bir moddur. iPad ve iPhone'da (iOS 14+), AVPlayer bu modu etkinleştirmek için AVPictureInPictureController ile entegre olur. macOS 15+'te PiP de mevcuttur ancak sistem menüsü veya oynatıcı penceresindeki bir düğme aracılığıyla etkinleştirilir.

iOS uygulamasında AVPlayer nasıl kullanılır

AVPlayer'ı bir iOS uygulamasına entegre etmek iki şekilde yapılabilir: üst düzey AVPlayerViewController aracılığıyla (standart senaryolar için) veya doğrudan AVPlayer + AVPlayerLayer aracılığıyla (tam UI özelleştirmesi için). Swift'te her iki yaklaşımı da keşfedelim.

AVPlayerViewController ile entegrasyon

AVPlayerViewController, yerleşik kontroller sağlayan kullanıma hazır bir UI bileşenidir: oynat/duraklat, arama, ses, AirPlay, PiP ve tam ekran modu. Minimum entegrasyon yalnızca birkaç satır kod gerektirir: bir AVPlayer örneği oluşturun, AVPlayerViewController'a iletin ve denetleyiciyi ekranda görüntüleyin.

swift
import AVKit

let url = URL(string: "https://example.com/video.mp4")!
let asset = AVAsset(url: url)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)

let controller = AVPlayerViewController()
controller.player = player
controller.allowsPictureInPicturePlayback = true

present(controller, animated: true) {
    player.play()
}

AVPlayerLayer ile doğrudan entegrasyon

Özel UI'ya sahip uygulamalar için, herhangi bir UIView içinde video oluşturan bir Core Animation katmanı olan AVPlayerLayer'ı kullanın. Bu yaklaşım, arayüz üzerinde tam kontrol sağlar: özel kontroller, animasyonlar ekleyebilir ve videonun üzerine ek katmanlar yerleştirebilirsiniz.

swift
class VideoPlayerView: UIView {

    var player: AVPlayer? {
        get { (layer as! AVPlayerLayer).player }
        set { (layer as! AVPlayerLayer).player = newValue }
    }

    override class var layerClass: AnyClass {
        AVPlayerLayer.self
    }
}

// Kullanım:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)

AVPlayer yaşam döngüsü yönetimi

Uygun oynatıcı yaşam döngüsü yönetimi, uygulama kararlılığı için kritiktir. AVPlayer ekran göründüğünde oluşturulmalı ve kapatıldığında serbest bırakılmalıdır. Uygulama arka plana geçtiğinde, kaynakları korumak ve gereksiz arka plan oynatması için App Review cezalarından kaçınmak için oynatmanın duraklatılması önerilir.

AVPlayerLayer ve video görüntüleme

AVPlayerLayer, CALayer'dan miras alan ve ekranda video oluşturan bir Core Animation katmanıdır. UIView'den farklı olarak AVPlayerLayer, Metal veya OpenGL aracılığıyla doğrudan GPU ile çalışarak minimum kare çıkış gecikmesi sağlar. Özel oynatma arayüzleri uygulamak için AVPlayerLayer'ı anlamak önemlidir.

videoGravity yapılandırması

videoGravity özelliği, videonun katman sınırlarına nasıl sığacağını belirler. AVLayerVideoGravity.resizeAspect (siyah çubuklarla en boy oranını koruma) AVPlayerViewController için varsayılandır. resizeAspectFill (kırpma ile tüm ekranı doldurma) tam ekran modu için kullanılır. resize (katman boyutuna uyacak şekilde oranları bozma) nadiren kullanılır, çoğunlukla analitik uygulamalar için.

Ana iş parçacığı senkronizasyonu

AVPlayerLayer videoyu gerçek zamanlı olarak oluşturur, ancak tüm oynatıcı işlemleri (başlatma, duraklatma, arama) ana iş parçacığında gerçekleştirilmelidir. Gözlem için anahtar değerler — timeControlStatus, rate, status ve error — KVO (Key-Value Observing) veya iOS 16'da Swift Concurrency desteğiyle AVPlayer yöntemleri aracılığıyla tanıtılan modern async/await API'si aracılığıyla izlenir.

swift
let player = AVPlayer(url: url)
let statusObservation = player.observe(
    \.status,
    options: [.new, .initial]
) { player, _ in
    switch player.status {
    case .readyToPlay:
        player.play()
    case .failed:
        handleError(player.error)
    default:
        break
    }
}

Altyazı ve alternatif parça desteği

AVPlayer, VTT, CEA-608 ve ITT (iTunes Timed Text) biçimlerinde gömülü altyazıları destekler. Ses parçası ve altyazı seçimi, AVMediaSelectionGroup ve AVMediaSelectionOption aracılığıyla yapılır. Kullanıcı altyazı ayarları (yazı tipi, boyut, renk) sistem Erişilebilirlik ayarlarından okunur ve kodda açıkça belirtilmediği sürece otomatik olarak AVPlayerLayer'a uygulanır.

Oynatma yönetimi ve gelişmiş senaryolar

Üretim uygulamaları için temel AVPlayer entegrasyonu genellikle ek yapılandırma gerektirir: HLS segment önbellekleme, FairPlay DRM entegrasyonu, Now Playing sistemi entegrasyonu ve özel bit hızı seçim algoritmaları.

AVAssetResourceLoader ile HLS önbellekleme

AVAssetResourceLoader, HLS segment yüklemeyi durdurmanın ve önbellekleme uygulamanın tek yoludur. AVAssetResourceLoaderDelegate, anahtarlar ve segmentler için yükleme isteklerini alır, bunları yerel olarak depolamaya ve sonraki isteklerde önbellekten döndürmeye olanak tanır. Bu, kararsız ağ koşullarında çalışan uygulamalar için özellikle yararlıdır.

swift
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
    resourceLoaderDelegate,
    queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)

FairPlay Streaming — DRM entegrasyonu

FairPlay Streaming (FPS), HLS içeriğini korumak için Apple'ın standardıdır. FPS'yi entegre etmek için, şifre çözme anahtarları isteklerini işleyen AVContentKeySessionDelegate protokolünü uygulamanız gerekir. Süreç şunları içerir: oynatıcıdan SPC (Sunucu Oynatma Bağlamı) alma, lisans sunucusuna gönderme, CKC (İçerik Anahtarı Bağlamı) alma ve AVContentKeySession'a geri iletme.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. keyRequest'ten SPC al
        // 2. SPC'yi lisans sunucusuna gönder
        // 3. CKC al ve keyRequest.processContentKeyResponse'a ilet
    }
}

Now Playing ve sistem kontrolleri

Kilit Ekranı, Kontrol Merkezi ve Apple Watch'ta geçerli oynatma bilgilerini görüntülemek için MediaPlayer.framework'ten MPNowPlayingInfoCenter'ı kullanın. AVPlayer, Now Playing'i otomatik olarak güncellemez — geliştirici, oynatma durumu değiştiğinde meta verileri (başlık, sanatçı, kapak resmi, ilerleme) manuel olarak ayarlamalıdır. İlerleme güncellemeleri için düzenli bir zamanlayıcı veya observe(\.timeControlStatus) kullanılır.

Remote Command Center, kilitli ekrandan, AirPods ve CarPlay'den oynatmayı kontrol etmeye izin veren başka bir sistem hizmetidir. MPRemoteCommandCenter, play, pause, nextTrack, previousTrack, changePlaybackPosition ve skipForward/skipBackward komutları için işleyiciler kaydeder. AVPlayer bu komutları otomatik olarak işlemez — geliştirici bunları player.play(), player.pause() ve player.seek() çağrılarına bağlamalıdır.

Sıkça sorulan sorular

AVPlayer, AVAudioPlayer'dan nasıl farklıdır?

AVPlayer, akış, HLS, DRM ve sistem kontrolleriyle senkronizasyon desteği sunan evrensel bir ses ve video oynatıcısıdır. AVAudioPlayer, akış veya donanım video hızlandırması olmadan yerel ses dosyası oynatma için basitleştirilmiş bir ses oynatıcısıdır. Video ve HLS için AVPlayer'ı kullanın; basit ses için AVAudioPlayer'ı kullanın.

AVPlayer YouTube oynatmayı destekliyor mu?

Hayır, AVPlayer doğrudan YouTube içeriği yüklemeyi desteklemez çünkü YouTube, DASH ve tescilli biçimlere dayalı kendi oynatıcısını kullanır. YouTube'u bir iOS uygulamasına entegre etmek için WKWebView veya resmi youtube-ios-player-helper kitaplığı aracılığıyla YouTube IFrame Player API'sini kullanın.

AVPlayer ile arka plan ses oynatma nasıl uygulanır?

Arka plan sesi için Xcode projenizin Arka Plan Modlarına Audio, AirPlay and Picture in Picture ekleyin. AVAudioSession'ı .playback kategorisiyle yapılandırın: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer arka planda oynatmaya devam edecek ve Kilit Ekranı ile Kontrol Merkezi, MPNowPlayingInfoCenter aracılığıyla kontrolleri gösterecektir.

AVPlayer neden YouTube, Vimeo veya Twitter'dan video oynatmıyor?

Bu hizmetler DRM koruması ve kendi oynatıcı çözümlerini kullanır. AVPlayer yalnızca doğrudan medya dosyası URL'si veya HLS oynatma listesi aracılığıyla içerik oynatabilir. YouTube ve benzer platformlardaki videolar, AVPlayer ile uyumsuz olan iframe veya JavaScript oynatıcılara sarılır. Görüntüleme için resmi SDK'larını veya WebView'ı kullanın.

AVPlayer ile canlı yayında gecikme nasıl azaltılır?

Düşük gecikmeli HLS için AVPlayerItem'ı preferredForwardBufferDuration = 2.0 (saniye) ile yapılandırın ve canlı kenarın gerisinde kaldığında duraklatmayı otomatik olarak yönetin: player.currentItem?.configuredTimeOffsetFromLive ve player.currentItem?.canPlayReverse kullanın. Apple, hem sunucu hem de istemcide doğru yapılandırıldığında 2-4 saniye gecikmeli LL-HLS'yi önerir.

Özet

  • AVPlayer — iOS, macOS, tvOS ve visionOS için Apple Silicon'da donanım hızlandırmalı Apple'ın evrensel medya oynatıcısı.
  • HLS — Ek kitaplık olmadan otomatik uyarlanabilir bit hızı değiştirme ile yerel destek.
  • FairPlay Streaming — Apple platformlarında korumalı HLS için tek DRM sistemi.
  • Entegrasyon — Hızlı başlangıç için AVPlayerViewController veya özel UI için AVPlayerLayer.
  • Önbellekleme HLS, segment isteklerini durdurarak AVAssetResourceLoaderDelegate aracılığıyla uygulanır.
  • Now Playing — MPNowPlayingInfoCenter aracılığıyla Kontrol Merkezi ve Kilit Ekranı için manuel meta veri güncellemeleri.
  • Önerilen HLS gereksinimleri olan Apple platformlarındaki tüm medya projeleri için AVPlayer kullanılması önerilir.

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