Audio Session — mi ez, kategóriák és konfiguráció iOS-ben

Szerző: IT Sectr Megjelenés: 2026-05-24 Olvasási idő: 8 perc

Audio Session — az iOS központi mechanizmusa az alkalmazás audió viselkedésének kezelésére: rendszerrel való interakció, megszakítások kezelése és hang útvonalválasztása. Minden iOS-alkalmazás egyetlen audió munkamenetet kap, amely meghatározza, hogyan viselkedik a hang a képernyő lezárásakor, hívások alatt és Bluetooth csatlakoztatásakor. A Apple Developer Documentation, 2026 szerint az Audio Session kategórián és módón keresztül kerül konfigurálásra — helyes konfiguráció nélkül az alkalmazás nem biztos, hogy hangot játszik le a háttérben.

Főbb pontok

  • Audio Session (AVAudioSession) — az iOS rendszerobjektuma, amely az alkalmazás audió viselkedését kezeli az operációs rendszer szintjén.
  • A munkamenet kategóriája határozza meg az alapviselkedést: playback, record, ambient, playAndRecord és mások.
  • A módok és opciók pontosítják a viselkedést: default, voiceChat, videoRecording, allowBluetooth.
  • Megszakítás esetén (hívás, ébresztés) a munkamenet értesítést kap a NotificationCenter segítségével, interruptionType típussal.
  • A háttérben történő lejátszáshoz aktiválni kell a Background Modes — Audio, AirPlay and Picture in Picture funkciót.

Mi az Audio Session?

Audio Session — egyetlen AVAudioSession példány, amelyet a rendszer hoz létre az alkalmazás indításakor, és a teljes életciklusa alatt létezik. Közvetítőként működik az alkalmazás és az iOS audió rendszere között: a kategória konfigurációja határozza meg, hogy az alkalmazás játszhat-e le hangot a háttérben, hogy a hang elnémul-e hívás közben, és hogy mely eszközökre kerüljön ki az audió.

Ellentétben az Android Audio Focus-szal, ahol minden alkalmazás függetlenül kéri és engedi el a fókuszt, az iOS Audio Session központilag kezelt egyetlen munkameneten keresztül alkalmazásonként. A munkamenet aktiválásakor a rendszer automatikusan deaktiválja az előző alkalmazás munkamenetét, megszakítási értesítést küldve neki. Ez az építészeti különbség határozza meg a hangkezelés eltérő megközelítését a két platformon.

A WWDC 2024 Session 211 szerint az iOS-alkalmazások audió problémáinak körülbelül 40%-át az Audio Session helytelen konfigurációja okozza. A leggyakoribb hiba — az ambient kategória választása a playback helyett, ami miatt a hang eltűnik a képernyő lezárásakor.

Az AVAudioSession működési elve

Indításkor az alkalmazás megkapja a munkamenet sharedInstance-jét, beállítja a kategóriát a setCategory(_:mode:options:) híváson keresztül, és aktiválja a munkamenetet a setActive(true) segítségével. Az aktiválás után az iOS figyelembe veszi a kategória irányelveit az útvonalválasztáshoz. Ha egy másik alkalmazás aktiválja a saját munkamenetét, a jelenlegi értesítést kap az AudioSessionInterruptionType.began-ról a Notification.Name.AVAudioSessionInterruption segítségével.

Audio Session kategóriák

Kategória — az Audio Session fő paramétere, amely hat előre meghatározott viselkedési változatot határoz meg. A kategória kiválasztása az első és legfontosabb döntés az audió konfigurálásakor iOS-ben.

KategóriaMikor használjukHáttér audióNémítás mute-nál
ambientJátékok, háttér effektekNemIgen
playbackZene, podcastok, hangoskönyvekIgenNem
recordDiktafon, hangfelvételNemN/A
playAndRecordVoIP, hangüzenetekIgenNem
multiRouteDJ keverők, karaokeIgenNem
soloAmbientAlapértelmezett (iOS default)NemIgen

Playback kategória — a fő választás lejátszókhoz

Zenei és videó lejátszókhoz mindig a playback kategóriát használja. Ez a kategória lehetővé teszi: hang lejátszását zárt képernyővel, kikapcsolt néma kapcsolóval (fizikai gomb az iPhone házán) és minimalizált alkalmazással. A playback kategória nélkül a munkamenet deaktiválódik a képernyő lezárásakor vagy az alkalmazás minimalizálásakor.

Az ambient kategória játékokhoz és háttérhangokkal rendelkező alkalmazásokhoz alkalmas — lehetővé teszi más alkalmazások számára a lejátszás folytatását. Például, ha a felhasználó zenét hallgat és megnyit egy játékot ambient munkamenettel, a zene tovább szól a játék hangjai felett. Ez alapvető különbség az Androidhoz képest, ahol egy ilyen forgatókönyv explicit duck engedélyt igényel.

Hogyan kell beállítani az Audio Session-t

Az Audio Session konfigurálását minden lejátszás megkezdése előtt el kell végezni. Javasolt a munkamenet konfigurálása a application(_:didFinishLaunchingWithOptions:) metódusban vagy a lejátszó inicializálójában. A kategória konfigurálása után a munkamenetet aktiválni kell.

Audio Session alap konfiguráció Swift-ben

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Az Audio Session beállítása sikertelen: \(error.localizedDescription)")
}

Az options paraméter tartalmazza az allowBluetooth (kimenet Bluetooth fejhallgatóra) és a defaultToSpeaker (lejátszás hangszórón keresztül, nem a fülhallgatón) opciókat. Az allowBluetooth opció kötelező a Bluetooth fejhallgatókat támogató alkalmazások számára — enélkül a hang a beépített hangszórón keresztül is kiadódhat, még csatlakoztatott fejhallgató esetén is.

Konfiguráció felvételhez és lejátszáshoz (VoIP)

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

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

A playAndRecord kategória a voiceChat móddal optimalizálja az audió útvonalat hangkommunikációhoz: tartalmazza a visszhang elnyomást, automatikus erősítés szabályozást (AGC) és az optimális kodek kiválasztását. Az OverrideOutputAudioPort(.speaker) kikényszeríti a kimenetet a hangszórón keresztül még csatlakoztatott fejhallgató esetén is — hasznos kihangosított beszélgetésekhez.

A munkamenet aktiválása és deaktiválása

A setActive(true) hívás aktiválja a munkamenetet és értesíti a rendszert, hogy az alkalmazás audiót fog használni. A lejátszás szüneteltetésekor javasolt a munkamenet deaktiválása, hogy más alkalmazások hozzáférhessenek az audió adatfolyamhoz. Kivétel — hosszú háttérlejátszással rendelkező alkalmazások (zene, podcastok), ahol a munkamenet a teljes szám alatt aktív marad.

Fontos a hibák kezelése a setActive során. Ha egy másik magas prioritású munkamenet aktív (pl. Telefon hívás közben), a setActive hibát dobhat. Ebben az esetben meg kell várni az AudioSessionInterruptionType.ended értesítést, és meg kell ismételni az aktiválást.

Audio Session módok és irányelvek

A mód (mode) pontosítja a kategóriát és optimalizálja az audió útvonalat egy adott használati típushoz. Minden mód megváltoztatja az AGC, a visszhang elnyomás és a kodekek viselkedését. A módok nem helyettesítik a kategóriát, hanem kiegészítik azt — egy kategória különböző módokkal működhet.

  • default — standard mód zenéhez és videóhoz. AGC kikapcsolva, visszhang elnyomás minimális.
  • voiceChat — optimalizálás VoIP-hez. Tartalmazza a visszhang elnyomást, AGC-t, zajcsökkentést. Használja a playAndRecord kategóriával.
  • videoRecording — videófelvételhez. A felvétel minőségének elsőbbsége a lejátszással szemben. Használja a record vagy playAndRecord kategóriával.
  • measurement — audió mérésekhez. Minimális jelfeldolgozás, nincs AGC vagy visszhang elnyomás.
  • gameChat — hangos csevegéshez játékokban. Hasonló a voiceChat-hoz, de a játék hangjának elsőbbségével.
  • moviePlayback — filmnézéshez. Optimalizálás többcsatornás audióhoz (5.1, 7.1) és Dolby Atmos-hoz.

Audio Session kategória opciók

Az opciók finomhangolást biztosítanak a munkamenet viselkedéséhez. Minden opció egy jelző, amely másokkal kombinálható egy tömbben. Például a [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] lehetővé teszi a hang Bluetooth fejhallgatóra történő kimenetét, a hangszóró alapértelmezett használatát és a hangoskönyvekkel való keverést.

Az iOS 17+ -ban megjelent a spatialAudio opció, amely személyre szabott térhangzást aktivál az AirPods-okhoz az AVAudioSessionSpatialPreferences segítségével. A WWDC 2024 szerint a térhangzás 25%-kal növeli a zenei alkalmazások felhasználóinak elkötelezettségét az Apple tesztekben.

Megszakítások és hívások kezelése

Megszakítások (interruptions) — az Audio Session legfőbb különbsége az Android Audio Focus-szal szemben. Az iOS-ben a megszakítások a NotificationCenter segítségével kezelhetők az AVAudioSession.interruptionNotification-ra való feliratkozással. Az értesítés egy szótárt tartalmaz a megszakítás típusával: began vagy ended.

Feliratkozás a megszakítási értesítésekre

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

Az interruptionType.began fogadásakor a lejátszónak szüneteltetnie kell a lejátszást. Az interruptionType.ended esetén az interruptionOptionKey tulajdonság jelzi, hogy a lejátszó automatikusan folytathatja-e (shouldResume). Ha a felhasználó befejezte a hívást, shouldResume = true. Ha a hívás időtúllépés miatt ért véget — shouldResume = false, a folytatás nem engedélyezett.

Megszakítások kezelése más alkalmazásoktól

Amikor egy másik alkalmazás aktiválja az Audio Session-jét a playback kategóriával, a jelenlegi munkamenet megszakítási értesítést kap. Ha a másik alkalmazás ambient-et használ, a megszakítás nem történik meg — a hangok keverednek. Ez a viselkedés gyökeresen különbözik az Androidtól, ahol minden Audio Focus aktiválás LOSS eseményt okoz.

Azoknál az alkalmazásoknál, amelyeknek folytatniuk kell a lejátszást más munkamenetek aktiválásakor (pl. navigáció zenelejátszás közben), használja a .mixWithOthers opciót. Ez az opció lehetővé teszi a hang keverését más alkalmazásokkal, és a megszakítások nem kerülnek elküldésre. A MixWithOthers — a duck mód iOS megfelelője Androidban.

Hang útvonalválasztása és Bluetooth

Az Audio Session automatikusan kezeli a hang útvonalválasztását a beépített hangszórók, fejhallgatók, Bluetooth fejhallgatók és AirPlay eszközök között. Az alkalmazás nyomon követheti az aktuális útvonalat a currentRoute tulajdonság segítségével, és értesítéseket kaphat a változásokról az AVAudioSession.routeChangeNotification-on keresztül.

Bluetooth fejhallgató csatlakoztatásakor az iOS automatikusan átkapcsolja az audió kimenetet rájuk, ha a munkamenet az allowBluetooth opcióval van konfigurálva. Ezen opció nélkül a hang továbbra is a beépített hangszórón keresztül áramlik. Az iOS 16-tól kezdve az AirPods Pro csatlakoztatásakor a rendszer automatikusan bekapcsolja a ProMotion szinkronizációt a késleltetés csökkentése érdekében.

Az útvonalváltozás figyelése

A routeChangeNotification-ra való feliratkozás lehetővé teszi a reakciót a fejhallgatók csatlakoztatására és leválasztására. A Bluetooth fejhallgató leválasztásakor a lejátszónak szüneteltetnie kell a lejátszást — a felhasználó nem biztos, hogy számít arra, hogy a hang a telefon hangszórójából kezd el szólni. Az Apple HIG (2026) szerint ez kötelező viselkedés a zenei alkalmazások számára.

Az availableInputs és availableOutputs tulajdonságok visszaadják a rendelkezésre álló audió eszközök listáját a típusukkal együtt (builtInSpeaker, headphones, bluetoothA2DP, hdmi). A fejlesztő programozottan kiválaszthat egy adott eszközt az overrideOutputAudioPort segítségével egyedi útvonalválasztási forgatókönyvekhez.

Gyakran ismételt kérdések

Miben különbözik az Audio Session az Android Audio Focus-tól?

A legfőbb különbség — architektúra. Az Audio Session egy központosított munkamenet alkalmazásonként, amelyet egyszer kell konfigurálni. Az Android Audio Focus minden lejátszáskor kézi fókuszkérést igényel. Ezenkívül az iOS támogatja a keverést a mixWithOthers opcióval, míg Androidban a duck az egyetlen alternatíva a teljes leállításra.

Miért tűnik el a hang az iPhone képernyőjének lezárásakor?

A leggyakoribb ok — az Audio Session helytelen kategóriája. Ha az ambient vagy soloAmbient van kiválasztva, a hang leáll a képernyő lezárásakor. Váltsa át a kategóriát playback-re, és győződjön meg róla, hogy az Info.plist-ben hozzáadásra került a Background Modes — Audio, AirPlay, and Picture in Picture.

Hogyan engedhető meg, hogy két alkalmazás egyszerre játsszon iOS-ben?

Adja hozzá a .mixWithOthers opciót a setCategory-hoz. Ez lehetővé teszi az Ön alkalmazása hangjának keverését más aktív munkamenetekkel. Ezen opció nélkül az új alkalmazás megszakítja a jelenlegit. A MixWithOthers — a duck mód iOS megfelelője Androidban, de a hangerő teljes megőrzésével.

Hogyan lehet programozottan átkapcsolni a hangot Bluetooth hangszóróra?

Használja az overrideOutputAudioPort-ot nil értékkel az automatikus kiválasztáshoz. Kényszerített Bluetooth kimenethez: szerezze be az AVAudioSessionRouteDescription-t az availableOutputs-ból, válassza ki a .bluetoothA2DP típusú portot, és adja át az overrideOutputAudioPort-nak. Győződjön meg róla, hogy a munkamenet allowBluetooth opcióval van konfigurálva.

Meg kell hívni a setActive(false)-et a lejátszó szüneteltetésekor?

A legtöbb alkalmazás esetében — igen. A munkamenet deaktiválása szüneteltetéskor lehetővé teszi más alkalmazások számára az audió fókusz megszerzését. Kivétel — zenei lejátszók hosszú háttérlejátszással. Ha a szünet rövid (kevesebb mint 5 másodperc), jobb a munkamenetet aktívan hagyni a gyors folytatáshoz.

Összefoglalás

  • Audio Session (AVAudioSession) — egyetlen audió munkamenet alkalmazásonként iOS-ben, amely a hang viselkedését kezeli az operációs rendszer szintjén.
  • Hat kategória: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — meghatározzák az alap audió viselkedést.
  • A háttérben történő lejátszáshoz a playback kategória és a Background Modes kötelező az Info.plist-ben.
  • A megszakítások a NotificationCenter-en keresztül kezelhetők began (szünet) és ended (folytatás shouldResume esetén) típusokkal.
  • A .mixWithOthers opció bekapcsolja a hang keverését más alkalmazásokkal megszakítás nélkül.
  • Az útvonalválasztás automatikusan történik, de a routeChangeNotification segítségével figyelhető a fejhallgató leválasztásakor történő szüneteltetéshez.
  • A playAndRecord kategória a voiceChat móddal — szabvány a VoIP alkalmazások számára visszhang elnyomással és AGC-vel.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is