Audio Session — ano ito, mga kategorya at configuration sa iOS

May-akda: IT Sectr Nai-publish: 2026-05-24 Oras ng pagbabasa: 8 min

Audio Session — ang sentral na mekanismo ng iOS para sa pamamahala ng audio behavior ng aplikasyon: interaksyon sa system, paghawak ng mga interruptions, at pag-routing ng tunog. Bawat iOS application ay nakakakuha ng iisang audio session na nagtatakda kung paano kumikilos ang tunog sa pag-lock ng screen, mga tawag, at pagkonekta ng Bluetooth. Ayon sa Apple Developer Documentation, 2026, ang Audio Session ay naka-configure sa pamamagitan ng kategorya at mode — kung walang tamang configuration, maaaring hindi mag-play ng tunog sa background ang application.

Mga pangunahing punto

  • Audio Session (AVAudioSession) — system object ng iOS na namamahala sa audio behavior ng application sa antas ng operating system.
  • Ang kategorya ng session ay nagtatakda ng pangunahing behavior: playback, record, ambient, playAndRecord at iba pa.
  • Ang mga mode at opsyon ay nagpapalinaw ng behavior: default, voiceChat, videoRecording, allowBluetooth.
  • Sa interruption (tawag, alarm) ang session ay tumatanggap ng notification sa pamamagitan ng NotificationCenter na may uri na interruptionType.
  • Para sa background playback, kailangan i-activate ang Background Modes — Audio, AirPlay and Picture in Picture.

Ano ang Audio Session?

Audio Session — ay isang instance ng AVAudioSession na nilikha ng system sa paglunsad ng application at umiiral sa buong lifecycle nito. Ito ay kumikilos bilang tagapamagitan sa pagitan ng application at ng iOS audio system: ang configuration ng kategorya ay nagtatakda kung ang application ay pinapayagang mag-play ng tunog sa background, kung ang tunog ay pipigilin sa tawag, at sa anong mga device ilalabas ang audio.

Hindi tulad ng Android Audio Focus, kung saan ang bawat application ay independiyenteng humihiling at naglalabas ng focus, ang iOS Audio Session ay sentralisadong pinamamahalaan sa pamamagitan ng isang session bawat application. Sa pag-activate ng session, awtomatikong dina-deactivate ng system ang session ng nakaraang application, na nagpapadala ng notification ng interruption. Ang pagkakaibang ito sa arkitektura ay nagtatakda ng ibang approach sa paghawak ng audio sa dalawang platform.

Ayon sa WWDC 2024 Session 211, humigit-kumulang 40% ng mga problema sa audio sa iOS applications ay sanhi ng maling configuration ng Audio Session. Ang pinakakaraniwang pagkakamali — pagpili ng kategoryang ambient sa halip na playback, na nagiging sanhi ng pagkawala ng tunog sa pag-lock ng screen.

Prinsipyo ng paggana ng AVAudioSession

Sa paglunsad, ang application ay kumukuha ng sharedInstance ng session, itinatakda ang kategorya sa pamamagitan ng tawag na setCategory(_:mode:options:) at ina-activate ang session sa pamamagitan ng setActive(true). Pagkatapos ng activation, isinasaalang-alang ng iOS ang mga patakaran ng kategorya para sa routing. Kung ang ibang application ay nag-activate ng kanyang session, ang kasalukuyan ay tumatanggap ng notification na AudioSessionInterruptionType.began sa pamamagitan ng Notification.Name.AVAudioSessionInterruption.

Mga kategorya ng Audio Session

Kategorya — ang pangunahing parameter ng Audio Session, na nagtatakda ng anim na paunang natukoy na variant ng behavior. Ang pagpili ng kategorya ay ang una at pinakamahalagang desisyon sa configuration ng audio sa iOS.

KategoryaKailan gagamitinBackground audioPigil sa mute
ambientMga laro, background effectsHindiOo
playbackMusika, podcast, audiobookOoHindi
recordDictaphone, pag-record ng tunogHindiN/A
playAndRecordVoIP, voice messageOoHindi
multiRouteDJ mixer, karaokeOoHindi
soloAmbientDefault (iOS default)HindiOo

Kategoryang playback — pangunahing pagpipilian para sa mga player

Para sa mga music at video player, palaging gamitin ang playback. Ang kategoryang ito ay nagpapahintulot: mag-play ng tunog na naka-lock ang screen, na naka-off ang mute switch (physical button sa katawan ng iPhone) at naka-minimize ang application. Kung walang kategoryang playback, ang session ay dade-activate sa pag-lock ng screen o pag-minimize ng application.

Ang kategoryang ambient ay angkop para sa mga laro at application na may background sounds — pinapayagan nito ang ibang application na magpatuloy sa pag-play. Halimbawa, kung ang user ay nakikinig ng musika at nagbukas ng laro na may ambient session, ang musika ay patuloy na tumutugtog kasama ng mga tunog ng laro. Ito ay isang pangunahing pagkakaiba sa Android, kung saan ang ganitong senaryo ay nangangailangan ng tahasang pahintulot ng duck.

Paano i-configure ang Audio Session

Ang configuration ng Audio Session ay dapat gawin bago magsimula ang anumang playback. Inirerekomenda na i-configure ang session sa method na application(_:didFinishLaunchingWithOptions:) o sa initializer ng player. Pagkatapos i-configure ang kategorya, kailangang i-activate ang session.

Basic configuration ng Audio Session sa Swift

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Nag-fail ang setup ng Audio Session: \(error.localizedDescription)")
}

Ang parameter na options ay may kasamang allowBluetooth (output sa Bluetooth headset) at defaultToSpeaker (pag-play sa pamamagitan ng speaker, hindi earpiece). Ang opsyong allowBluetooth ay kinakailangan para sa mga application na sumusuporta sa Bluetooth headphones — kung wala ito, ang tunog ay maaaring ilabas sa pamamagitan ng internal speaker kahit na naka-konekta ang headset.

Configuration para sa pag-record at pag-play (VoIP)

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

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

Ang kategoryang playAndRecord na may mode na voiceChat ay nag-o-optimize ng audio path para sa voice communication: kasama ang echo suppression, automatic gain control (AGC), at pagpili ng optimal na codec. Ang OverrideOutputAudioPort(.speaker) ay pumipilit ng output sa pamamagitan ng speaker kahit na naka-konekta ang headset — kapaki-pakinabang para sa handsfree na tawag.

Activation at deactivation ng session

Ang tawag na setActive(true) ay nag-a-activate ng session at nagpapaalam sa system na ang application ay gagamit ng audio. Sa pag-pause ng playback, inirerekomenda na i-deactivate ang session upang ang ibang application ay makakuha ng audio stream. Exception — mga application na may mahabang background playback (musika, podcast), kung saan ang session ay nananatiling aktibo sa buong track.

Mahalagang hawakan ang mga error sa setActive. Kung ang ibang session na may mataas na priority ay aktibo (hal., Telepono sa tawag), ang setActive ay maaaring maglabas ng error. Sa kasong ito, kailangang maghintay ng notification na AudioSessionInterruptionType.ended at ulitin ang activation.

Mga mode at patakaran ng Audio Session

Ang mode ay nagpapalinaw ng kategorya at nag-o-optimize ng audio path para sa partikular na uri ng paggamit. Bawat mode ay nagbabago ng behavior ng AGC, echo suppression, at codec. Ang mga mode ay hindi pumapalit sa kategorya, kundi nagpupuno dito — isang kategorya ay maaaring gumana sa iba't ibang mode.

  • default — standard mode para sa musika at video. AGC naka-off, echo suppression minimal.
  • voiceChat — optimization para sa VoIP. Kasama ang echo suppression, AGC, noise reduction. Gamitin sa kategoryang playAndRecord.
  • videoRecording — para sa pag-record ng video. Priority ang kalidad ng record kaysa playback. Gamitin sa kategoryang record o playAndRecord.
  • measurement — para sa audio measurements. Minimal na signal processing, walang AGC o echo suppression.
  • gameChat — para sa voice chat sa mga laro. Katulad ng voiceChat, ngunit may priority ang tunog ng laro.
  • moviePlayback — para sa panonood ng pelikula. Optimization para sa multi-channel audio (5.1, 7.1) at Dolby Atmos.

Mga opsyon ng kategorya ng Audio Session

Ang mga opsyon ay nagbibigay ng fine-tuning ng behavior ng session. Bawat opsyon ay flag na pinagsama-sama sa iba sa array. Halimbawa, ang [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] ay nagpapahintulot ng output ng tunog sa Bluetooth headset, paggamit ng speaker bilang default, at pagmi-mix sa mga audiobook.

Sa iOS 17+ lumitaw ang opsyong spatialAudio, na nag-a-activate ng personalized na spatial sound para sa AirPods sa pamamagitan ng AVAudioSessionSpatialPreferences. Ayon sa WWDC 2024, ang spatial sound ay nagpapataas ng engagement ng mga user ng music applications ng 25% sa Apple tests.

Paghawak ng mga interruption at tawag

Mga interruption — ang pangunahing pagkakaiba ng Audio Session at Android Audio Focus. Sa iOS, ang mga interruption ay hinahawakan sa pamamagitan ng NotificationCenter sa pag-subscribe sa AVAudioSession.interruptionNotification. Ang notification ay naglalaman ng diksyunaryo na may uri ng interruption: began o ended.

Pag-subscribe sa mga notification ng interruption

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

Sa pagtanggap ng interruptionType.began, ang player ay dapat mag-pause ng playback. Sa interruptionType.ended, ang property na interruptionOptionKey ay nagpapakita kung ang player ay maaaring awtomatikong mag-resume (shouldResume). Kung tinapos ng user ang tawag, shouldResume = true. Kung ang tawag ay natapos dahil sa timeout — shouldResume = false, hindi pinapayagang mag-resume.

Paghawak ng mga interruption mula sa ibang application

Kapag ang ibang application ay nag-activate ng kanyang Audio Session na may kategoryang playback, ang kasalukuyang session ay tumatanggap ng notification ng interruption. Kung ang ibang application ay gumagamit ng ambient, walang interruption na nangyayari — ang mga tunog ay nami-mix. Ang behavior na ito ay lubhang naiiba sa Android, kung saan ang bawat activation ng Audio Focus ay nagdudulot ng LOSS event.

Para sa mga application na dapat magpatuloy sa playback sa activation ng ibang session (hal., navigation habang nagpe-play ang musika), gamitin ang opsyong .mixWithOthers. Ang opsyong ito ay nagpapahintulot ng pagmi-mix ng tunog sa ibang application, at hindi ipinapadala ang mga interruption. Ang MixWithOthers — iOS counterpart ng duck mode sa Android.

Pag-routing ng tunog at Bluetooth

Awtomatikong pinamamahalaan ng Audio Session ang pag-routing ng tunog sa pagitan ng internal speaker, headphones, Bluetooth headset, at AirPlay devices. Maaaring subaybayan ng application ang kasalukuyang ruta sa pamamagitan ng property na currentRoute at makatanggap ng mga notification ng pagbabago sa pamamagitan ng AVAudioSession.routeChangeNotification.

Sa pagkonekta ng Bluetooth headphones, awtomatikong inililipat ng iOS ang audio output sa mga ito kung ang session ay naka-configure na may opsyong allowBluetooth. Kung wala ang opsyong ito, ang tunog ay patuloy na dumadaloy sa pamamagitan ng internal speaker. Simula iOS 16, sa pagkonekta ng AirPods Pro, awtomatikong ina-activate ng system ang ProMotion synchronization para mabawasan ang latency.

Pag-monitor ng pagbabago ng ruta

Ang pag-subscribe sa routeChangeNotification ay nagpapahintulot ng reaksyon sa pagkonekta at pag-disconnect ng headphones. Sa pag-disconnect ng Bluetooth headset, ang player ay dapat mag-pause ng playback — maaaring hindi inaasahan ng user na magsisimulang tumugtog ang tunog mula sa speaker ng telepono. Ayon sa Apple HIG (2026), ito ay mandatoryong behavior para sa mga music application.

Ang mga property na availableInputs at availableOutputs ay nagbabalik ng listahan ng mga available na audio device kasama ang kanilang mga uri (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Ang developer ay maaaring programmatically pumili ng partikular na device sa pamamagitan ng overrideOutputAudioPort para sa custom routing scenarios.

Mga madalas itanong

Paano naiiba ang Audio Session sa Android Audio Focus?

Ang pangunahing pagkakaiba — arkitektura. Ang Audio Session ay isang sentralisadong session bawat application, na naka-configure nang isang beses. Ang Audio Focus sa Android ay nangangailangan ng manu-manong paghiling ng focus sa bawat playback. Bukod pa rito, sinusuportahan ng iOS ang pagmi-mix sa pamamagitan ng opsyong mixWithOthers, habang sa Android ang duck ay ang tanging alternatibo sa kumpletong paghinto.

Bakit nawawala ang tunog sa pag-lock ng screen ng iPhone?

Ang pinakakaraniwang dahilan — maling kategorya ng Audio Session. Kung napili ang ambient o soloAmbient, hihinto ang tunog sa pag-lock ng screen. Palitan ang kategorya sa playback at tiyaking idinagdag sa Info.plist ang Background Modes — Audio, AirPlay, and Picture in Picture.

Paano payagan ang dalawang application na maglaro nang sabay sa iOS?

Idagdag ang opsyong .mixWithOthers sa setCategory. Ito ay magpapahintulot sa pagmi-mix ng tunog ng iyong application sa iba pang aktibong session. Kung wala ang opsyong ito, ang bagong application ay maaaring makagambala sa kasalukuyan. Ang MixWithOthers — katumbas ng duck mode sa Android, ngunit may ganap na pagpapanatili ng volume.

Paano programmatically ilipat ang tunog sa Bluetooth speaker?

Gamitin ang overrideOutputAudioPort na may nil para sa awtomatikong pagpili. Para sa sapilitang output sa Bluetooth: kumuha ng AVAudioSessionRouteDescription mula sa availableOutputs, pumili ng port na may uri na .bluetoothA2DP at ipasa ito sa overrideOutputAudioPort. Tiyaking naka-configure ang session na may allowBluetooth.

Kailangan bang tawagan ang setActive(false) sa pag-pause ng player?

Para sa karamihan ng application — oo. Ang pag-deactivate ng session sa pause ay nagpapahintulot sa ibang application na makakuha ng audio focus. Exception — music player na may mahabang background playback. Kung ang pause ay maikli (mas mababa sa 5 segundo), mas mabuting iwanang aktibo ang session para sa mabilis na pag-resume.

Buod

  • Audio Session (AVAudioSession) — isang audio session bawat application sa iOS na namamahala sa behavior ng tunog sa antas ng operating system.
  • Anim na kategorya: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — nagtatakda ng pangunahing audio behavior.
  • Para sa background playback, kinakailangan ang kategoryang playback at Background Modes sa Info.plist.
  • Ang mga interruption ay hinahawakan sa pamamagitan ng NotificationCenter na may mga uri na began (pause) at ended (resume sa shouldResume).
  • Ang opsyong .mixWithOthers ay nag-a-activate ng pagmi-mix ng tunog sa ibang application nang walang interruption.
  • Ang routing ay awtomatikong pinamamahalaan, ngunit mino-monitor sa pamamagitan ng routeChangeNotification para mag-pause sa pag-disconnect ng headphones.
  • Ang kategoryang playAndRecord na may mode na voiceChat — standard para sa VoIP applications na may echo suppression at AGC.

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din