AVPlayer — asosiy tushunchalar, imkoniyatlar va foydalanish

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

AVPlayer — Apple tomonidan ishlab chiqilgan, AVFoundation tarkibiga kiruvchi va iOS, macOS, tvOS hamda visionOS platformalarida audio va video tinglashni ta'minlovchi media pleer freymvorkidir. AVPlayer mahalliy MP4 fayllaridan adaptiv HLS oqimlarigacha keng formatlar spektrini yagona API orqali Apple Silicon chiplarida apparat tezlashtirilgan dekodlash bilan qo'llab-quvvatlaydi. Apple WWDC (2024) ma'lumotlariga ko'ra, AVPlayer media bilan ishlaydigan iOS ilovalarining 90 foizida, jumladan Apple TV, Music va Photos dasturlarida qo'llaniladi.

Asosiy ma'lumotlar

  • AVPlayer — Apple-ning barcha platformalari uchun AVFoundation tarkibidagi media pleer freymvorkidir.
  • Apparat tezlashtirish — AVPlayer GPUda dekodlash uchun VideoToolbox-dan foydalanadi, energiya sarfini kamaytiradi.
  • HLS — avtomatik adaptiv bitrate almashinuvi bilan HTTP Live Streaming uchun mahalliy qo'llab-quvvatlash.
  • Picture in Picture — iPad, iPhone va Macda „rasm ichida rasm" rejimi uchun o'rnatilgan qo'llab-quvvatlash.
  • DRM — premium kontentni himoya qilish uchun FairPlay Streaming bilan integratsiya.

AVPlayer nima?

AVPlayer — AVFoundation freymvorkining markaziy komponenti bo'lib, Apple-ning barcha platformalarida multimedia kontentini tinglash uchun javobgardir. iOS 4.0 (2010) da eskirgan MPMoviePlayerController o'rniga taqdim etilgan AVPlayer, dekodlash parametrlarini nozik sozlash, audio va video sinxronizatsiyasi, shuningdek AirPlay va Picture in Picture kabi tizim xizmatlari bilan integratsiya imkoniyati bilan tinglash ustida past darajali nazoratni ta'minlaydi.

Uchinchi tomon pleerlaridan farqli o'laroq, AVPlayer Apple Silicon chiplarida apparat tezlashtirishning afzalliklariga ega. Video dekodlash M-seriyasining maxsus media mexanizmlaridan (Media Engine) foydalangan holda VideoToolbox orqali amalga oshiriladi, bu minimal energiya sarfi bilan 8K HDR tinglashni ta'minlaydi. HEVC (H.265) va ProRes uchun dekodlash CPU ni yuklamasdan chipning ixtisoslashgan bloklarida amalga oshiriladi.

AVPlayer Apple ekotizimi bilan chambarchas integratsiyalangan: qurilmalar o'rtasida tinglashni uzatish uchun Handoff, Apple TV ga striming uchun AirPlay 2, boshning dinamik kuzatuvi bilan fazoviy tovush va MPNowPlayingInfoCenter orqali tizim boshqaruv elementlari bilan sinxronizatsiya. Ushbu integratsiyalar AVPlayer-ni Apple platformalarida media bilan ishlaydigan barcha ilovalar uchun de-fakto standartga aylantiradi.

AVFoundation va sinf iyerarxiyasi

AVFoundation freymvorki tinglash uchun uch darajali iyerarxiyani ta'minlaydi: AVAsset (metama'lumotlar va kontent haqida ma'lumot), AVPlayerItem (holat va kontentning ma'lum bir nusxasini boshqarish) va AVPlayer (tinglashni boshqarish). Ushbu arxitektura metama'lumotlarni yuklash, tinglashga tayyorgarlik va tinglash jarayonining o'zini ajratish imkonini beradi, bu ko'p bitrate variantlari bo'lgan HLS oqimlari uchun ayniqsa muhimdir.

AVAsset media kontent — fayl yoki oqim modelini ifodalaydi. AVAsset o'z-o'zidan tinglab bo'lmaydi; u treklarni (AVAssetTrack), metama'lumotlarni (commonMetadata), davomiylik haqidagi ma'lumotni va boshqa xususiyatlarni o'z ichiga oladi. AVAsset dan AVPlayerItem yaratiladi, keyin u tinglash uchun AVPlayer ga uzatilishi mumkin.

AVPlayer-ning asosiy imkoniyatlari

AVPlayer oddiy fayl tinglashdan tortib DRM bilan murakkab jonli translyatsiyalargacha bo'lgan aksariyat tinglash stsenariylarini qamrab oluvchi imkoniyatlar to'plamini taqdim etadi. Keling, asosiy funksiyalarni ularni qo'llash misollari bilan ko'rib chiqaylik.

ImkoniyatTavsifPlatformalar
Mahalliy fayllarMP4, MOV, M4V, AVI, MKV (kengaytmalar orqali)iOS, macOS, tvOS
HLSAdaptiv ABR bilan HTTP Live StreamingBarcha Apple platformalari
FairPlay DRMOqim litsenziyasi bilan himoyalangan HLS kontentiiOS, tvOS, macOS
Picture in PictureBoshqa ilovalar ustidagi suzuvchi video oynaiPad, iPhone (iOS 14+), Mac
AirPlay 2Apple TV va dinamiklarga simsiz uzatishBarcha platformalar
Fazoviy tovushDolby Atmos va dinamik kuzatuviOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG (displey qo'llab-quvvatlashi bilan)iOS 11+, macOS 10.13+

HLS qo'llab-quvvatlashi va adaptiv almashinuv

AVPlayer qo'shimcha kutubxonalar o'rnatmasdan HLS uchun mahalliy qo'llab-quvvatlashga ega. HLS oqimini tinglashda AVPlayer Apple platformalari uchun optimallashtirilgan o'rnatilgan ABR algoritmidan foydalanib, adaptiv bitrate almashinuvini avtomatik boshqaradi. Algoritm nafaqat tarmoq o'tkazish qobiliyatini, balki qurilmaning termal holatini ham hisobga oladi — haddan tashqari qizib ketganda, AVPlayer protsessor yukini kamaytirish uchun bitrate-ni pasaytirishi mumkin.

FairPlay Streaming bilan HLS oqimlari uchun AVPlayer AVContentKeySession delegati orqali litsenziyalarni olish va yangilashni avtomatik boshqaradi. Dasturchi AVContentKeySessionDelegate protokolini amalga oshirishi kerak, bu pleer shifrlash kalitini olish yoki yangilash zarur bo'lganda chaqiriladi. Bu Apple platformalarida HLS kontentini himoya qilishning yagona usuli, chunki Widevine iOS da qo'llab-quvvatlanmaydi.

Picture in Picture

PiP — foydalanuvchiga ilovalar o'rtasida almashishda suzuvchi oynada video tomosha qilishni davom ettirish imkonini beruvchi rejim. iPad va iPhone da (iOS 14+) AVPlayer ushbu rejimni yoqish uchun AVPictureInPictureController bilan integratsiyalanadi. macOS 15+ da PiP ham mavjud, ammo tizim menyusi yoki pleer oynasidagi tugma orqali faollashtiriladi.

iOS ilovasida AVPlayer-dan qanday foydalanish kerak

AVPlayer ni iOS ilovasiga integratsiya qilish ikki usulda amalga oshirilishi mumkin: yuqori darajadagi AVPlayerViewController orqali (odatiy stsenariylar uchun) yoki to'g'ridan-to'g'ri AVPlayer + AVPlayerLayer orqali (interfeysni to'liq moslashtirish uchun). Keling, ikkala yondashuvni Swift da ko'rib chiqaylik.

AVPlayerViewController orqali integratsiya

AVPlayerViewController — o'rnatilgan boshqaruv elementlarini ta'minlovchi tayyor UI komponenti: play/pause, orqaga o'rash, tovush, AirPlay, PiP va to'liq ekran rejimi. Minimal integratsiya atigi bir necha qator kodni talab qiladi: AVPlayer nusxasini yaratish, uni AVPlayerViewController ga uzatish va boshqaruvchini ekranda ko'rsatish.

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 orqali to'g'ridan-to'g'ri integratsiya

Maxsus UI ga ega ilovalar uchun AVPlayerLayer — istalgan UIView ichida video renderlovchi Core Animation qatlamidan foydalaning. Ushbu yondashuv interfeys ustidan to'liq nazorat beradi: o'zingizning boshqaruv elementlaringizni, animatsiyalaringizni va video ustiga qo'shimcha qatlamlarni qo'shishingiz mumkin.

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

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

AVPlayer hayotiy sikli bilan boshqaruv

Pleer hayotiy siklini to'g'ri boshqarish ilova barqarorligi uchun muhim ahamiyatga ega. AVPlayer ekran paydo bo'lganda yaratilishi va yopilganda bo'shatilishi kerak. Ilova fon rejimiga o'tganda, resurslarni tejash va aniq zaruratsiz fon tinglash uchun App Review jarimalaridan qochish uchun tinglashni to'xtatib turish tavsiya etiladi.

AVPlayerLayer va video ko'rsatish

AVPlayerLayer — CALayer dan meros olgan, ekranda video renderini ta'minlovchi Core Animation qatlamidir. UIView dan farqli o'laroq, AVPlayerLayer to'g'ridan-to'g'ri GPU bilan Metal yoki OpenGL orqali ishlaydi, kadr chiqishining minimal kechikishini ta'minlaydi. AVPlayerLayer ishlashini tushunish maxsus tinglash interfeyslarini amalga oshirish uchun zarur.

videoGravity sozlamasi

videoGravity xususiyati videoning qatlam chegaralariga qanday moslashishini aniqlaydi. AVLayerVideoGravity.resizeAspect (qora chiziqlar bilan nisbatlarni saqlash) — AVPlayerViewController uchun standart qiymat. resizeAspectFill (kesish bilan butun ekranni to'ldirish) to'liq ekran rejimi uchun ishlatiladi. resize (qatlam o'lchamiga nisbatlarni buzish) kamdan-kam, asosan analitik ilovalar uchun qo'llaniladi.

Asosiy oqim bilan sinxronizatsiya

AVPlayerLayer videoni real vaqtda renderlaydi, ammo pleer bilan barcha operatsiyalar (start, pause, seek) asosiy oqimda bajarilishi kerak. Kuzatish uchun asosiy qiymatlar — timeControlStatus, rate, status va error — KVO (Key-Value Observing) yoki iOS 16 da Swift Concurrency qo'llab-quvvatlashi bilan AVPlayer metodlari orqali taqdim etilgan zamonaviy async/await API orqali kuzatiladi.

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

Subtitrlar va muqobil treklarni qo'llab-quvvatlash

AVPlayer VTT, CEA-608 va ITT (iTunes Timed Text) formatlarida o'rnatilgan subtitrlarni qo'llab-quvvatlaydi. Audio trek va subtitrlarni tanlash AVMediaSelectionGroup va AVMediaSelectionOption orqali amalga oshiriladi. Foydalanuvchi subtitr sozlamalari (shrift, o'lcham, rang) tizimning Accessibility sozlamalaridan o'qiladi va kodda aniq ko'rsatilmagan bo'lsa, AVPlayerLayer ga avtomatik qo'llaniladi.

Tinglashni boshqarish va ilg'or stsenariylar

Ishlab chiqarish ilovalari uchun AVPlayer ning asosiy integratsiyasi ko'pincha qo'shimcha sozlash ni talab qiladi: HLS segmentlarini keshlash, FairPlay DRM bilan ishlash, „Now Playing" tizimi bilan integratsiya va maxsus bitrate tanlash algoritmlarini amalga oshirish.

AVAssetResourceLoader orqali HLS keshlash

AVAssetResourceLoader — HLS segmentlarini yuklashni tutib olish va keshlashni amalga oshirishning yagona usuli. AVAssetResourceLoaderDelegate vakili kalitlar va segmentlarni yuklash so'rovlarini oladi, ularni mahalliy saqlash va takroriy so'rovlarda keshdan qaytarish imkonini beradi. Bu ayniqsa beqaror tarmoq sharoitida ishlaydigan ilovalar uchun foydalidir.

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

FairPlay Streaming — DRM integratsiyasi

FairPlay Streaming (FPS) — HLS kontentini himoya qilish uchun Apple standarti. FPS integratsiyasi uchun shifrlash kalitlarini olish so'rovlarini qayta ishlovchi AVContentKeySessionDelegate protokolini amalga oshirish kerak. Jarayon o'z ichiga oladi: pleerdan SPC (Server Playback Context) olish, litsenziya serveriga yuborish, CKC (Content Key Context) olish va uni AVContentKeySession ga qaytarish.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. keyRequest dan SPC oling
        // 2. SPC ni litsenziya serveriga yuboring
        // 3. CKC oling va keyRequest.processContentKeyResponse ga uzating
    }
}

Now Playing va tizim boshqaruv elementlari

Qulflangan ekran, Control Center va Apple Watch da joriy tinglash haqidagi ma'lumotni ko'rsatish uchun MediaPlayer.framework dan MPNowPlayingInfoCenter ishlatiladi. AVPlayer Now Playing ni avtomatik yangilamaydi — dasturchi tinglash holati o'zgarganda qo'lda metama'lumotlarni (nom, ijrochi, muqova, taraqqiyot) o'rnatishi kerak. Taraqqiyotni yangilash uchun muntazam taymer yoki observe(\.timeControlStatus) ishlatiladi.

Remote Command Center — qulflangan ekrandan, AirPods va CarPlay dan tinglashni boshqarish imkonini beruvchi yana bir tizim xizmati. MPRemoteCommandCenter play, pause, nextTrack, previousTrack, changePlaybackPosition va skipForward/skipBackward buyruqlari uchun ishlovchilarni ro'yxatdan o'tkazadi. AVPlayer bu buyruqlarni avtomatik qayta ishlamaydi — dasturchi ularni player.play(), player.pause() va player.seek() chaqiruvlari bilan bog'lashi kerak.

Tez-tez beriladigan savollar

AVPlayer AVAudioPlayer dan qanday farq qiladi?

AVPlayer — striming, HLS, DRM va tizim boshqaruv elementlari bilan sinxronizatsiya qo'llab-quvvatlashiga ega universal audio va video pleeri. AVAudioPlayer — striming va apparat video tezlashtirishsiz mahalliy audio fayllarni tinglash uchun soddalashtirilgan audio pleer. Video va HLS uchun AVPlayer, oddiy audio uchun AVAudioPlayer dan foydalaning.

AVPlayer YouTube tinglashni qo'llab-quvvatlaydimi?

Yo'q, AVPlayer YouTube kontentini to'g'ridan-to'g'ri yuklashni qo'llab-quvvatlamaydi, chunki YouTube DASH va xususiy formatlarga asoslangan o'z pleeridan foydalanadi. YouTube ni iOS ilovasiga integratsiya qilish uchun WKWebView orqali YouTube IFrame Player API yoki rasmiy youtube-ios-player-helper kutubxonasidan foydalaning.

AVPlayer bilan fon audio tinglashni qanday amalga oshirish kerak?

Fon audio uchun Xcode loyihangizning Background Modes bo'limiga Audio, AirPlay and Picture in Picture ni qo'shing. AVAudioSession ni .playback kategoriyasi bilan sozlang: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer fonda tinglashni davom ettiradi, qulflangan ekran va Control Center esa MPNowPlayingInfoCenter orqali boshqaruv elementlarini ko'rsatadi.

Nima uchun AVPlayer YouTube, Vimeo yoki Twitter dan video tinglamaydi?

Ushbu xizmatlar DRM himoyasi va o'z pleer yechimlaridan foydalanadi. AVPlayer faqat media fayl yoki HLS pleylistiga to'g'ridan-to'g'ri havola orqali kontentni tinglashi mumkin. YouTube va shunga o'xshash platformalardan videolar AVPlayer bilan mos kelmaydigan iframe yoki JavaScript pleeriga o'ralgan. Ko'rsatish uchun ularning rasmiy SDK lari yoki WebView dan foydalaning.

AVPlayer orqali jonli translyatsiyada kechikishni qanday kamaytirish mumkin?

Low-Latency HLS uchun AVPlayerItem ni preferredForwardBufferDuration = 2.0 (soniya) bilan sozlang va jonli chegaradan orqada qolganda avtomatik pauzani boshqaring: player.currentItem?.configuredTimeOffsetFromLive va player.currentItem?.canPlayReverse dan foydalaning. Apple server va mijoz tomonida to'g'ri sozlash bilan 2-4 soniya kechikishli LL-HLS ni tavsiya qiladi.

Xulosa

  • AVPlayer — iOS, macOS, tvOS va visionOS uchun Apple Silicon da apparat tezlashtirishga ega universal Apple media pleeri.
  • HLS — qo'shimcha kutubxonalarsiz avtomatik adaptiv bitrate almashinuvi bilan mahalliy qo'llab-quvvatlash.
  • FairPlay Streaming — Apple platformalarida himoyalangan HLS uchun yagona DRM tizimi.
  • Integratsiya — tez boshlash uchun AVPlayerViewController yoki maxsus UI uchun AVPlayerLayer.
  • Keshlash HLS segment so'rovlarini tutib olish bilan AVAssetResourceLoaderDelegate orqali amalga oshiriladi.
  • Now Playing — MPNowPlayingInfoCenter orqali Control Center va qulflangan ekran uchun metama'lumotlarni qo'lda yangilash.
  • Tavsiya etiladi HLS talablari bilan Apple platformalaridagi barcha media loyihalar uchun AVPlayer dan foydalanish.

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