AVPlayerViewController — Apple ekotizimida iOS va tvOS-da media kontentini ijro etish uchun mo‘ljallangan o‘rnatilgan video pleyer boshqaruvchisi. U maxsus UI yozish zaruratisiz to‘liq ekran interfeysi, boshqaruv elementlari, subtitrlar va AirPlay-ni qo‘llab-quvvatlaydi. Apple Developer Documentation, 2026 ma’lumotlariga ko‘ra, AVPlayerViewController bir necha qator kod bilan integratsiyalanadi va HLS, MP4 hamda aksariyat media formatlarini qo‘llab-quvvatlaydi.
Asosiy fikrlar
AVPlayerViewController — Apple ilovalarida video ijro etish uchun tayyor interfeysni taqdim etuvchi AVKit freymvorkining komponenti. U dasturchini noldan maxsus pleyer yaratish zaruratidan xalos qiladi, standart boshqaruv elementlarini taklif etadi: play/pause, orqaga o‘rash, ovoz balandligini sozlash va to‘liq ekran rejimi.
Qo‘lda UI qurishni talab qiluvchi past darajadagi AVPlayerLayer-dan farqli o‘laroq, AVPlayerViewController pleyerning hayot tsiklini to‘liq boshqaradi. Boshqaruvchi avtomatik ravishda ekran aylanishini qayta ishlaydi, kesilgan iPhone-da Safe Area-ga moslashadi va iPad-da ko‘p vazifalilikni qo‘llab-quvvatlaydi.
Apple Documentation (2026) ma’lumotlariga ko‘ra, AVPlayerViewController AVPlayer va AVQueuePlayer bilan mos keladi, bu ham yakka fayllarni, ham pleylistlarni ijro etish imkonini beradi. Mahalliy saqlashdagi URL-lar, HLS tarmoq oqimlari va shifrlangan FairPlay kontenti qo‘llab-quvvatlanadi.
Komponent iOS 8-da AVKit bilan birga eskirgan MPMoviePlayerController o‘rniga paydo bo‘ldi. iOS 11-da Picture in Picture qo‘llab-quvvatlashi va subtitrlarni ko‘rsatish qo‘shildi. iOS 14-da boshqaruvchi AVPlayerViewControllerDelegate delegati orqali sozlanishi mumkin bo‘lgan transport panelini oldi. iOS 16-dan boshlab, pleyerni qayta yaratmasdan media faylni dinamik almashtirish qo‘llab-quvvatlashi paydo bo‘ldi.
Zamonaviy AVPlayerViewController ProMotion displeylari uchun optimallashtirilgan — video kadr tezligi avtomatik ravishda ekran yangilanish tezligi bilan sinxronlanadi. tvOS-da komponent Siri Remote fokus interfeysiga, macOS-da esa QuickTime Player oyna rejimiga moslashadi.
Boshqaruvchining asosida AVPlayer va AVPlayerItem bog‘lanishi yotadi. AVPlayer — vaqt chizig‘i, tezlik va holatni boshqaruvchi ijro etish obyekti. AVPlayerItem — metama’lumotlar, treklar va yuklash ma’lumotlarini o‘z ichiga olgan aniq media faylining qobig‘i.
Initsializatsiya paytida AVPlayerViewController AVPlayer-ga havola oladi va videoni ko‘rsatish uchun avtomatik ravishda AVPlayerLayer yaratadi. Boshqaruvchi AVPlayer-ning readyToPlay holati o‘zgarishi, yuklash xatolari va ijro etish tugashi haqidagi KVO bildirishnomalariga obuna bo‘ladi.
Boshqaruv elementlari (transport paneli) ekranga tegish bilan ko‘rsatiladi. iOS 15+ da ular AVPlayerViewControllerCustomizationDelegate orqali sozlashni qo‘llab-quvvatlab, standart tugmalarni yashirish yoki almashtirish imkonini beradi.
Boshqaruvchi yaratilgandan va AVPlayer tayinlangandan so‘ng, video oqimini tayyorlashni boshlaydigan viewDidLoad metodi chaqiriladi. AVPlayerItem AVPlayerItemStatusReadyToPlay holatiga o‘tganda, pleyer kadrlarni ko‘rsatishga tayyor bo‘ladi. Play() metodi chaqirilganda Video Toolbox orqali video oqimining dekodlanishi boshlanadi.
Ekrandan chiqishda boshqaruvchi avtomatik ravishda ijro etishni to‘xtatadi va dekoder resurslarini bo‘shatadi. iOS 13+ da ilovani kichiklashtirishda ijro etishni saqlash uchun Background Modes va Audio Session sozlanishi talab qilinadi. WWDC 2024 ma’lumotlariga ko‘ra, iOS media markazi bilan sinxronlash uchun AVPlayerPlaybackCoordinator-dan foydalanish tavsiya etiladi.
Komponent qutidan chiqqanday boy funksiyalar to‘plamini taqdim etadi, bu uni aksariyat loyihalar uchun jozibador qiladi. Quyida qo‘shimcha kod talab qilmaydigan asosiy imkoniyatlar keltirilgan.
Transport paneli — asosiy boshqaruv tugmalarini o‘z ichiga olgan interfeysning pastki qismidir. Odatiy bo‘lib, panel foydalanuvchi harakatsizligidan 3 soniya o‘tgach yashirinadi va tegilganda paydo bo‘ladi. iOS 16+ da delegat orqali alohida elementlarning ko‘rinishini boshqarish mumkin.
Debug rejimida transport paneli AVPlayerViewController.requiresLinearPlayback xususiyati orqali majburiy ko‘rsatilishi mumkin, bu esa videoni pauza qilish imkoniyatini bloklaydi. Bu reklama qo‘shimchalari va ta’lim kontenti uchun foydali.
Boshqaruvchining asosiy integratsiyasi 10 qatordan ko‘p kod talab qilmaydi. Avval media fayl URL-i bilan AVPlayer namunasi yaratiladi, so‘ngra u AVPlayerViewController-ga uzatiladi va boshqaruvchi ekranda ko‘rsatiladi.
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 chaqirilgandan so‘ng boshqaruvchi to‘liq ekranda ko‘rsatiladi. Video tarmoqdan yuklana boshlaydi va bufer readyToPlay chegarasiga yetganda, play() chaqirilgandan so‘ng avtomatik ravishda ijro boshlanadi.
let asset = AVAsset(url: videoURL)
let item = AVPlayerItem(asset: asset)
let metadata = AVMutableMetadataItem()
metadata.key = AVMetadataKey.commonKeyTitle
metadata.value = "Mening videom"
item.addMetadata(metadata)
let player = AVPlayer(playerItem: item)
let playerVC = AVPlayerViewController()
playerVC.player = player
AVPlayerItem-dan foydalanish metama’lumotlar, vaqt kodlari, audio trek va subtitr tanlash ustidan nazorat beradi. AVPlayerItem orqali shuningdek status xususiyatidagi KVO yordamida yuklash borishini, buferlashni va tarmoq xatolarini kuzatish mumkin.
iOS 11 dan boshlab dasturchi AVPlayerViewControllerDelegate protokoli orqali transport panelini sozlashi mumkin. playerViewController(_:willBeginFullScreenPresentationWithAnimationCoordinator:) metodi to‘liq ekran rejimiga kirishdan oldin chaqiriladi va UI tayyorlash imkonini beradi.
Alohida tugmalarni yashirish uchun AVPlayerViewController.showsPlaybackControls xususiyati ishlatiladi. Agar uni false ga o‘rnatilsa, transport paneli butunlay yo‘qoladi, faqat video oqimi qoladi. Maxsus overlay elementlari uchun foydali.
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 tugmasini qo'shish
}
func playerViewController(
_ playerViewController: AVPlayerViewController,
didUpdate legibleMediaSelection: AVMediaSelectionGroup
) {
print("Yangi subtitr tili tanlandi")
}
}
Delegat subtitr o‘zgarishi, to‘liq ekran rejimiga kirish va chiqish, shuningdek Picture in Picture-ning boshlanishi va tugashi hodisalarini tutish imkonini beradi. WWDC 2024 da Apple analitika uchun delegatdan foydalanishni tavsiya etdi — har bir o‘tishni 100 ms gacha loglash.
AVPlayerViewController media fayliga kiritilgan yoki HLS manifestida ko‘rsatilgan barcha mavjud subtitrlar va audio treklarni avtomatik ko‘rsatadi. Foydalanuvchi ularni transport panelidagi subtitr belgisiga tegish bilan ochiladigan menyu orqali o‘zgartirishi mumkin.
HLS oqimlari uchun M3U8 manifesti mavjud til variantlari ro‘yxatini o‘z ichiga oladi. AVPlayer WebVTT formatidagi tegishli subtitr segmentlarini yuklaydi va ularni AVPlayerLayer orqali renderlashga uzatadi. iOS 16+ da AVTextStyleRule orqali subtitr stilizatsiyasi qo‘llab-quvvatlashi paydo bo‘ldi.
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 metodi audiable guruhining audio variantlari orasida extendedLanguageTag-i kerakli til kodiga mos keladigan variantni qidiradi. Bu ko‘p tilli kontentli ilovalarda “Asl ovoz” funksiyasini amalga oshirish imkonini beradi.
Picture in Picture (PiP) rejimi videoni boshqa ilovalar ustida suzuvchi oynada ko‘rsatish imkonini beradi. iPad-da bu funksiya iOS 9 dan, iPhone-da iOS 14 dan mavjud. AVPlayerViewController UIBackgroundModes obunasi mavjud bo‘lganda transport paneliga avtomatik ravishda PiP tugmasini qo‘shadi.
PiP-ni faollashtirish uchun Info.plist-da UIBackgroundModes kalitini audio va airplay qiymati bilan qo‘shish kerak. Shundan so‘ng boshqaruvchida PiP tugmasi paydo bo‘ladi, bosilganda video 192x108 nuqta o‘lchamidagi suzuvchi oynaga yig‘iladi.
PiP hodisalari delegat orqali qayta ishlanadi: playerViewController(_:willStartPictureInPictureFromFullScreen:) va playerViewController(_:didStopPictureInPicture:). Apple HIG ga ko‘ra, kontentning o‘qilishini saqlash uchun PiP oynasining minimal o‘lchami kamida 120x68 nuqta bo‘lishi kerak.
Tez-tez so‘raladigan savollar
Yo‘q, YouTube videolari uchun web-view WKWebView yoki YouTube iOS Helper kutubxonasi talab qilinadi, chunki YouTube o‘zining DRM tizimidan foydalanadi. AVPlayerViewController to‘g‘ridan-to‘g‘ri URL orqali media oqimlari uchun mo‘ljallangan.
showsPlaybackControls xususiyatini false ga o‘rnating. Shundan so‘ng ekran bo‘sh qoladi — faqat video oqimi. Maxsus tugmalarni qaytarish uchun boshqaruvchi ustiga addSubview orqali overlay qo‘shing.
Ha, boshqaruvchi HLS Live-ni to‘liq qo‘llab-quvvatlaydi. Transport panelida borish siljitgichi o‘rniga Live ko‘rsatkichi ko‘rsatiladi. Kechikish HLS konfiguratsiyasiga bog‘liq — low-latency sozlamalarida minimal 6 soniya.
AVPlayerItem.status xususiyatining KVO-siga obuna bo‘ling. Xato bo‘lganda status .failed ga o‘zgaradi. AVPlayerItem-ning error xususiyati orqali tafsilotlarni oling va foydalanuvchiga tushuntirish bilan alert ko‘rsating — ko‘pincha muammo tarmoqda yoki noto‘g‘ri URL-da bo‘ladi.
Ha, RAM dan ma’lumot berish uchun maxsus AVAssetResourceLoader bilan AVAsset-dan foydalaning. AVAssetResourceLoaderDelegate delegatini amalga oshiring va diskdan o‘qish o‘rniga buferdan baytlarni qaytaring.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.