AVPlayer — klíčové pojmy, možnosti a použití

Autor: IT Sectr Publikováno: 2026-05-23 Doba čtení: 9 min

AVPlayer je framework mediálního přehrávače od Apple, který je součástí AVFoundation a zajišťuje přehrávání zvuku a videa na iOS, macOS, tvOS a visionOS. AVPlayer podporuje širokou škálu formátů — od lokálních MP4 souborů po adaptivní HLS streamy — prostřednictvím jednotného API s hardwarovým urychlením dekódování na čipech Apple Silicon. Podle údajů Apple WWDC (2024) je AVPlayer používán v 90% iOS aplikací pracujících s médii, včetně Apple TV, Music a Photos.

Hlavní body

  • AVPlayer — je framework mediálního přehrávače Apple z AVFoundation pro všechny platformy Apple.
  • Hardwarové urychlení — AVPlayer používá VideoToolbox pro dekódování na GPU, čímž snižuje spotřebu energie.
  • HLS — nativní podpora HTTP Live Streaming s automatickým adaptivním přepínáním bitrate.
  • Picture in Picture — vestavěná podpora režimu „obraz v obrazu" na iPad, iPhone a Mac.
  • DRM — integrace s FairPlay Streaming pro ochranu prémiového obsahu.

Co je AVPlayer?

AVPlayer — je centrální komponenta frameworku AVFoundation, zodpovědná za přehrávání multimediálního obsahu na všech platformách Apple. Představen v iOS 4.0 (2010) jako náhrada za zastaralý MPMoviePlayerController, AVPlayer poskytuje nízkoúrovňovou kontrolu nad přehráváním s možností jemného ladění parametrů dekódování, synchronizace zvuku a videa, stejně jako integrace se systémovými službami jako AirPlay a Picture in Picture.

Na rozdíl od přehrávačů třetích stran, AVPlayer získává výhody hardwarového urychlení na čipech Apple Silicon. Dekódování videa probíhá přes VideoToolbox s využitím dedikovaných mediálních enginů řady M (Media Engine), což zajišťuje přehrávání 8K HDR s minimální spotřebou energie. Pro HEVC (H.265) a ProRes probíhá dekódování na specializovaných blocích čipu, aniž by zatěžovalo CPU.

AVPlayer je úzce integrován s ekosystémem Apple: podpora Handoff pro přenos přehrávání mezi zařízeními, AirPlay 2 pro streamování na Apple TV, prostorový zvuk s dynamickým sledováním hlavy a synchronizace se systémovými ovládacími prvky prostřednictvím MPNowPlayingInfoCenter. Tyto integrace dělají z AVPlayer de facto standard pro všechny aplikace pracující s médii na platformách Apple.

AVFoundation a hierarchie tříd

Framework AVFoundation poskytuje tříúrovňovou hierarchii pro přehrávání: AVAsset (metadata a informace o obsahu), AVPlayerItem (stav a správa konkrétní instance obsahu) a AVPlayer (řízení přehrávání). Tato architektura umožňuje oddělit načítání metadat, přípravu na přehrávání a samotný proces přehrávání, což je obzvláště důležité pro HLS streamy s více variantami bitrate.

AVAsset představuje model mediálního obsahu — souboru nebo streamu. AVAsset není sám o sobě přehratelný; obsahuje stopy (AVAssetTrack), metadata (commonMetadata), informace o délce a další charakteristiky. Z AVAsset se vytváří AVPlayerItem, který může být předán AVPlayer k přehrávání.

Hlavní možnosti AVPlayer

AVPlayer nabízí sadu možností pokrývajících většinu scénářů přehrávání — od jednoduchého přehrávání souboru po složité živé přenosy s DRM. Podívejme se na klíčové funkce s příklady jejich použití.

MožnostPopisPlatformy
Lokální souboryMP4, MOV, M4V, AVI, MKV (přes rozšíření)iOS, macOS, tvOS
HLSHTTP Live Streaming s adaptivním ABRVšechny platformy Apple
FairPlay DRMChráněný HLS obsah s streamovací licencíiOS, tvOS, macOS
Picture in PicturePlovoucí okno videa nad ostatními aplikacemiiPad, iPhone (iOS 14+), Mac
AirPlay 2Bezdrátový přenos na Apple TV a reproduktoryVšechny platformy
Prostorový zvukDolby Atmos a dynamické sledováníiOS 15+, macOS 13+
HDRDolby Vision, HDR10, HLG s podporou displejeiOS 11+, macOS 10.13+

Podpora HLS a adaptivní přepínání

AVPlayer má nativní podporu HLS bez nutnosti instalace dalších knihoven. Při přehrávání HLS streamu AVPlayer automaticky řídí adaptivní přepínání bitrate pomocí vestavěného algoritmu ABR optimalizovaného pro platformy Apple. Algoritmus zohledňuje nejen šířku pásma sítě, ale také tepelný stav zařízení — při přehřátí může AVPlayer snížit bitrate pro snížení zátěže procesoru.

Pro HLS streamy s FairPlay Streaming AVPlayer automaticky zpracovává získávání a obnovování licencí prostřednictvím delegáta AVContentKeySession. Vývojář musí implementovat protokol AVContentKeySessionDelegate, který je volán přehrávačem při potřebě získat nebo obnovit dešifrovací klíč. Toto je jediný způsob ochrany HLS obsahu na platformách Apple, protože Widevine není na iOS podporováno.

Picture in Picture

PiP — režim umožňující uživateli pokračovat ve sledování videa v plovoucím okně při přepínání mezi aplikacemi. Na iPadu a iPhone (iOS 14+) se AVPlayer integruje s AVPictureInPictureController pro aktivaci tohoto režimu. Na macOS 15+ je PiP také k dispozici, ale aktivuje se přes systémové menu nebo tlačítko v okně přehrávače.

Jak používat AVPlayer v iOS aplikaci

Integrace AVPlayer do iOS aplikace může být provedena dvěma způsoby: prostřednictvím vysoce úrovňového AVPlayerViewController (pro typické scénáře) nebo přímo přes AVPlayer + AVPlayerLayer (pro plné přizpůsobení rozhraní). Podívejme se na oba přístupy ve Swift.

Integrace přes AVPlayerViewController

AVPlayerViewController — hotová UI komponenta poskytující vestavěné ovládací prvky: play/pause, přetáčení, hlasitost, AirPlay, PiP a režim celé obrazovky. Minimální integrace vyžaduje pouze několik řádků kódu: vytvoření instance AVPlayer, předání AVPlayerViewController a zobrazení controlleru na obrazovce.

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

Přímá integrace přes AVPlayerLayer

Pro aplikace s vlastním UI použijte AVPlayerLayer — vrstvu Core Animation, která renderuje video uvnitř libovolného UIView. Tento přístup poskytuje plnou kontrolu nad rozhraním: můžete přidat vlastní ovládací prvky, animace a další vrstvy přes video.

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

// Použití:
let playerView = VideoPlayerView(frame: view.bounds)
playerView.player = AVPlayer(url: url)
view.addSubview(playerView)

Řízení životního cyklu AVPlayer

Správné řízení životního cyklu přehrávače je kritické pro stabilitu aplikace. AVPlayer by měl být vytvořen při objevení obrazovky a uvolněn při jejím zavření. Při přechodu aplikace na pozadí se doporučuje pozastavit přehrávání pro úsporu zdrojů a vyhnutí se postihům App Review za přehrávání na pozadí bez zřejmé potřeby.

AVPlayerLayer a zobrazení videa

AVPlayerLayer — je vrstva Core Animation, dědící z CALayer, která zajišťuje renderování videa na obrazovce. Na rozdíl od UIView, AVPlayerLayer pracuje přímo s GPU přes Metal nebo OpenGL, zajišťující minimální zpoždění výstupu snímků. Porozumění fungování AVPlayerLayer je nezbytné pro implementaci vlastních přehrávacích rozhraní.

Nastavení videoGravity

Vlastnost videoGravity určuje, jak video zapadá do hranic vrstvy. AVLayerVideoGravity.resizeAspect (zachování poměru stran s černými pruhy) — výchozí hodnota pro AVPlayerViewController. resizeAspectFill (vyplnění celé obrazovky s oříznutím) se používá pro režim celé obrazovky. resize (zkreslení poměru stran podle velikosti vrstvy) se používá zřídka, hlavně pro analytické aplikace.

Synchronizace s hlavním vláknem

AVPlayerLayer renderuje video v reálném čase, ale všechny operace s přehrávačem (start, pause, seek) musí být prováděny v hlavním vlákně. Klíčové hodnoty pro pozorování — timeControlStatus, rate, status a error — jsou sledovány prostřednictvím KVO (Key-Value Observing) nebo moderního async/await API, představeného v iOS 16 prostřednictvím metod AVPlayer s podporou 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
    }
}

Podpora titulků a alternativních stop

AVPlayer podporuje vestavěné titulky ve formátech VTT, CEA-608 a ITT (iTunes Timed Text). Výběr zvukové stopy a titulků se provádí přes AVMediaSelectionGroup a AVMediaSelectionOption. Uživatelská nastavení titulků (písmo, velikost, barva) jsou čtena ze systémových nastavení Accessibility a automaticky aplikována na AVPlayerLayer, pokud nejsou explicitně uvedena v kódu.

Řízení přehrávání a pokročilé scénáře

Pro produkční aplikace základní integrace AVPlayer často vyžaduje dodatečnou konfiguraci: ukládání HLS segmentů do mezipaměti, práci s FairPlay DRM, integraci se systémem „Now Playing" a implementaci vlastních algoritmů výběru bitrate.

Ukládání HLS do mezipaměti přes AVAssetResourceLoader

AVAssetResourceLoader — jediný způsob, jak zachytit načítání HLS segmentů a implementovat ukládání do mezipaměti. Delegát AVAssetResourceLoaderDelegate přijímá požadavky na načtení klíčů a segmentů, umožňuje je lokálně ukládat a vracet z mezipaměti při opakovaných požadavcích. To je zvláště užitečné pro aplikace pracující v podmínkách nestabilní sítě.

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

FairPlay Streaming — integrace DRM

FairPlay Streaming (FPS) — standard Apple pro ochranu HLS obsahu. Pro integraci FPS je třeba implementovat protokol AVContentKeySessionDelegate, který zpracovává požadavky na získání dešifrovacích klíčů. Proces zahrnuje: získání SPC (Server Playback Context) z přehrávače, odeslání na licenční server, přijetí CKC (Content Key Context) a předání zpět do AVContentKeySession.

swift
class DRMDelegate: NSObject, AVContentKeySessionDelegate {

    func contentKeySession(
        _ session: AVContentKeySession,
        didProvide keyRequest: AVContentKeyRequest
    ) {
        // 1. Získat SPC z keyRequest
        // 2. Odeslat SPC na licenční server
        // 3. Získat CKC a předat do keyRequest.processContentKeyResponse
    }
}

Now Playing a systémové ovládací prvky

Pro zobrazení informací o aktuálním přehrávání na uzamčené obrazovce, Control Center a Apple Watch se používá MPNowPlayingInfoCenter z MediaPlayer.framework. AVPlayer automaticky neaktualizuje Now Playing — vývojář musí ručně nastavovat metadata (název, interpret, obal, průběh) při změně stavu přehrávání. Pro aktualizaci průběhu se používá pravidelný časovač nebo observe(\.timeControlStatus).

Remote Command Center — další systémová služba umožňující ovládat přehrávání z uzamčené obrazovky, AirPods a CarPlay. MPRemoteCommandCenter registruje obsluhy pro příkazy play, pause, nextTrack, previousTrack, changePlaybackPosition a skipForward/skipBackward. AVPlayer tyto příkazy nezpracovává automaticky — vývojář je musí propojit s voláními player.play(), player.pause() a player.seek().

Často kladené otázky

Čím se AVPlayer liší od AVAudioPlayer?

AVPlayer — univerzální přehrávač pro zvuk a video s podporou streamování, HLS, DRM a synchronizace se systémovými ovládacími prvky. AVAudioPlayer — zjednodušený audio přehrávač pro přehrávání lokálních audio souborů bez podpory streamování a hardwarového urychlení videa. Pro video a HLS použijte AVPlayer, pro jednoduché audio — AVAudioPlayer.

Podporuje AVPlayer přehrávání YouTube?

Ne, AVPlayer nepodporuje přímé načítání obsahu YouTube, protože YouTube používá vlastní přehrávač založený na DASH a proprietárních formátech. Pro integraci YouTube do iOS aplikace použijte YouTube IFrame Player API přes WKWebView nebo oficiální knihovnu youtube-ios-player-helper.

Jak implementovat přehrávání zvuku na pozadí s AVPlayer?

Pro audio na pozadí přidejte Audio, AirPlay and Picture in Picture do Background Modes vašeho Xcode projektu. Nakonfigurujte AVAudioSession s kategorií .playback: try AVAudioSession.sharedInstance().setCategory(.playback). AVPlayer bude pokračovat v přehrávání na pozadí a uzamčená obrazovka a Control Center budou zobrazovat ovládací prvky přes MPNowPlayingInfoCenter.

Proč AVPlayer nepřehrává video z YouTube, Vimeo nebo Twitteru?

Tyto služby používají ochranu DRM a vlastní řešení přehrávačů. AVPlayer může přehrávat obsah pouze přes přímý odkaz na mediální soubor nebo HLS playlist. Videa z YouTube a podobných platforem jsou zabalena do iframe nebo JavaScriptového přehrávače, který není kompatibilní s AVPlayer. Pro zobrazení použijte jejich oficiální SDK nebo WebView.

Jak snížit zpoždění v živém přenosu přes AVPlayer?

Pro Low-Latency HLS nakonfigurujte AVPlayerItem s preferredForwardBufferDuration = 2.0 (sekundy) a automaticky řídíte pauzu při zpoždění za živou hranicí: použijte player.currentItem?.configuredTimeOffsetFromLive a player.currentItem?.canPlayReverse. Apple doporučuje LL-HLS se zpožděním 2-4 sekund při správné konfiguraci na serveru a klientovi.

Shrnutí

  • AVPlayer — univerzální mediální přehrávač Apple s hardwarovým urychlením na Apple Silicon pro iOS, macOS, tvOS a visionOS.
  • HLS — nativní podpora s automatickým adaptivním přepínáním bitrate bez dalších knihoven.
  • FairPlay Streaming — jediný DRM systém pro chráněný HLS na platformách Apple.
  • Integrace — AVPlayerViewController pro rychlý start nebo AVPlayerLayer pro vlastní UI.
  • Ukládání do mezipaměti HLS se implementuje přes AVAssetResourceLoaderDelegate se zachycením požadavků na segmenty.
  • Now Playing — ruční aktualizace metadat pro Control Center a uzamčenou obrazovku přes MPNowPlayingInfoCenter.
  • Doporučuje se používat AVPlayer pro všechny mediální projekty na platformách Apple s požadavky na HLS.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také