AVPlayer — əsas anlayışlar, imkanlar və istifadə

Müəllif: IT Sectr Dərc olunub: 2026-05-23 Oxuma vaxtı: 9 dəq

AVPlayer — Apple tərəfindən hazırlanmış, AVFoundation tərkibinə daxil olan və iOS, macOS, tvOS və visionOS platformalarında audio və video oxutmanı təmin edən media pleyer freymvorkudur. AVPlayer yerli MP4 fayllarından adaptiv HLS axınlarına qədər geniş format spektrini vahid API vasitəsilə Apple Silicon çiplərində aparat sürətləndirilməsi ilə dəstəkləyir. Apple WWDC (2024) məlumatına görə, AVPlayer media ilə işləyən iOS tətbiqlərinin 90%-də, o cümlədən Apple TV, Music və Photos-da istifadə olunur.

Əsas məqamlar

  • AVPlayer — Apple-ın bütün platformaları üçün AVFoundation tərkibində media pleyer freymvorkudur.
  • Aparat sürətləndirilməsi — AVPlayer GPU-da dekodlaşdırma üçün VideoToolbox-dan istifadə edir, enerji sərfiyyatını azaldır.
  • HLS — HTTP Live Streaming üçün avtomatik adaptiv bitrate keçidi ilə yerli dəstək.
  • Picture in Picture — iPad, iPhone və Mac-da “şəkil içərisində şəkil” rejimi üçün quraşdırılmış dəstək.
  • DRM — premium məzmunun qorunması üçün FairPlay Streaming ilə inteqrasiya.

AVPlayer nədir?

AVPlayer — Apple-ın bütün platformalarında multimedia məzmununun oxudulmasına cavabdeh olan AVFoundation freymvorkunun mərkəzi komponentidir. iOS 4.0-da (2010) köhnəlmiş MPMoviePlayerController-in əvəzi kimi təqdim edilmiş AVPlayer, dekodlaşdırma parametrlərinin incə sazlanması, audio və video sinxronizasiyası, həmçinin AirPlay və Picture in Picture kimi sistem xidmətləri ilə inteqrasiya imkanı ilə oxutma üzərində aşağı səviyyəli nəzarət təmin edir.

Üçüncü tərəf pleyerlərindən fərqli olaraq, AVPlayer Apple Silicon çiplərində aparat sürətləndirilməsinin üstünlüklərini əldə edir. Video dekodlaşdırma M-seriyasının xüsusi media mühərriklərindən (Media Engine) istifadə edərək VideoToolbox vasitəsilə həyata keçirilir ki, bu da minimal enerji sərfiyyatı ilə 8K HDR oxutmanı təmin edir. HEVC (H.265) və ProRes üçün dekodlaşdırma CPU-nu yükləmədən çipin ixtisaslaşmış bloklarında həyata keçirilir.

AVPlayer Apple ekosistemi ilə sıx inteqrasiya olunub: cihazlar arasında oxutmanın ötürülməsi üçün Handoff, Apple TV-yə striminq üçün AirPlay 2, başın dinamik izlənməsi ilə məkan səsi və MPNowPlayingInfoCenter vasitəsilə sistem idarəetmə elementləri ilə sinxronizasiya. Bu inteqrasiyalar AVPlayer-i Apple platformalarında media ilə işləyən bütün tətbiqlər üçün de-fakto standart halına gətirir.

AVFoundation və sinif iyerarxiyası

AVFoundation freymvorku oxutma üçün üç səviyyəli iyerarxiya təmin edir: AVAsset (metaməlumatlar və məzmun haqqında məlumat), AVPlayerItem (vəziyyət və konkret məzmun nüsxəsinin idarə edilməsi) və AVPlayer (oxutmanın idarə edilməsi). Bu arxitektura metaməlumatların yüklənməsini, oxutmaya hazırlığı və oxutma prosesinin özünü ayırmağa imkan verir ki, bu da çoxsaylı bitrate variantları olan HLS axınları üçün xüsusilə vacibdir.

AVAsset media məzmunu — fayl və ya axın modelini təmsil edir. AVAsset özlüyündə oxudula bilməz; o, treklər (AVAssetTrack), metaməlumatlar (commonMetadata), müddət haqqında məlumat və digər xüsusiyyətləri ehtiva edir. AVAsset-dən AVPlayerItem yaradılır ki, bu da oxutma üçün AVPlayer-ə ötürülə bilər.

AVPlayer-in əsas imkanları

AVPlayer sadə fayl oxutmadan DRM ilə mürəkkəb canlı yayımlara qədər əksər oxutma ssenarilərini əhatə edən imkanlar dəsti təqdim edir. Tətbiq nümunələri ilə əsas funksiyaları nəzərdən keçirək.

İmkanTəsvirPlatformalar
Yerli fayllarMP4, MOV, M4V, AVI, MKV (genişləndirmələr vasitəsilə)iOS, macOS, tvOS
HLSAdaptiv ABR ilə HTTP Live StreamingBütün Apple platformaları
FairPlay DRMAxın lisenziyası ilə qorunan HLS məzmunuiOS, tvOS, macOS
Picture in PictureDigər tətbiqlər üzərində üzən video pəncərəiPad, iPhone (iOS 14+), Mac
AirPlay 2Apple TV və dinamiklərə simsiz ötürməBütün platformalar
Məkan səsiDolby Atmos və dinamik izləməiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG (ekran dəstəyi ilə)iOS 11+, macOS 10.13+

HLS dəstəyi və adaptiv keçid

AVPlayer əlavə kitabxanalar quraşdırmadan HLS üçün yerli dəstəyə malikdir. HLS axınını oxudarkən AVPlayer Apple platformaları üçün optimallaşdırılmış daxili ABR alqoritmindən istifadə edərək adaptiv bitrate keçidini avtomatik idarə edir. Alqoritm yalnız şəbəkə ötürmə qabiliyyətini deyil, həm də cihazın termal vəziyyətini nəzərə alır — həddindən artıq qızma zamanı AVPlayer prosessora yükü azaltmaq üçün bitrate-i aşağı sala bilər.

FairPlay Streaming ilə HLS axınları üçün AVPlayer AVContentKeySession delegatı vasitəsilə lisenziyaların alınmasını və yenilənməsini avtomatik idarə edir. Tərtibatçı AVContentKeySessionDelegate protokolunu tətbiq etməlidir ki, bu da şifrə açma açarını almaq və ya yeniləmək zərurəti yarandıqda pleyer tərəfindən çağırılır. Bu, Apple platformalarında HLS məzmununu qorumağın yeganə yoludur, çünki Widevine iOS-da dəstəklənmir.

Picture in Picture

PiP — istifadəçiyə tətbiqlər arasında keçid edərkən üzən pəncərədə video izləməyə davam etməyə imkan verən rejimdir. iPad və iPhone-da (iOS 14+) AVPlayer bu rejimi aktivləşdirmək üçün AVPictureInPictureController ilə inteqrasiya olunur. macOS 15+ PiP də mövcuddur, lakin sistem menyusu və ya pleyer pəncərəsindəki düymə vasitəsilə aktivləşdirilir.

iOS tətbiqində AVPlayer-dan necə istifadə etməli

AVPlayer-in iOS tətbiqinə inteqrasiyası iki yolla həyata keçirilə bilər: yüksək səviyyəli AVPlayerViewController vasitəsilə (tipik ssenarilər üçün) və ya birbaşa AVPlayer + AVPlayerLayer vasitəsilə (interfeysin tam fərdiləşdirilməsi üçün). Swift-də hər iki yanaşmanı nəzərdən keçirək.

AVPlayerViewController vasitəsilə inteqrasiya

AVPlayerViewController — play/pause, geri sarma, səs, AirPlay, PiP və tam ekran rejimi kimi quraşdırılmış idarəetmə elementləri təmin edən hazır UI komponentidir. Minimal inteqrasiya cəmi bir neçə sətir kod tələb edir: AVPlayer nüsxəsi yaratmaq, onu AVPlayerViewController-ə ötürmək və nəzarətçini ekranda göstərmək.

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 vasitəsilə birbaşa inteqrasiya

Fərdi UI olan tətbiqlər üçün AVPlayerLayer — istənilən UIView daxilində video render edən Core Animation qatından istifadə edin. Bu yanaşma interfeys üzərində tam nəzarət verir: öz idarəetmə elementlərinizi, animasiyalarınızı və video üzərində əlavə qatları əlavə edə bilərsiniz.

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

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

AVPlayer həyat dövrünün idarə edilməsi

Pleyerin həyat dövrünün düzgün idarə edilməsi tətbiqin sabitliyi üçün kritik əhəmiyyət kəsb edir. AVPlayer ekran göründükdə yaradılmalı və bağlandıqda sərbəst buraxılmalıdır. Tətbiq fon rejiminə keçdikdə resurslara qənaət etmək və aşkar ehtiyac olmadan fon oxutmasına görə App Review cəzalarından qaçmaq üçün oxutmanı dayandırmaq tövsiyə olunur.

AVPlayerLayer və video göstərilməsi

AVPlayerLayer — CALayer-dən törəyən, ekranda video renderini təmin edən Core Animation qatıdır. UIView-dən fərqli olaraq, AVPlayerLayer birbaşa GPU ilə Metal və ya OpenGL vasitəsilə işləyir, kadr çıxışının minimal gecikməsini təmin edir. AVPlayerLayer-in işini başa düşmək fərdi oxutma interfeyslərinin tətbiqi üçün zəruridir.

videoGravity konfiqurasiyası

videoGravity xüsusiyyəti videonun qatın sərhədlərinə necə uyğunlaşdığını müəyyən edir. AVLayerVideoGravity.resizeAspect (qara zolaqlarla nisbətlərin qorunması) — AVPlayerViewController üçün standart dəyərdir. resizeAspectFill (kəsilmə ilə bütün ekranın doldurulması) tam ekran rejimi üçün istifadə olunur. resize (qatın ölçüsünə nisbətlərin təhrif edilməsi) nadir hallarda, əsasən analitik tətbiqlər üçün tətbiq edilir.

Əsas axınla sinxronizasiya

AVPlayerLayer videonu real vaxtda render edir, lakin pleyerlə bütün əməliyyatlar (start, pause, seek) əsas axında yerinə yetirilməlidir. Müşahidə üçün əsas dəyərlər — timeControlStatus, rate, status və error — KVO (Key-Value Observing) və ya iOS 16-da Swift Concurrency dəstəyi ilə AVPlayer metodları vasitəsilə təqdim edilən müasir async/await API vasitəsilə izlənilir.

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

Altyazı və alternativ treklərin dəstəyi

AVPlayer VTT, CEA-608 və ITT (iTunes Timed Text) formatlarında quraşdırılmış altyazıları dəstəkləyir. Audio trek və altyazı seçimi AVMediaSelectionGroup və AVMediaSelectionOption vasitəsilə həyata keçirilir. İstifadəçi altyazı parametrləri (şrift, ölçü, rəng) sistem Accessibility parametrlərindən oxunur və kodda açıq şəkildə göstərilməyibsə, AVPlayerLayer-ə avtomatik tətbiq olunur.

Oxutmanın idarə edilməsi və qabaqcıl ssenarilər

İstehsal tətbiqləri üçün AVPlayer-in əsas inteqrasiyası tez-tez əlavə konfiqurasiya tələb edir: HLS seqmentlərinin keşləşdirilməsi, FairPlay DRM ilə iş, “Now Playing” sistemi ilə inteqrasiya və fərdi bitrate seçimi alqoritmlərinin tətbiqi.

AVAssetResourceLoader vasitəsilə HLS keşləşdirilməsi

AVAssetResourceLoader — HLS seqmentlərinin yüklənməsini ələ keçirmək və keşləşdirməni tətbiq etmək üçün yeganə üsuldur. AVAssetResourceLoaderDelegate nümayəndəsi açarların və seqmentlərin yüklənməsi sorğularını alır, onları yerli olaraq saxlamağa və təkrar sorğularda keşdən qaytarmağa imkan verir. Bu, xüsusilə qeyri-sabit şəbəkə şəraitində işləyən tətbiqlər üçün faydalıdır.

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

FairPlay Streaming — DRM inteqrasiyası

FairPlay Streaming (FPS) — HLS məzmununun qorunması üçün Apple standartıdır. FPS inteqrasiyası üçün şifrə açma açarlarının alınması sorğularını emal edən AVContentKeySessionDelegate protokolunu tətbiq etmək lazımdır. Prosesə daxildir: pleyerdən SPC (Server Playback Context) əldə etmək, lisenziya serverinə göndərmək, CKC (Content Key Context) almaq və onu AVContentKeySession-ə qaytarmaq.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. keyRequest-dən SPC əldə edin
        // 2. SPC-ni lisenziya serverinə göndərin
        // 3. CKC əldə edin və keyRequest.processContentKeyResponse-a ötürün
    }
}

Now Playing və sistem idarəetmə elementləri

Lock Screen, Control Center və Apple Watch-da cari oxutma haqqında məlumatı göstərmək üçün MediaPlayer.framework-dən MPNowPlayingInfoCenter istifadə olunur. AVPlayer Now Playing-i avtomatik yeniləmir — tərtibatçı oxutma vəziyyəti dəyişdikdə metaməlumatları (ad, ifaçı, üz qabığı, irəliləyiş) əl ilə təyin etməlidir. İrəliləyişin yenilənməsi üçün müntəzəm taymer və ya observe(\.timeControlStatus) istifadə olunur.

Remote Command Center — kilidli ekrandan, AirPods və CarPlay-dən oxutmanı idarə etməyə imkan verən digər sistem xidmətidir. MPRemoteCommandCenter play, pause, nextTrack, previousTrack, changePlaybackPosition və skipForward/skipBackward əmrləri üçün işləyiciləri qeydiyyatdan keçirir. AVPlayer bu əmrləri avtomatik emal etmir — tərtibatçı onları player.play(), player.pause() və player.seek() çağırışları ilə əlaqələndirməlidir.

Tez-tez verilən suallar

AVPlayer AVAudioPlayer-dan nə ilə fərqlənir?

AVPlayer — striminq, HLS, DRM və sistem idarəetmə elementləri ilə sinxronizasiya dəstəyi olan universal audio və video pleyeridir. AVAudioPlayer — striminq və aparat video sürətləndirilməsi olmadan yerli audio faylların oxudulması üçün sadələşdirilmiş audio pleyerdir. Video və HLS üçün AVPlayer, sadə audio üçün AVAudioPlayer istifadə edin.

AVPlayer YouTube oxutmanı dəstəkləyirmi?

Xeyr, AVPlayer YouTube məzmununun birbaşa yüklənməsini dəstəkləmir, çünki YouTube DASH və mülkiyyət formatlarına əsaslanan öz pleyerindən istifadə edir. YouTube-u iOS tətbiqinə inteqrasiya etmək üçün WKWebView vasitəsilə YouTube IFrame Player API və ya rəsmi youtube-ios-player-helper kitabxanasından istifadə edin.

AVPlayer ilə fon audio oxutmasını necə tətbiq etməli?

Fon audio üçün Xcode layihənizin Background Modes bölməsinə Audio, AirPlay and Picture in Picture əlavə edin. AVAudioSession-u .playback kateqoriyası ilə konfiqurasiya edin: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer fonda oxutmanı davam etdirəcək, Lock Screen və Control Center isə MPNowPlayingInfoCenter vasitəsilə idarəetmə elementlərini göstərəcək.

Niyə AVPlayer YouTube, Vimeo və ya Twitter-dən video oxutmur?

Bu xidmətlər DRM qorunması və öz pleyer həllərindən istifadə edir. AVPlayer yalnız media faylına və ya HLS pleylistinə birbaşa keçid vasitəsilə məzmunu oxuda bilər. YouTube və oxşar platformalardan videolar AVPlayer ilə uyğun olmayan iframe və ya JavaScript pleyerinə bükülmüşdür. Göstərmək üçün onların rəsmi SDK-larından və ya WebView-dən istifadə edin.

AVPlayer vasitəsilə canlı yayımda gecikməni necə azaltmaq olar?

Low-Latency HLS üçün AVPlayerItem-i preferredForwardBufferDuration = 2.0 (saniyə) ilə konfiqurasiya edin və canlı sərhəddən geri qaldıqda avtomatik fasiləni idarə edin: player.currentItem?.configuredTimeOffsetFromLive və player.currentItem?.canPlayReverse istifadə edin. Apple server və müştəri tərəfində düzgün konfiqurasiya ilə 2-4 saniyə gecikmə ilə LL-HLS tövsiyə edir.

Nəticə

  • AVPlayer — iOS, macOS, tvOS və visionOS üçün Apple Silicon-da aparat sürətləndirilməsi ilə universal Apple media pleyeridir.
  • HLS — əlavə kitabxanalar olmadan avtomatik adaptiv bitrate keçidi ilə yerli dəstək.
  • FairPlay Streaming — Apple platformalarında qorunan HLS üçün yeganə DRM sistemidir.
  • İnteqrasiya — sürətli başlanğıc üçün AVPlayerViewController və ya fərdi UI üçün AVPlayerLayer.
  • Keşləşdirmə HLS seqment sorğularının ələ keçirilməsi ilə AVAssetResourceLoaderDelegate vasitəsilə tətbiq olunur.
  • Now Playing — MPNowPlayingInfoCenter vasitəsilə Control Center və Lock Screen üçün metaməlumatların əl ilə yenilənməsi.
  • Tövsiyə olunur HLS tələbləri ilə Apple platformalarında bütün media layihələri üçün AVPlayer istifadə etmək.

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.

Layihəni müzakirə et

Həm də oxuyun