Audio Session — co to je, kategorie a konfigurace v iOS

Autor: IT Sectr Publikováno: 2026-05-24 Doba čtení: 8 min

Audio Session — centrální mechanismus iOS pro řízení audio chování aplikace: interakce se systémem, zpracování přerušení a směrování zvuku. Každá iOS aplikace získá jedinou audio relaci, která určuje, jak se zvuk chová při uzamčení obrazovky, hovorech a připojení Bluetooth. Podle Apple Developer Documentation, 2026 se Audio Session konfiguruje pomocí kategorie a režimu — bez správné konfigurace aplikace nemusí přehrávat zvuk na pozadí.

Hlavní body

  • Audio Session (AVAudioSession) — systémový objekt iOS, který spravuje audio chování aplikace na úrovni operačního systému.
  • Kategorie relace určuje základní chování: playback, record, ambient, playAndRecord a další.
  • Režimy a volby upřesňují chování: default, voiceChat, videoRecording, allowBluetooth.
  • Při přerušení (hovor, budík) relace obdrží oznámení prostřednictvím NotificationCenter s typem interruptionType.
  • Pro přehrávání na pozadí je nutné aktivovat Background Modes — Audio, AirPlay and Picture in Picture.

Co je Audio Session?

Audio Session — je jediná instance AVAudioSession, kterou vytvoří systém při spuštění aplikace a existuje po celý její životní cyklus. Funguje jako prostředník mezi aplikací a audio systémem iOS: konfigurace kategorie určuje, zda aplikace může přehrávat zvuk na pozadí, zda bude zvuk tlumen během hovoru a na která zařízení bude audio výstup směrován.

Na rozdíl od Android Audio Focus, kde každá aplikace nezávisle požaduje a uvolňuje fokus, je iOS Audio Session centrálně spravována prostřednictvím jedné relace na aplikaci. Při aktivaci relace systém automaticky deaktivuje relaci předchozí aplikace a odešle jí oznámení o přerušení. Tento architektonický rozdíl určuje odlišný přístup ke zpracování zvuku na obou platformách.

Podle WWDC 2024 Session 211 je přibližně 40% problémů se zvukem v iOS aplikacích způsobeno nesprávnou konfigurací Audio Session. Nejčastější chyba — výběr kategorie ambient místo playback, což způsobuje ztrátu zvuku při uzamčení obrazovky.

Princip činnosti AVAudioSession

Při spuštění aplikace získá sharedInstance relace, nastaví kategorii pomocí volání setCategory(_:mode:options:) a aktivuje relaci pomocí setActive(true). Po aktivaci iOS zohledňuje pravidla kategorie pro směrování. Pokud jiná aplikace aktivuje svou relaci, aktuální obdrží oznámení AudioSessionInterruptionType.began prostřednictvím Notification.Name.AVAudioSessionInterruption.

Kategorie Audio Session

Kategorie — hlavní parametr Audio Session, který určuje šest předdefinovaných variant chování. Výběr kategorie je první a nejdůležitější rozhodnutí při konfiguraci audia v iOS.

KategorieKdy použítAudio na pozadíZtlumení při mute
ambientHry, efekty na pozadíNeAno
playbackHudba, podcasty, audioknihyAnoNe
recordDiktafon, nahrávání zvukuNeN/A
playAndRecordVoIP, hlasové zprávyAnoNe
multiRouteDJ mixery, karaokeAnoNe
soloAmbientVýchozí (iOS default)NeAno

Kategorie playback — hlavní volba pro přehrávače

Pro hudební a video přehrávače vždy používejte playback. Tato kategorie umožňuje: přehrávání zvuku při zamčené obrazovce, při vypnutém vypínači mute (fyzické tlačítko na těle iPhonu) a při minimalizované aplikaci. Bez kategorie playback se relace deaktivuje při uzamčení obrazovky nebo minimalizaci aplikace.

Kategorie ambient je vhodná pro hry a aplikace se zvuky na pozadí — umožňuje ostatním aplikacím pokračovat v přehrávání. Například, pokud uživatel poslouchá hudbu a otevře hru s ambient relací, hudba nadále hraje přes zvuky hry. To je zásadní rozdíl oproti Androidu, kde takový scénář vyžaduje výslovné povolení duck.

Jak nakonfigurovat Audio Session

Konfigurace Audio Session by měla být provedena před zahájením jakéhokoli přehrávání. Doporučuje se konfigurovat relaci v metodě application(_:didFinishLaunchingWithOptions:) nebo v inicializátoru přehrávače. Po konfiguraci kategorie je třeba relaci aktivovat.

Základní konfigurace Audio Session ve Swiftu

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Nastavení Audio Session selhalo: \(error.localizedDescription)")
}

Parametr options zahrnuje allowBluetooth (výstup na Bluetooth sluchátka) a defaultToSpeaker (přehrávání přes reproduktor, nikoli přes sluchátko). Volba allowBluetooth je povinná pro aplikace podporující Bluetooth sluchátka — bez ní může být zvuk vyveden přes vestavěný reproduktor, i když jsou sluchátka připojena.

Konfigurace pro nahrávání a přehrávání (VoIP)

swift
let session = AVAudioSession.sharedInstance
try session.setCategory(
    playAndRecord,
    mode: voiceChat,
    options: [allowBluetooth, allowBluetoothA2DP]
)

try session.overrideOutputAudioPort(speaker)
try session.setActive(true)

Kategorie playAndRecord s režimem voiceChat optimalizuje audio cestu pro hlasovou komunikaci: zahrnuje potlačení ozvěny, automatické řízení zesílení (AGC) a výběr optimálního kodeku. OverrideOutputAudioPort(.speaker) vynutí výstup přes reproduktor, i když jsou sluchátka připojena — užitečné pro handsfree hovory.

Aktivace a deaktivace relace

Volání setActive(true) aktivuje relaci a informuje systém, že aplikace bude používat audio. Při pozastavení přehrávání se doporučuje relaci deaktivovat, aby ostatní aplikace mohly získat audio stream. Výjimka — aplikace s dlouhodobým přehráváním na pozadí (hudba, podcasty), kde relace zůstává aktivní po celou skladbu.

Je důležité zpracovávat chyby při setActive. Pokud je aktivní jiná relace s vysokou prioritou (např. Telefon během hovoru), může setActive vyvolat chybu. V takovém případě je třeba počkat na oznámení AudioSessionInterruptionType.ended a opakovat aktivaci.

Režimy a pravidla Audio Session

Režim (mode) upřesňuje kategorii a optimalizuje audio cestu pro konkrétní typ použití. Každý režim mění chování AGC, potlačení ozvěny a kodeků. Režimy nenahrazují kategorii, ale doplňují ji — jedna kategorie může pracovat s různými režimy.

  • default — standardní režim pro hudbu a video. AGC vypnuto, potlačení ozvěny minimální.
  • voiceChat — optimalizace pro VoIP. Zahrnuje potlačení ozvěny, AGC, redukci šumu. Používejte s kategorií playAndRecord.
  • videoRecording — pro nahrávání videa. Priorita kvality nahrávky nad přehráváním. Používejte s kategorií record nebo playAndRecord.
  • measurement — pro audio měření. Minimální zpracování signálu, žádné AGC nebo potlačení ozvěny.
  • gameChat — pro hlasový chat ve hrách. Podobné voiceChat, ale s prioritou herního zvuku.
  • moviePlayback — pro sledování filmů. Optimalizace pro vícekanálové audio (5.1, 7.1) a Dolby Atmos.

Volby kategorie Audio Session

Volby poskytují jemné doladění chování relace. Každá volba je příznak, který se kombinuje s ostatními v poli. Například [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] umožňuje výstup zvuku na Bluetooth sluchátka, použití reproduktoru ve výchozím nastavení a míchání s audioknihami.

V iOS 17+ se objevila volba spatialAudio, která aktivuje personalizovaný prostorový zvuk pro AirPods prostřednictvím AVAudioSessionSpatialPreferences. Podle WWDC 2024 zvyšuje prostorový zvuk zapojení uživatelů hudebních aplikací o 25% v testech Apple.

Zpracování přerušení a hovorů

Přerušení (interruptions) — klíčový rozdíl mezi Audio Session a Android Audio Focus. V iOS jsou přerušení zpracovávána prostřednictvím NotificationCenter odběrem AVAudioSession.interruptionNotification. Oznámení obsahuje slovník s typem přerušení: began nebo ended.

Odběr oznámení o přerušení

swift
override func viewDidLoad() {
    super.viewDidLoad()
    let center = NotificationCenter.default
    center.addObserver(
        self,
        selector: #selector(handleInterruption),
        name: AVAudioSession.interruptionNotification,
        object: nil
    )
}

@objc func handleInterruption(_ notification: Notification) {
    guard let userInfo = notification.userInfo,
        let type = userInfo[AVAudioSession.interruptionTypeKey]
            as? AVAudioSessionInterruptionType
    else { return }

    switch type {
    case began:
        pausePlayback()
    case ended:
        guard let options = userInfo[AVAudioSession.interruptionOptionKey]
            as? AVAudioSessionInterruptionOptions
        else { return }

        if options.contains(shouldResume) {
            resumePlayback()
        }
    }

Při obdržení interruptionType.began by měl přehrávač pozastavit přehrávání. Při interruptionType.ended vlastnost interruptionOptionKey indikuje, zda může přehrávač automaticky obnovit (shouldResume). Pokud uživatel ukončil hovor, shouldResume = true. Pokud hovor skončil kvůli timeoutu — shouldResume = false, obnovení není povoleno.

Zpracování přerušení od jiných aplikací

Když jiná aplikace aktivuje svou Audio Session s kategorií playback, aktuální relace obdrží oznámení o přerušení. Pokud jiná aplikace používá ambient, k přerušení nedochází — zvuky se míchají. Toto chování se zásadně liší od Androidu, kde každá aktivace Audio Focus způsobuje událost LOSS.

Pro aplikace, které by měly pokračovat v přehrávání při aktivaci jiných relací (např. navigace při hrající hudbě), použijte volbu .mixWithOthers. Tato volba povoluje míchání zvuku s jinými aplikacemi a přerušení se neodesílají. MixWithOthers — iOS ekvivalent duck režimu v Androidu.

Směrování zvuku a Bluetooth

Audio Session automaticky spravuje směrování zvuku mezi vestavěnými reproduktory, sluchátky, Bluetooth sluchátky a AirPlay zařízeními. Aplikace může sledovat aktuální trasu pomocí vlastnosti currentRoute a přijímat oznámení o změnách prostřednictvím AVAudioSession.routeChangeNotification.

Při připojení Bluetooth sluchátek iOS automaticky přepne audio výstup na ně, pokud je relace nakonfigurována s volbou allowBluetooth. Bez této volby zvuk nadále proudí přes vestavěný reproduktor. Od iOS 16 při připojení AirPods Pro systém automaticky zapíná ProMotion synchronizaci pro snížení latence.

Sledování změny trasy

Odběr routeChangeNotification umožňuje reagovat na připojení a odpojení sluchátek. Při odpojení Bluetooth sluchátek by měl přehrávač pozastavit přehrávání — uživatel nemusí očekávat, že zvuk začne hrát z telefonního reproduktoru. Podle Apple HIG (2026) je to povinné chování pro hudební aplikace.

Vlastnosti availableInputs a availableOutputs vracejí seznam dostupných audio zařízení s jejich typy (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Vývojář může programově vybrat konkrétní zařízení pomocí overrideOutputAudioPort pro vlastní scénáře směrování.

Často kladené otázky

Čím se Audio Session liší od Android Audio Focus?

Klíčový rozdíl — architektura. Audio Session je jedna centralizovaná relace na aplikaci, která se konfiguruje jednou. Audio Focus v Androidu vyžaduje ruční žádost o fokus při každém přehrávání. Kromě toho iOS podporuje míchání pomocí volby mixWithOthers, zatímco v Androidu je duck jedinou alternativou k úplnému zastavení.

Proč zvuk mizí při uzamčení obrazovky iPhonu?

Nejčastější příčina — nesprávná kategorie Audio Session. Pokud je zvolena ambient nebo soloAmbient, zvuk se při uzamčení obrazovky zastaví. Přepněte kategorii na playback a ujistěte se, že v Info.plist je přidán Background Modes — Audio, AirPlay, and Picture in Picture.

Jak povolit dvěma aplikacím hrát současně v iOS?

Přidejte volbu .mixWithOthers do setCategory. To umožní míchání zvuku vaší aplikace s ostatními aktivními relacemi. Bez této volby nová aplikace přeruší stávající. MixWithOthers — ekvivalent duck režimu v Androidu, ale s plným zachováním hlasitosti.

Jak programově přepnout zvuk na Bluetooth reproduktor?

Použijte overrideOutputAudioPort s nil pro automatický výběr. Pro vynucený výstup na Bluetooth: získejte AVAudioSessionRouteDescription z availableOutputs, vyberte port s typem .bluetoothA2DP a předejte jej overrideOutputAudioPort. Ujistěte se, že relace je nakonfigurována s allowBluetooth.

Je třeba volat setActive(false) při pozastavení přehrávače?

Pro většinu aplikací — ano. Deaktivace relace při pozastavení umožňuje ostatním aplikacím získat audio fokus. Výjimka — hudební přehrávače s dlouhodobým přehráváním na pozadí. Pokud je pauza krátká (méně než 5 sekund), je lepší nechat relaci aktivní pro rychlé obnovení.

Shrnutí

  • Audio Session (AVAudioSession) — jedna audio relace na aplikaci v iOS, která spravuje chování zvuku na úrovni operačního systému.
  • Šest kategorií: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — určují základní audio chování.
  • Pro přehrávání na pozadí jsou povinné kategorie playback a Background Modes v Info.plist.
  • Přerušení jsou zpracovávána prostřednictvím NotificationCenter s typy began (pauza) a ended (obnovení při shouldResume).
  • Volba .mixWithOthers aktivuje míchání zvuku s jinými aplikacemi bez přerušení.
  • Směrování je řízeno automaticky, ale monitorováno pomocí routeChangeNotification pro pozastavení při odpojení sluchátek.
  • Kategorie playAndRecord s režimem voiceChat — standard pro VoIP aplikace s potlačením ozvěny a AGC.

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é