AVPlayerViewController: bu nima, iOS-da integratsiya usullari

Muallif: IT Sectr Nashr etilgan: 2026-05-23 O'qish vaqti: 8 daq

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 — iOS va tvOS uchun AVKit freymvorkidan standart video ijro etish boshqaruvchisi.
  • U boshqaruv paneli, ijro etish tugmalari va borish ko‘rsatkichi bilan tayyor foydalanuvchi interfeysini taqdim etadi.
  • Boshqaruvchi avtomatik ravishda subtitrlar, audio treklar, AirPlay va Picture in Picture-ni qo‘llab-quvvatlaydi.
  • Integratsiya AVPlayer orqali amalga oshiriladi — ijro etishni boshqarish uchun asosiy obyekt.
  • Dasturchi boshqaruv elementlarining ko‘rinishini sozlashi, overlay-view qo‘shishi va hodisalarni delegat orqali qayta ishlashi mumkin.

AVPlayerViewController nima?

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.

AVPlayerViewController tarixi va versiyalari

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.

AVPlayerViewController qanday ishlaydi

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.

Boshqaruvchining hayot tsikli

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.

AVPlayerViewController-ning asosiy imkoniyatlari

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 play/pause, 15 soniya orqaga o‘rash, ovoz balandligi sozlagichi va borish siljitgichi bilan.
  • Subtitr qo‘llab-quvvatlashi — VTT, SRT va iTunes Timed Text formatlaridagi ichki va tashqi subtitrlarning avtomatik ko‘rsatilishi.
  • AirPlay — videoni Apple TV va boshqa AirPlay mos qurilmalarga uzatish imkoniyati.
  • Picture in Picture — maxsus tugma bosilganda suzuvchi oynada ijro etish (iOS 14+ bo‘lgan iPad va iPhone-da).
  • To‘liq ekran rejimi — qurilma aylantirilganda va kattalashtirish tugmasiga tegilganda avtomatik o‘tish.
  • Tezlikni o‘zgartirish — o‘rnatilgan ijro tezligini tanlash boshqaruvchisi (0.5x, 1.0x, 1.5x, 2.0x).
  • Himoyalangan kontent — DRM bilan HLS kontenti uchun FairPlay Streaming-ning mahalliy qo‘llab-quvvatlashi.

AVPlayerViewController transport paneli

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.

AVPlayerViewController-ni loyihaga integratsiyalash

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.

Swift-da asosiy pleyerni yaratish

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 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.

Rivojlangan boshqarish uchun AVPlayerItem sozlash

swift
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.

Boshqaruv elementlarini sozlash

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.

Delegat yordamida sozlash

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
    ) {
        // 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.

Subtitrlar va audio treklar bilan ishlash

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.

Audio trekni dasturiy tanlash

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 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.

iPad-da Picture in Picture

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

AVPlayerViewController YouTube videolarini ijro etishni qo‘llab-quvvatlaydimi?

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.

AVPlayerViewController transport panelini qanday o‘chirish mumkin?

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.

AVPlayerViewController HLS jonli efirlari bilan ishlaydimi?

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.

AVPlayerViewController-da video yuklash xatosini qanday boshqarish kerak?

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.

AVPlayerViewController-da videoni xotiradan yuklash mumkinmi?

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

  • AVPlayerViewController — minimal integratsiya kodi bilan iOS, iPadOS va tvOS-da video ijro etish uchun tayyor AVKit komponenti.
  • Boshqaruvchi HLS, MP4, himoyalangan FairPlay kontenti, subtitrlar va audio treklarni qutidan chiqqanday qo‘llab-quvvatlaydi.
  • Asosiy foydalanish uchun AVPlayer yaratish va uni boshqaruvchiga uzatish kifoya — UI avtomatik chiziladi.
  • AVPlayerViewControllerDelegate delegati transport panelini sozlash, PiP va subtitr o‘zgarishini boshqarish imkonini beradi.
  • Transport paneli 3 soniya harakatsizlikdan so‘ng yashirinadi, ammo showsPlaybackControls uning ko‘rinishi ustidan to‘liq nazorat beradi.
  • Picture in Picture uchun Info.plist-da UIBackgroundModes audio va airplay faollashtirilishi talab qilinadi.
  • Xato paytida tafsilotlarni olish va foydalanuvchiga ko‘rsatish uchun AVPlayerItem.status da KVO dan foydalaning.

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.

Loyihani muhokama qilish

Shuningdek o'qing