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ı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 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 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.
| İmkan | Təsvir | Platformalar |
|---|---|---|
| Yerli fayllar | MP4, MOV, M4V, AVI, MKV (genişləndirmələr vasitəsilə) | iOS, macOS, tvOS |
| HLS | Adaptiv ABR ilə HTTP Live Streaming | Bütün Apple platformaları |
| FairPlay DRM | Axın lisenziyası ilə qorunan HLS məzmunu | iOS, tvOS, macOS |
| Picture in Picture | Digər tətbiqlər üzərində üzən video pəncərə | iPad, iPhone (iOS 14+), Mac |
| AirPlay 2 | Apple TV və dinamiklərə simsiz ötürmə | Bütün platformalar |
| Məkan səsi | Dolby Atmos və dinamik izləmə | iOS 15+, macOS 13+ |
| HDR | Dolby Vision, HDR10, HLG (ekran dəstəyi ilə) | iOS 11+, macOS 10.13+ |
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.
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.
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 — 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.
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()
}
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.
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)
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 — 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 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.
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.
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
}
}
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.
İ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 — 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.
let asset = AVURLAsset(url: hlsURL)
asset.resourceLoader.setDelegate(
resourceLoaderDelegate,
queue: DispatchQueue(label: "com.app.resourceloader")
)
let playerItem = AVPlayerItem(asset: asset)
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.
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
}
}
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 — 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.
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.
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.
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.
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ə
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