AVPlayerViewController — Apple ekosistemində iOS və tvOS-da media məzmununu oxutmaq üçün nəzərdə tutulmuş daxili video pleyer kontrolleridir. O, xüsusi UI yazmağa ehtiyac olmadan tam ekran interfeysi, idarəetmə elementləri, altyazı dəstəyi və AirPlay təmin edir. Apple Developer Documentation, 2026-ya görə, AVPlayerViewController bir neçə sətir kodla inteqrasiya olunur və HLS, MP4 və əksər media formatlarını dəstəkləyir.
Əsas məqamlar
AVPlayerViewController — Apple tətbiqlərində video oxutmaq üçün hazır interfeys təmin edən AVKit freymvorkunun komponentidir. O, tərtibatçını sıfırdan xüsusi pleyer yaratmaq zərurətindən azad edərək standart idarəetmə elementləri təklif edir: play/pause, geri sarma, səs tənzimlənməsi və tam ekran rejimi.
Əl ilə UI qurmağı tələb edən aşağı səviyyəli AVPlayerLayer-dən fərqli olaraq, AVPlayerViewController pleyerin həyat dövrünü tam idarə edir. Kontroller avtomatik olaraq ekranın dönməsini idarə edir, kəsikli iPhone-da Safe Area-ya uyğunlaşır və iPad-də çoxtapşırıqlığı dəstəkləyir.
Apple Documentation (2026)-ya görə, AVPlayerViewController AVPlayer və AVQueuePlayer ilə uyğunlaşır, həm tək faylları, həm də pleylistləri oxutmağa imkan verir. Yerli yaddaşdan URL-lər, HLS şəbəkə axınları və şifrələnmiş FairPlay məzmunu dəstəklənir.
Komponent iOS 8-də AVKit ilə birlikdə köhnəlmiş MPMoviePlayerController-ın əvəzi olaraq meydana çıxdı. iOS 11-də Picture in Picture dəstəyi və altyazıların göstərilməsi əlavə edildi. iOS 14-də kontroller AVPlayerViewControllerDelegate deleqatı vasitəsilə fərdiləşdirilə bilən nəqliyyat paneli aldı. iOS 16-dan başlayaraq, pleyeri yenidən yaratmadan media faylının dinamik dəyişdirilməsi dəstəyi ortaya çıxdı.
Müasir AVPlayerViewController ProMotion displeyləri üçün optimallaşdırılıb — video kadr sürəti avtomatik olaraq ekran yenilənmə tezliyi ilə sinxronlaşır. tvOS-da komponent Siri Remote fokus interfeysinə, macOS-da isə QuickTime Player pəncərə rejiminə uyğunlaşır.
Kontrollerin əsasında AVPlayer və AVPlayerItem əlaqəsi dayanır. AVPlayer — zaman xəttini, sürəti və vəziyyəti idarə edən oxutma obyektidir. AVPlayerItem — metadatları, trekləri və yükləmə məlumatlarını ehtiva edən konkret media faylının üzərindəki qabıqdır.
İnisiallaşdırma zamanı AVPlayerViewController AVPlayer-a istinad alır və videonu göstərmək üçün avtomatik olaraq AVPlayerLayer yaradır. Kontroller AVPlayer-ın readyToPlay status dəyişikliyi, yükləmə xətaları və oxutmanın bitməsi barədə KVO bildirişlərinə abunə olur.
İdarəetmə elementləri (nəqliyyat paneli) ekrana toxunmaqla göstərilir. iOS 15+-də onlar AVPlayerViewControllerCustomizationDelegate vasitəsilə konfiqurasiyanı dəstəkləyərək standart düymələri gizlətməyə və ya əvəz etməyə imkan verir.
Kontroller yaradıldıqdan və AVPlayer təyin edildikdən sonra video axınının hazırlanmasını işə salan viewDidLoad metodu çağırılır. AVPlayerItem AVPlayerItemStatusReadyToPlay statusuna keçdikdə, pleyer kadrları göstərməyə hazırdır. Play() metodu çağırıldıqda Video Toolbox vasitəsilə video axınının dekodlanması başlayır.
Ekrandan çıxarkən kontroller avtomatik olaraq oxutmanı dayandırır və dekoder resurslarını azad edir. iOS 13+-də tətbiq kiçildildikdə oxutmanı qorumaq üçün Background Modes və Audio Session konfiqurasiyası tələb olunur. WWDC 2024-ə görə, iOS media mərkəzi ilə sinxronizasiya üçün AVPlayerPlaybackCoordinator-dan istifadə etmək tövsiyə olunur.
Komponent qutudan çıxan kimi zəngin funksiyalar dəsti təmin edir ki, bu da onu əksər layihələr üçün cəlbedici edir. Aşağıda əlavə kod tələb etməyən əsas imkanlar verilmişdir.
Nəqliyyat paneli — əsas idarəetmə düymələrini ehtiva edən interfeysin aşağı hissəsidir. Standart olaraq panel istifadəçi hərəkətsizliyindən 3 saniyə sonra gizlənir və toxunmaqla görünür. iOS 16+-da deleqat vasitəsilə ayrı-ayrı elementlərin görünməsini idarə etmək olar.
Debug rejimində nəqliyyat paneli AVPlayerViewController.requiresLinearPlayback xassəsi vasitəsilə məcburi göstərilə bilər, bu da videonu dayandırmaq imkanını bloklayır. Bu reklam əlavələri və təhsil məzmunu üçün faydalıdır.
Kontrollerin əsas inteqrasiyası 10 sətir koddan çox çəkmir. Əvvəlcə media faylının URL-i ilə AVPlayer nümunəsi yaratmaq, sonra onu AVPlayerViewController-a ötürmək və kontrolleri ekranda göstərmək lazımdır.
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ıqdan sonra kontroller tam ekranda göstərilir. Video şəbəkədən yüklənməyə başlayır və bufer readyToPlay həddinə çatdıqda, play() çağırıldıqdan sonra avtomatik olaraq oxutma başlayır.
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)
let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "Mənim videom"
item.addMetadata(metadata)
let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player
AVPlayerItem-dan istifadə metadatlar, vaxt kodları, audio trek və altyazı seçimi üzərində nəzarət verir. AVPlayerItem vasitəsilə həmçinin status xassəsində KVO ilə yükləmə gedişatını, buferləməni və şəbəkə xətalarını izləmək olar.
iOS 11-dən başlayaraq tərtibatçı AVPlayerViewControllerDelegate protokolu vasitəsilə nəqliyyat panelini konfiqurasiya edə bilər. playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) metodu tam ekran rejiminə girməzdən əvvəl çağırılır və UI hazırlamağa imkan verir.
Ayrı-ayrı düymələri gizlətmək üçün AVPlayerViewController.showsPlaybackControls xassəsindən istifadə olunur. Onu false-a təyin etsəniz, nəqliyyat paneli tamamilə yox olur və yalnız video axını qalır. Xüsusi overlay elementləri üçün faydalıdır.
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
) {
// Overlay düyməsi əlavə et
}
func playerViewController(
_ playerViewController: AVPlayerViewController,
didUpdate legibleMediaSelection: AVMediaSelectionGroup
) {
print("Yeni altyazı dili seçildi")
}
}
Deleqat altyazı dəyişməsi, tam ekran rejiminə girmə və çıxma, həmçinin Picture in Picture-in başlanması və bitməsi hadisələrini tutmağa imkan verir. WWDC 2024-də Apple analitika üçün deleqatdan istifadə etməyi tövsiyə etdi — hər keçidi 100 ms-ə qədər loglamaq.
AVPlayerViewController media faylına daxil edilmiş və ya HLS manifestində göstərilmiş bütün mövcud altyazıları və audio trekləri avtomatik göstərir. İstifadəçi onları nəqliyyat panelində altyazı ikonasına toxunmaqla açılan menyu vasitəsilə dəyişə bilər.
HLS axınları üçün M3U8 manifesti mövcud dil variantlarının siyahısını ehtiva edir. AVPlayer WebVTT formatında müvafiq altyazı seqmentlərini yükləyir və onları AVPlayerLayer vasitəsilə renderə ötürür. iOS 16+-da AVTextStyleRule vasitəsilə altyazı stilizasiyası dəstəyi ortaya çıxdı.
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 metodu audiable qrupunun audio seçimləri arasında extendedLanguageTag-ı tələb olunan dil kodu ilə uyğun gələn variantı axtarır. Bu, çoxdilli məzmunu olan tətbiqlərdə "Orijinal səsləndirmə" funksiyasını həyata keçirməyə imkan verir.
Picture in Picture (PiP) rejimi videonu digər tətbiqlərin üstündə üzən pəncərədə göstərməyə imkan verir. iPad-də bu funksiya iOS 9-dan, iPhone-da iOS 14-dən etibarən mövcuddur. AVPlayerViewController UIBackgroundModes abunəliyi olduqda nəqliyyat panelinə avtomatik olaraq PiP düyməsini əlavə edir.
PiP-ni aktivləşdirmək üçün Info.plist-də UIBackgroundModes açarını audio və airplay dəyəri ilə əlavə etmək lazımdır. Bundan sonra kontrollerdə PiP düyməsi görünür, basdıqda video 192x108 nöqtə ölçüsündə üzən pəncərəyə yığışır.
PiP hadisələri deleqat vasitəsilə emal olunur: playerViewController(_:willStartPictureInPictureFromFullScreen:) və playerViewController(_:didStopPictureInPicture:). Apple HIG-ə görə, məzmunun oxunaqlılığını qorumaq üçün PiP pəncərəsinin minimum ölçüsü ən azı 120x68 nöqtə olmalıdır.
Tez-tez verilən suallar
Xeyr, YouTube videoları üçün web-view WKWebView və ya YouTube iOS Helper kitabxanası tələb olunur, çünki YouTube öz DRM sistemindən istifadə edir. AVPlayerViewController birbaşa media axınları üçün nəzərdə tutulub.
showsPlaybackControls xassəsini false olaraq təyin edin. Bundan sonra ekran boş qalır — yalnız video axını. Xüsusi düymələri qaytarmaq üçün kontrollerin üzərinə addSubview vasitəsilə overlay əlavə edin.
Bəli, kontroller HLS Live-ı tam dəstəkləyir. Nəqliyyat panelində gedişat sürgüsü əvəzinə Live göstəricisi göstərilir. Gecikmə HLS konfiqurasiyasından asılıdır — aşağı gecikmə parametrlərində minimum 6 saniyə.
AVPlayerItem.status xassəsinin KVO-suna abunə olun. Xəta olduqda status .failed-ə dəyişir. AVPlayerItem-ın error xassəsi vasitəsilə detalları əldə edin və istifadəçiyə izahat ilə alert göstərin — çox vaxt problem şəbəkədə və ya yanlış URL-də olur.
Bəli, operativ yaddaşdan məlumat vermək üçün xüsusi AVAssetResourceLoader ilə AVAsset-dən istifadə edin. AVAssetResourceLoaderDelegate deleqatını tətbiq edin və diskdən oxumaq əvəzinə buferdən baytları qaytarın.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun