AVPlayer — кључни појмови, могућности и употреба

Аутор: IT Sectr Објављено: 2026-05-23 Време читања: 9 мин

AVPlayer је медија плејер фрејмворк компаније Apple, који је део AVFoundation-а и обезбеђује репродукцију аудио и видео записа на iOS, macOS, tvOS и visionOS платформама. AVPlayer подржава широк спектар формата — од локалних MP4 датотека до адаптивних HLS стримова — кроз јединствени API са хардверским убрзањем декодирања на Apple Silicon чиповима. Према подацима Apple WWDC (2024), AVPlayer се користи у 90% iOS апликација које раде са медијима, укључујући Apple TV, Music и Photos.

Главно

  • AVPlayer — је Apple медија плејер фрејмворк из AVFoundation-а за све Apple платформе.
  • Хардверско убрзање — AVPlayer користи VideoToolbox за декодирање на GPU-у, смањујући потрошњу енергије.
  • HLS — изворна подршка за HTTP Live Streaming са аутоматским адаптивним пребацивањем битрејта.
  • Picture in Picture — уграђена подршка за режим „слика у слици" на iPad, iPhone и Mac рачунарима.
  • DRM — интеграција са FairPlay Streaming-ом за заштиту премијум садржаја.

Шта је AVPlayer?

AVPlayer — централна компонента AVFoundation фрејмворка, одговорна за репродукцију мултимедијалног садржаја на свим Apple платформама. Представљен у iOS 4.0 (2010) као замена за застарели MPMoviePlayerController, AVPlayer обезбеђује нискоконтролну контролу над репродукцијом са могућношћу финоће подешавања параметара декодирања, синхронизације аудио и видео записа, као и интеграције са системским сервисима као што су AirPlay и Picture in Picture.

За разлику од плејера трећих страна, AVPlayer добија предности хардверског убрзања на Apple Silicon чиповима. Декодирање видеа се обавља преко VideoToolbox-а коришћењем наменских медија мотора M-серије (Media Engine), што обезбеђује репродукцију 8K HDR-а са минималном потрошњом енергије. За HEVC (H.265) и ProRes декодирање се обавља на специјализованим блоковима чипа, без оптерећења CPU-а.

AVPlayer је тесно интегрисан са Apple екосистемом: подршка за Handoff ради преноса репродукције између уређаја, AirPlay 2 за стримовање на Apple TV, просторни звук са динамичким праћењем главе и синхронизација са системским контролним елементима преко MPNowPlayingInfoCenter-а. Ове интеграције чине AVPlayer де факто стандардом за све апликације које раде са медијима на Apple платформама.

AVFoundation и хијерархија класа

Фрејмворк AVFoundation пружа тростепену хијерархију за репродукцију: AVAsset (метаподаци и информације о садржају), AVPlayerItem (стање и управљање одређеном инстанцом садржаја) и AVPlayer (управљање репродукцијом). Ова архитектура омогућава раздвајање учитавања метаподатака, припреме за репродукцију и самог процеса репродукције, што је посебно важно за HLS стримове са вишеструким варијантама битрејта.

AVAsset представља модел медија садржаја — датотеке или стрима. AVAsset сам по себи није репродуктибилан; садржи траке (AVAssetTrack), метаподатке (commonMetadata), информације о трајању и друге карактеристике. Од AVAsset-а се креира AVPlayerItem, који се затим може предати AVPlayer-у за репродукцију.

Основне могућности AVPlayer-а

AVPlayer пружа скуп могућности које покривају већину сценарија репродукције — од једноставног пуштања датотеке до сложених уживо преноса са DRM-ом. Размотримо кључне функције са примерима њихове примене.

МогућностОписПлатформе
Локалне датотекеMP4, MOV, M4V, AVI, MKV (кроз проширења)iOS, macOS, tvOS
HLSHTTP Live Streaming са адаптивним ABR-омСве Apple платформе
FairPlay DRMЗаштићени HLS садржај са стрим лиценцомiOS, tvOS, macOS
Picture in PictureПлутајући видео прозор изнад других апликацијаiPad, iPhone (iOS 14+), Mac
AirPlay 2Бежични пренос на Apple TV и звучникеСве платформе
Просторни звукDolby Atmos и динамичко праћењеiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG уз подршку екранаiOS 11+, macOS 10.13+

Подршка за HLS и адаптивно пребацивање

AVPlayer има изворну подршку за HLS без потребе за инсталирањем додатних библиотека. При репродукцији HLS стрима, AVPlayer аутоматски управља адаптивним пребацивањем битрејта, користећи уграђени ABR алгоритам оптимизован за Apple платформе. Алгоритам узима у обзир не само пропусни опсег мреже, већ и термичко стање уређаја — при прегревању, AVPlayer може смањити битрејт да би смањио оптерећење процесора.

За HLS стримове са FairPlay Streaming-ом, AVPlayer аутоматски обрађује добијање и обнављање лиценци путем делегата AVContentKeySession. Програмер треба да имплементира протокол AVContentKeySessionDelegate, који плејер позива када је потребно добити или обновити кључ за дешифровање. Ово је једини начин заштите HLS садржаја на Apple платформама, јер Widevine није подржан на iOS-у.

Picture in Picture

PiP — режим који омогућава кориснику да настави гледање видеа у плутајућем прозору при пребацивању између апликација. На iPad-у и iPhone-у (iOS 14+) AVPlayer се интегрише са AVPictureInPictureController-ом за укључивање овог режима. На macOS 15+ PiP је такође доступан, али се активира преко системског менија или дугмета у прозору плејера.

Како користити AVPlayer у iOS апликацији

Интеграција AVPlayer-а у iOS апликацију може се извршити на два начина: преко високонивовског AVPlayerViewController-а (за типичне сценарије) или директно преко AVPlayer + AVPlayerLayer (за потпуну прилагођавање интерфејса). Размотримо оба приступа у Swift-у.

Интеграција преко AVPlayerViewController-а

AVPlayerViewController — готова UI компонента која пружа уграђене контролне елементе: play/pause, премотавање, јачина звука, AirPlay, PiP и режим преко целог екрана. Минимална интеграција захтева само неколико линија кода: креирање инстанце AVPlayer-а, прослеђивање AVPlayerViewController-у и приказивање контролера на екрану.

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

За апликације са прилагођеним UI-јем користите AVPlayerLayer — слој Core Animation-а који рендерује видео унутар било ког UIView-а. Овај приступ пружа потпуну контролу над интерфејсом: можете додати сопствене контролне елементе, анимације и додатне слојеве преко видеа.

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

// Употреба:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)

Управљање животним циклусом AVPlayer-а

Исправно управљање животним циклусом плејера је критично за стабилност апликације. AVPlayer треба креирати када се екран појави и ослободити када се затвори. При одласку апликације у позадину, препоручује се паузирање репродукције ради уштеде ресурса и избегавања казни App Review-а за позадинску репродукцију без јасне потребе.

AVPlayerLayer и приказ видеа

AVPlayerLayer — је Core Animation слој, наслеђен из CALayer-а, који обезбеђује рендеровање видеа на екрану. За разлику од UIView-а, AVPlayerLayer ради директно са GPU-ом преко Metal-а или OpenGL-а, обезбеђујући минимално кашњење излаза оквира. Разумевање рада AVPlayerLayer-а је неопходно за имплементацију прилагођених интерфејса репродукције.

Подешавање videoGravity

Својство videoGravity одређује како се видео уклапа у границе слоја. AVLayerVideoGravity.resizeAspect (очување пропорција са црним тракама) — подразумевана вредност за AVPlayerViewController. resizeAspectFill (попуњавање целог екрана са обрезивањем) користи се за режим преко целог екрана. resize (изобличење пропорција према величини слоја) ретко се примењује, углавном за аналитичке апликације.

Синхронизација са главном нити

AVPlayerLayer рендерује видео у реалном времену, али све операције са плејером (start, pause, seek) морају се извршавати на главној нити. Кључне вредности за посматрање — timeControlStatus, rate, status и error — прате се кроз KVO (Key-Value Observing) или модерни async/await API, представљен у iOS 16 кроз AVPlayer методе са подршком за Swift Concurrency.

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

Подршка за титлове и алтернативне траке

AVPlayer подржава уграђене титлове у форматима VTT, CEA-608 и ITT (iTunes Timed Text). Избор аудио траке и титлова врши се преко AVMediaSelectionGroup и AVMediaSelectionOption. Корисничка подешавања титлова (фонт, величина, боја) читају се из системских Accessibility подешавања и аутоматски се примењују на AVPlayerLayer, ако нису експлицитно наведена у коду.

Управљање репродукцијом и напредни сценарији

За продукцијске апликације, основна интеграција AVPlayer-а често захтева додатно подешавање: кеширање HLS сегмената, рад са FairPlay DRM-ом, интеграција са „Now Playing" системом и имплементација прилагођених алгоритама за избор битрејта.

Кеширање HLS-а преко AVAssetResourceLoader-а

AVAssetResourceLoader — једини начин да се пресретне учитавање HLS сегмената и имплементира кеширање. Делегат AVAssetResourceLoaderDelegate прима захтеве за учитавање кључева и сегмената, омогућавајући њихово локално чување и враћање из кеша при поновљеним захтевима. Ово је посебно корисно за апликације које раде у условима нестабилне мреже.

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

FairPlay Streaming — DRM интеграција

FairPlay Streaming (FPS) — Apple стандард за заштиту HLS садржаја. За FPS интеграцију потребно је имплементирати протокол AVContentKeySessionDelegate, који обрађује захтеве за добијање кључева за дешифровање. Процес укључује: добијање SPC (Server Playback Context) од плејера, слање на лиценцни сервер, примање CKC (Content Key Context) и прослеђивање назад у AVContentKeySession.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. Преузети SPC из keyRequest-а
        // 2. Послати SPC на лиценцни сервер
        // 3. Преузети CKC и проследити у keyRequest.processContentKeyResponse
    }
}

Now Playing и системски контролни елементи

За приказ информација о тренутној репродукцији на закључаном екрану, Control Center-у и Apple Watch-у користи се MPNowPlayingInfoCenter из MediaPlayer.framework-а. AVPlayer не ажурира Now Playing аутоматски — програмер мора ручно постављати метаподатке (назив, извођач, омот, напредак) при промени стања репродукције. За ажурирање напретка користи се редовни тајмер или observe(\.timeControlStatus).

Remote Command Center — још један системски сервис који омогућава управљање репродукцијом са закључаног екрана, AirPods-а и CarPlay-а. MPRemoteCommandCenter региструје руковаоце за команде play, pause, nextTrack, previousTrack, changePlaybackPosition и skipForward/skipBackward. AVPlayer не обрађује ове команде аутоматски — програмер их мора повезати са позивима player.play(), player.pause() и player.seek().

Често постављана питања

По чему се AVPlayer разликује од AVAudioPlayer-а?

AVPlayer — универзални плејер за аудио и видео са подршком за стриминг, HLS, DRM и синхронизацију са системским контролним елементима. AVAudioPlayer — поједностављени аудио плејер за репродукцију локалних аудио датотека без подршке за стриминг и хардверско убрзање видеа. За видео и HLS користите AVPlayer, за једноставан аудио — AVAudioPlayer.

Да ли AVPlayer подржава репродукцију YouTube-а?

Не, AVPlayer не подржава директно учитавање YouTube садржаја, јер YouTube користи сопствени плејер заснован на DASH-у и власничким форматима. За интеграцију YouTube-а у iOS апликацију користите YouTube IFrame Player API преко WKWebView-а или званичну библиотеку youtube-ios-player-helper.

Како имплементирати позадинску репродукцију звука са AVPlayer-ом?

За позадински звук додајте Audio, AirPlay and Picture in Picture у Background Modes вашег Xcode пројекта. Подесите AVAudioSession са категоријом .playback: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer ће наставити репродукцију у позадини, а закључани екран и Control Center ће приказивати контролне елементе преко MPNowPlayingInfoCenter-а.

Зашто AVPlayer не репродукује видео са YouTube-а, Vimeo-а или Twitter-а?

Ови сервиси користе DRM заштиту и сопствена плејер решења. AVPlayer може репродуковати садржај само путем директне везе до медија датотеке или HLS плејлисте. Видео са YouTube-а и сличних платформи је умотан у iframe или JavaScript плејер који није компатибилан са AVPlayer-ом. Користите њихове званичне SDK-ове или WebView за приказ.

Како смањити кашњење у уживо преносу преко AVPlayer-а?

За Low-Latency HLS подесите AVPlayerItem са preferredForwardBufferDuration = 2.0 (секунде) и аутоматски управљајте паузом при кашњењу у односу на уживо границу: користите player.currentItem?.configuredTimeOffsetFromLive и player.currentItem?.canPlayReverse. Apple препоручује LL-HLS са кашњењем од 2-4 секунде уз исправну конфигурацију на серверу и клијенту.

Закључак

  • AVPlayer — универзални Apple медија плејер са хардверским убрзањем на Apple Silicon-у за iOS, macOS, tvOS и visionOS.
  • HLS — изворна подршка са аутоматским адаптивним пребацивањем битрејта без додатних библиотека.
  • FairPlay Streaming — једини DRM систем за заштићени HLS на Apple платформама.
  • Интеграција — AVPlayerViewController за брз почетак или AVPlayerLayer за прилагођени UI.
  • Кеширање HLS-а се имплементира преко AVAssetResourceLoaderDelegate-а са пресретањем захтева за сегменте.
  • Now Playing — ручно ажурирање метаподатака за Control Center и закључани екран преко MPNowPlayingInfoCenter-а.
  • Препоручује се коришћење AVPlayer-а за све медија пројекте на Apple платформама са HLS захтевима.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође