AVPlayerViewController: nedir, iOS'ta entegrasyon yöntemleri

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

AVPlayerViewController, Apple ekosisteminde yerleşik bir video oynatıcı denetleyicisidir ve iOS ve tvOS'te medya içeriğini oynatmak için tasarlanmıştır. Özel bir kullanıcı arayüzü yazmaya gerek kalmadan tam ekran arayüz, kontroller, altyazı desteği ve AirPlay sağlar. Apple Developer Belgeleri, 2026'ya göre, AVPlayerViewController birkaç satır kodla entegre olur ve HLS, MP4 ve çoğu medya formatını destekler.

Anahtar Noktalar

  • AVPlayerViewController, iOS ve tvOS için AVKit çerçevesinden standart video oynatma denetleyicisidir.
  • Bir kontrol çubuğu, oynatma düğmeleri ve bir ilerleme göstergesi ile hazır bir kullanıcı arayüzü sağlar.
  • Denetleyici otomatik olarak altyazıları, ses parçalarını, AirPlay'i ve Picture in Picture'ı destekler.
  • Entegrasyon, oynatmayı yönetmek için temel nesne olan AVPlayer aracılığıyla yapılır.
  • Geliştiriciler, temsilci aracılığıyla kontrollerin görünümünü özelleştirebilir, kaplama görünümleri ekleyebilir ve olayları işleyebilir.

AVPlayerViewController Nedir?

AVPlayerViewController, Apple uygulamalarında video oynatmak için hazır bir arayüz sağlayan AVKit çerçevesinin bir bileşenidir. Geliştiriciyi sıfırdan özel bir oynatıcı oluşturma ihtiyacından kurtarır ve standart kontroller sunar: oynat/duraklat, ileri sarma, ses ayarı ve tam ekran modu.

Manuel kullanıcı arayüzü oluşturma gerektiren düşük seviyeli AVPlayerLayer'ın aksine, AVPlayerViewController oynatıcının yaşam döngüsünü tamamen yönetir. Denetleyici otomatik olarak ekran dönüşünü halleder, çentikli iPhone'larda Güvenli Alan'a uyum sağlar ve iPad'de çoklu görevi destekler.

Apple Belgeleri'ne (2026) göre, AVPlayerViewController AVPlayer ve AVQueuePlayer ile uyumludur ve hem tek dosyaların hem de çalma listelerinin oynatılmasına olanak tanır. Yerel depolamadan URL'ler, HLS ağ akışları ve şifrelenmiş FairPlay içeriği desteklenir.

AVPlayerViewController Tarihçesi ve Sürümleri

Bileşen, iOS 8'de AVKit ile birlikte kullanımdan kaldırılan MPMoviePlayerController'ın yerini alarak ortaya çıktı. iOS 11'de Picture in Picture ve altyazı görüntüleme desteği eklendi. iOS 14'te denetleyici, AVPlayerViewControllerDelegate aracılığıyla özelleştirilebilir bir taşıma çubuğu aldı. iOS 16'dan itibaren, oynatıcıyı yeniden oluşturmadan dinamik medya dosyası değişimi desteği sunuldu.

Modern AVPlayerViewController, ProMotion ekranlar için optimize edilmiştir — video kare hızı otomatik olarak ekran yenileme hızıyla senkronize olur. tvOS'te bileşen, Siri Remote odak arayüzüne uyum sağlar ve macOS'te QuickTime Player pencere moduna uyum sağlar.

AVPlayerViewController Nasıl Çalışır

Denetleyicinin özünde AVPlayer ve AVPlayerItem eşleşmesi bulunur. AVPlayer, zaman çizelgesini, hızı ve durumu yöneten oynatma nesnesidir. AVPlayerItem, meta veriler, parçalar ve yükleme bilgileri içeren belirli bir medya dosyasının etrafındaki bir sarmalayıcıdır.

Başlatıldığında, AVPlayerViewController AVPlayer'a bir referans alır ve videoyu görüntülemek için otomatik olarak bir AVPlayerLayer oluşturur. Denetleyici, readyToPlay, yükleme hataları ve oynatma tamamlama gibi durum değişiklikleri hakkında AVPlayer KVO bildirimlerine abone olur.

Kontroller (taşıma çubuğu) ekrana dokunulduğunda görüntülenir. iOS 15+'te, AVPlayerViewControllerCustomizationDelegate aracılığıyla özelleştirmeyi destekleyerek standart düğmelerin gizlenmesine veya değiştirilmesine olanak tanır.

Denetleyici Yaşam Döngüsü

Denetleyici oluşturulup AVPlayer atandıktan sonra, video akışını hazırlamaya başlayan viewDidLoad yöntemi çağrılır. AVPlayerItem, AVPlayerItemStatusReadyToPlay durumuna geçtiğinde, oynatıcı kareleri görüntülemeye hazırdır. play() yöntemi çağrıldığında, Video Toolbox aracılığıyla video akışı kod çözme başlar.

Ekrandan ayrılırken, denetleyici otomatik olarak oynatmayı duraklatır ve kod çözücü kaynaklarını serbest bırakır. iOS 13+'te, uygulama küçültüldüğünde oynatmayı sürdürmek için Arka Plan Modları ve Ses Oturumu yapılandırılmalıdır. WWDC 2024'e göre, iOS medya merkeziyle senkronizasyon için AVPlayerPlaybackCoordinator kullanılması önerilir.

AVPlayerViewController'ın Temel Özellikleri

Bileşen, kullanıma hazır zengin bir özellik seti sağlar ve bu da onu çoğu proje için çekici kılar. Aşağıda ek kod gerektirmeyen temel yetenekler verilmiştir.

  • Taşıma çubuğu oynat/duraklat, 15 saniye atlama, ses kontrolü ve ilerleme kaydırıcısı ile.
  • Altyazı desteği — VTT, SRT ve iTunes Timed Text formatlarında gömülü ve harici altyazıların otomatik görüntülenmesi.
  • AirPlay — Apple TV ve diğer AirPlay uyumlu cihazlara video akışı yapma yeteneği.
  • Picture in Picture — özel bir düğmeye dokunulduğunda kayan bir pencerede oynatma (iPad ve iOS 14+ olan iPhone'da).
  • Tam ekran modu — cihaz döndürüldüğünde ve büyütme düğmesine dokunulduğunda otomatik geçiş.
  • Hız kontrolü — oynatma hızı seçimi için yerleşik kontrol (0,5x, 1,0x, 1,5x, 2,0x).
  • Korumalı içerik — DRM'li HLS içeriği için FairPlay Streaming yerel desteği.

AVPlayerViewController Taşıma Çubuğu

Taşıma çubuğu, ana kontrol düğmelerini içeren arayüzün alt kısmıdır. Varsayılan olarak, çubuk kullanıcının 3 saniye hareketsizliğinden sonra gizlenir ve dokunulduğunda görünür. iOS 16+'ta, tek tek öğelerin görünürlüğünü kontrol etmek için temsilci kullanılabilir.

Hata ayıklama modunda, AVPlayerViewController.requiresLinearPlayback özelliği kullanılarak taşıma çubuğu zorla gösterilebilir, bu da videonun duraklatılmasını da önler. Bu, reklam araları ve eğitim içeriği için kullanışlıdır.

AVPlayerViewController'ı Projenize Entegre Etme

Denetleyicinin temel entegrasyonu 10 satırdan fazla kod gerektirmez. İlk olarak, medya dosyası URL'si ile bir AVPlayer örneği oluşturun, ardından AVPlayerViewController'a iletin ve denetleyiciyi ekranda görüntüleyin.

Swift'te Temel Bir Oynatıcı Oluşturma

swift
import AVKit

let player = AVPlayer(url: URL(string: "https://example.com/video.mp4")!)
let playerVC = AVPlayerViewController()
playerVC.player = player

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

present çağrıldıktan sonra, denetleyici tam ekranda görüntülenir. Video ağdan yüklenmeye başlar ve arabellek readyToPlay eşiğine ulaştığında, play() çağrıldıktan sonra oynatma otomatik olarak başlar.

Gelişmiş Kontrol İçin AVPlayerItem Yapılandırma

swift
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)

let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "Videom"
item.addMetadata(metadata)

let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player

AVPlayerItem kullanmak, meta veriler, zaman kodları, ses parçası seçimi ve altyazılar üzerinde kontrol sağlar. AVPlayerItem aracılığıyla, status özelliğinde KVO kullanarak yükleme ilerlemesini, arabelleğe almayı ve ağ hatalarını da izleyebilirsiniz.

Kontrolleri Özelleştirme

iOS 11'den itibaren geliştiriciler, AVPlayerViewControllerDelegate protokolü aracılığıyla taşıma çubuğunu özelleştirebilir. playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) yöntemi, tam ekran moduna girmeden önce çağrılır ve kullanıcı arayüzünü hazırlamaya olanak tanır.

Tek tek düğmeleri gizlemek için AVPlayerViewController.showsPlaybackControls özelliğini kullanın. false olarak ayarlanırsa, taşıma çubuğu tamamen kaybolur ve yalnızca video akışı kalır. Özel kaplama öğeleri için kullanışlıdır.

Temsilci Kullanarak Özelleştirme

swift
class CustomPlayerViewController: UIViewController {
    private let playerVC = AVPlayerViewController()

    override func viewDidLoad() {
        super.viewDidLoad()
        playerVC.delegate = self
        playerVC.showsPlaybackControls = true
        playerVC.entersFullScreenWhenPlaybackBegins = true
    }
}

extension CustomPlayerViewController: AVPlayerViewControllerDelegate {
    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        willBeginFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator
    ) {
        // Kaplama düğmesi ekle
    }

    func playerViewController(
        _ playerViewController: AVPlayerViewController,
        didUpdate legibleMediaSelection: AVMediaSelectionGroup
    ) {
        print("Yeni altyazı dili seçildi")
    }
}

Temsilci, altyazı değişikliği olaylarını, tam ekran moduna girme ve çıkmayı ve ayrıca Picture in Picture'ın başlatılmasını ve bitirilmesini engellemeye olanak tanır. WWDC 2024'te Apple, analiz için temsilci kullanılmasını önerdi — her geçişi 100 ms içinde günlüğe kaydedin.

Altyazılar ve Ses Parçalarıyla Çalışma

AVPlayerViewController, medya dosyasına gömülüyse veya HLS manifestosunda belirtilmişse, mevcut tüm altyazıları ve ses parçalarını otomatik olarak görüntüler. Kullanıcılar, taşıma çubuğundaki altyazı simgesine dokunduklarında görüntülenen menü aracılığıyla bunları değiştirebilir.

HLS akışları için M3U8 manifestosu, mevcut dil çeşitlerinin bir listesini içerir. AVPlayer, ilgili WebVTT altyazı bölümlerini yükler ve işleme için AVPlayerLayer'a iletir. iOS 16+, AVTextStyleRule aracılığıyla altyazı stil desteği sundu.

Programlı Ses Parçası Seçimi

swift
func selectAudioTrack(languageCode: String) {
    guard let group = player.currentItem?
        .asset.mediaSelectionGroup(forMediaCharacteristic: AVMediaCharacteristic.audible)
    else { return }

    for option in group.options {
        if option.extendedLanguageTag?.hasPrefix(languageCode) == true {
            player.currentItem?.select(option, in: group)
        }
    }
}

selectAudioTrack yöntemi, audible grubunun ses seçenekleri arasında extendedLanguageTag'i istenen dil koduyla eşleşen çeşidi arar. Bu, çok dilli içeriğe sahip uygulamalarda “Orijinal Ses” özelliğini uygulamaya olanak tanır.

iPad'de Picture in Picture

Picture in Picture (PiP) modu, videonun diğer uygulamaların üzerinde kayan bir pencerede görüntülenmesine olanak tanır. iPad'de bu özellik iOS 9'dan beri, iPhone'da iOS 14'ten beri kullanılabilir. AVPlayerViewController, UIBackgroundModes'a abone olunduğunda taşıma çubuğuna otomatik olarak bir PiP düğmesi ekler.

PiP'yi etkinleştirmek için Info.plist'e audio ve airplay değerleriyle UIBackgroundModes anahtarını ekleyin. Bundan sonra, denetleyicide bir PiP düğmesi belirir ve dokunulduğunda videoyu 192x108 noktalı kayan bir pencereye küçültür.

PiP olayları temsilci aracılığıyla işlenir: playerViewController(_:willStartPictureInPictureFromFullScreen:) ve playerViewController(_:didStopPictureInPicture:). Apple HIG'ye göre, içerik okunabilirliğini korumak için PiP penceresinin minimum boyutu en az 120x68 nokta olmalıdır.

Sıkça Sorulan Sorular

AVPlayerViewController YouTube videolarının oynatılmasını destekliyor mu?

Hayır, YouTube videoları bir web görünümü WKWebView veya YouTube iOS Helper kitaplığının kullanılmasını gerektirir, çünkü YouTube kendi DRM sistemini kullanır. AVPlayerViewController, URL aracılığıyla doğrudan medya akışları için tasarlanmıştır.

AVPlayerViewController taşıma çubuğunu nasıl devre dışı bırakırım?

showsPlaybackControls özelliğini false olarak ayarlayın. Bundan sonra, ekran boş kalır — yalnızca video akışı. Özel düğmeleri geri getirmek için denetleyicinin üstüne addSubview aracılığıyla bir kaplama ekleyin.

AVPlayerViewController HLS canlı yayınlarla çalışır mı?

Evet, denetleyici HLS Live'ı tamamen destekler. Taşıma çubuğu, ilerleme kaydırıcısı yerine bir Canlı göstergesi gösterir. Gecikme, HLS yapılandırmasına bağlıdır — düşük gecikme ayarlarıyla minimum 6 saniye.

AVPlayerViewController'da video yükleme hatalarını nasıl ele alırım?

AVPlayerItem.status özelliğinde KVO'ya abone olun. Hata durumunda, durum .failed olarak değişir. AVPlayerItem'ın hata özelliği aracılığıyla ayrıntıları alın ve kullanıcıya sorunu açıklayan bir uyarı gösterin — genellikle bir ağ sorunu veya geçersiz URL'dir.

AVPlayerViewController'da bellekten video yükleyebilir miyim?

Evet, RAM'den veri beslemek için özel bir AVAssetResourceLoader ile AVAsset kullanın. AVAssetResourceLoaderDelegate'ı uygulayın ve diskten okumak yerine bir arabellekten bayt döndürün.

Özet

  • AVPlayerViewController, minimum entegrasyon koduyla iOS, iPadOS ve tvOS'ta video oynatma için hazır bir AVKit bileşenidir.
  • Denetleyici, HLS, MP4, korumalı FairPlay içeriği, altyazılar ve ses parçalarını kullanıma hazır olarak destekler.
  • Temel kullanım için, bir AVPlayer oluşturun ve denetleyiciye iletin — kullanıcı arayüzü otomatik olarak oluşturulur.
  • AVPlayerViewControllerDelegate, taşıma çubuğunu özelleştirmeye, PiP ve altyazı değişikliklerini işlemeye olanak tanır.
  • Taşıma çubuğu 3 saniye hareketsizlikten sonra gizlenir, ancak showsPlaybackControls görünürlüğü üzerinde tam kontrol sağlar.
  • Picture in Picture için Info.plist'te UIBackgroundModes audio ve airplay etkinleştirilmelidir.
  • Hatalar oluştuğunda, ayrıntıları almak ve kullanıcıya göstermek için AVPlayerItem.status'ta KVO kullanın.

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