Audio Session — bu nədir, kateqoriyalar və iOS-da konfiqurasiya

Müəllif: IT Sectr Dərc olunub: 2026-05-24 Oxuma vaxtı: 8 dəq

Audio Session — iOS-un tətbiqin audio davranışını idarə etmək üçün mərkəzi mexanizmidir: sistemlə qarşılıqlı əlaqə, kəsilmələrin işlənməsi və səsin marşrutlaşdırılması. Hər bir iOS tətbiqi tək bir audio sessiya alır ki, bu da səsin ekran bloklandıqda, zənglər zamanı və Bluetooth qoşulduqda necə davranacağını müəyyən edir. Apple Developer Documentation, 2026 məlumatına görə, Audio Session kateqoriya və rejim vasitəsilə konfiqurasiya edilir — düzgün konfiqurasiya olmadan tətbiq fonda səs çalmağa bilər.

Əsas məqamlar

  • Audio Session (AVAudioSession) — iOS-un əməliyyat sistemi səviyyəsində tətbiqin audio davranışını idarə edən sistem obyekti.
  • Sessiya kateqoriyası əsas davranışı müəyyən edir: playback, record, ambient, playAndRecord və digərləri.
  • Rejimlər və seçimlər davranışı dəqiqləşdirir: default, voiceChat, videoRecording, allowBluetooth.
  • Kəsilmə zamanı (zəng, siqnal) sessiya NotificationCenter vasitəsilə interruptionType növü ilə bildiriş alır.
  • Fonda səsləndirmə üçün Background Modes — Audio, AirPlay and Picture in Picture aktivləşdirilməlidir.

Audio Session nədir?

Audio Session — sistem tərəfindən tətbiq işə salındıqda yaradılan və onun bütün həyat dövrü boyunca mövcud olan tək AVAudioSession nümunəsidir. O, tətbiq və iOS audio sistemi arasında vasitəçi rolunu oynayır: kateqoriya konfiqurasiyası tətbiqin fonda səs çala biləcəyini, səsin zəng zamanı susdurulacağını və audionun hansı cihazlara çıxarılacağını müəyyən edir.

Hər bir tətbiqin müstəqil olaraq fokus tələb etdiyi və sərbəst buraxdığı Android Audio Focus-dan fərqli olaraq, iOS Audio Session tətbiq başına bir sessiya vasitəsilə mərkəzləşdirilmiş şəkildə idarə olunur. Sessiya aktivləşdirildikdə, sistem avtomatik olaraq əvvəlki tətbiqin sessiyasını deaktiv edir və ona kəsilmə barədə bildiriş göndərir. Bu memarlıq fərqi iki platformada audionun işlənməsinə fərqli yanaşmanı müəyyən edir.

WWDC 2024 Session 211 məlumatına görə, iOS tətbiqlərində audio problemlərinin təxminən 40%-i Audio Session-ın səhv konfiqurasiyasından qaynaqlanır. Ən çox yayılmış səhv — playback əvəzinə ambient kateqoriyasının seçilməsidir ki, bu da ekran bloklandıqda səsin itməsinə səbəb olur.

AVAudioSession-un iş prinsipi

Tətbiq işə salındıqda sessiyanın sharedInstance-ni alır, setCategory(_:mode:options:) çağırışı vasitəsilə kateqoriyanı təyin edir və setActive(true) vasitəsilə sessiyanı aktivləşdirir. Aktivləşdirmədən sonra iOS marşrutlaşdırma üçün kateqoriya siyasətlərini nəzərə alır. Əgər başqa bir tətbiq öz sessiyasını aktivləşdirirsə, cari tətbiq Notification.Name.AVAudioSessionInterruption vasitəsilə AudioSessionInterruptionType.began bildirişini alır.

Audio Session kateqoriyaları

Kateqoriya — Audio Session-ın altı əvvəlcədən təyin edilmiş davranış variantını müəyyən edən əsas parametridir. Kateqoriya seçimi iOS-da audio konfiqurasiyasında ilk və ən vacib qərardır.

KateqoriyaNə vaxt istifadə etməliFonda audioSəssiz rejimdə susdurma
ambientOyunlar, fon effektləriXeyrBəli
playbackMusiqi, podkastlar, audiokitablarBəliXeyr
recordSəs yazıcısı, səs yazısıXeyrY/T
playAndRecordVoIP, səsli mesajlarBəliXeyr
multiRouteDJ mikserləri, karaokeBəliXeyr
soloAmbientSusmaya görə (iOS default)XeyrBəli

Playback kateqoriyası — pleyerlər üçün əsas seçim

Musiqi və video pleyerlər üçün həmişə playback istifadə edin. Bu kateqoriya aşağıdakılara imkan verir: bloklanmış ekranda səsləndirmə, söndürülmüş səssiz keçid (iPhone gövdəsində fiziki düymə) ilə və minimuma endirilmiş tətbiqdə səsləndirmə. Playback kateqoriyası olmadan sessiya ekran bloklandıqda və ya tətbiq minimuma endirildikdə deaktiv olur.

Ambient kateqoriyası oyunlar və fon səsləri olan tətbiqlər üçün uyğundur — digər tətbiqlərə səsləndirməni davam etdirməyə imkan verir. Məsələn, istifadəçi musiqi dinləyirsə və ambient sessiyası olan oyunu açırsa, musiqi oyun səsləri ilə birlikdə çalmağa davam edir. Bu, Android-dən prinsipial fərqdir, burada belə ssenari açıq duck icazəsi tələb edir.

Audio Session-ı necə konfiqurasiya etmək

Audio Session konfiqurasiyası hər hansı səsləndirmə başlamazdan əvvəl yerinə yetirilməlidir. Sessiyanı application(_:didFinishLaunchingWithOptions:) metodunda və ya pleyerin inisializatorunda konfiqurasiya etmək tövsiyə olunur. Kateqoriyanı konfiqurasiya etdikdən sonra sessiya aktivləşdirilməlidir.

Swift-də Audio Session-ın əsas konfiqurasiyası

swift
import AVFAudio

let session = AVAudioSession.sharedInstance

do {
    try session.setCategory(
        playback,
        mode: default,
        options: [allowBluetooth, defaultToSpeaker]
    )
    try session.setActive(true)
} catch {
    print("Audio Session quraşdırılması uğursuz oldu: \(error.localizedDescription)")
}

Options parametri allowBluetooth (Bluetooth qulaqlığına çıxış) və defaultToSpeaker (danışıq dinamiki əvəzinə səsucaldandan səsləndirmə) daxildir. allowBluetooth seçimi Bluetooth qulaqlıqlarını dəstəkləyən tətbiqlər üçün məcburidir — onsuz səs hətta qulaqlıq qoşulduqda belə daxili səsucaldana çıxa bilər.

Yazma və səsləndirmə üçün konfiqurasiya (VoIP)

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

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

PlayAndRecord kateqoriyası voiceChat rejimi ilə səs rabitəsi üçün audio yolunu optimallaşdırır: əks-sədanın qarşısının alınması, avtomatik gücləndirmə tənzimlənməsi (AGC) və optimal kodek seçimi daxildir. OverrideOutputAudioPort(.speaker) hətta qulaqlıq qoşulduqda belə səsi səsucaldana verməyə məcbur edir — səsli danışıq üçün faydalıdır.

Sessiyanın aktivləşdirilməsi və deaktivləşdirilməsi

SetActive(true) çağırışı sessiyanı aktivləşdirir və sistemə tətbiqin audiodan istifadə edəcəyi barədə məlumat verir. Səsləndirmə dayandırıldıqda, digər tətbiqlərin audio axını əldə edə bilməsi üçün sessiyanı deaktiv etmək tövsiyə olunur. İstisna — uzunmüddətli fon səsləndirməsi olan tətbiqlər (musiqi, podkastlar), burada sessiya bütün trek boyunca aktiv qalır.

SetActive zamanı səhvləri idarə etmək vacibdir. Əgər yüksək prioritetli başqa sessiya aktivdirsə (məsələn, zəng zamanı Telefon), setActive səhv verə bilər. Bu halda AudioSessionInterruptionType.ended bildirişini gözləmək və aktivləşdirməni təkrarlamaq lazımdır.

Audio Session rejimləri və siyasətləri

Rejim (mode) kateqoriyanı dəqiqləşdirir və audio yolunu konkret istifadə növü üçün optimallaşdırır. Hər bir rejim AGC, əks-sədanın qarşısının alınması və kodeklərin davranışını dəyişir. Rejimlər kateqoriyanı əvəz etmir, əksinə tamamlayır — bir kateqoriya müxtəlif rejimlərlə işləyə bilər.

  • default — musiqi və video üçün standart rejim. AGC söndürülüb, əks-sədanın qarşısının alınması minimaldır.
  • voiceChat — VoIP üçün optimallaşdırma. Əks-sədanın qarşısının alınması, AGC, səs-küyün azaldılması daxildir. PlayAndRecord kateqoriyası ilə istifadə edin.
  • videoRecording — video yazmaq üçün. Yazma keyfiyyətinə səsləndirmədən üstünlük verilir. Record və ya playAndRecord kateqoriyası ilə istifadə edin.
  • measurement — audio ölçmələri üçün. Minimal siqnal emalı, heç bir AGC və ya əks-sədanın qarşısının alınması yoxdur.
  • gameChat — oyunlarda səsli söhbət üçün. VoiceChat-ə bənzəyir, lakin oyun səsinə üstünlük verilir.
  • moviePlayback — filmlərə baxmaq üçün. Çoxkanallı audio (5.1, 7.1) və Dolby Atmos üçün optimallaşdırma.

Audio Session kateqoriya seçimləri

Seçimlər sessiya davranışının incə tənzimlənməsini təmin edir. Hər bir seçim massivdə digərləri ilə birləşdirilən bayraqdır. Məsələn, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] səsi Bluetooth qulaqlığına çıxarmağa, susmaya görə səsucaldandan istifadə etməyə və audiokitablarla miksinq etməyə imkan verir.

iOS 17+-da AVAudioSessionSpatialPreferences vasitəsilə AirPods üçün fərdiləşdirilmiş məkan səsini aktivləşdirən spatialAudio seçimi peyda oldu. WWDC 2024 məlumatına görə, məkan səsi Apple testlərində musiqi tətbiqləri istifadəçilərinin cəlb olunmasını 25% artırır.

Kəsilmələrin və zənglərin işlənməsi

Kəsilmələr (interruptions) — Audio Session-un Android Audio Focus-dan əsas fərqidir. iOS-da kəsilmələr AVAudioSession.interruptionNotification-a abunə olmaqla NotificationCenter vasitəsilə işlənir. Bildiriş kəsilmə növü olan lüğət ehtiva edir: began və ya ended.

Kəsilmə bildirişlərinə abunə olmaq

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

InterruptionType.began alındıqda pleyer səsləndirməni dayandırmalıdır. InterruptionType.ended zamanı interruptionOptionKey xassəsi pleyerin avtomatik bərpa edə biləcəyini göstərir (shouldResume). İstifadəçi zəngi bitiribsə, shouldResume = true. Zəng vaxt aşımına görə bitibsə — shouldResume = false, bərpa etmək olmaz.

Digər tətbiqlərdən gələn kəsilmələrin işlənməsi

Başqa bir tətbiq playback kateqoriyası ilə öz Audio Session-unu aktivləşdirdikdə, cari sessiya kəsilmə barədə bildiriş alır. Əgər digər tətbiq ambient istifadə edirsə, kəsilmə baş vermir — səslər miksinq olunur. Bu davranış Android-dən köklü şəkildə fərqlənir, burada hər hansı Audio Focus aktivləşdirilməsi LOSS hadisəsinə səbəb olur.

Digər sessiyalar aktivləşdirildikdə səsləndirməni davam etdirməli olan tətbiqlər üçün (məsələn, musiqi çalarkən naviqasiya) .mixWithOthers seçimindən istifadə edin. Bu seçim səsin digər tətbiqlərlə miksinqinə icazə verir və kəsilmələr göndərilmir. MixWithOthers — Android-də duck rejiminin iOS analoqudur.

Səsin marşrutlaşdırılması və Bluetooth

Audio Session daxili səsucaldanlar, qulaqlıqlar, Bluetooth qulaqlıqları və AirPlay cihazları arasında səsin marşrutlaşdırılmasını avtomatik idarə edir. Tətbiq cari marşrutu currentRoute xassəsi vasitəsilə izləyə və AVAudioSession.routeChangeNotification vasitəsilə dəyişikliklər barədə bildirişlər ala bilər.

Bluetooth qulaqlıqları qoşulduqda, iOS sessiya allowBluetooth seçimi ilə konfiqurasiya edilibsə, avtomatik olaraq audio çıxışını onlara keçir. Bu seçim olmadan səs daxili səsucaldandan axmağa davam edir. iOS 16-dan başlayaraq, AirPods Pro qoşulduqda sistem gecikməni azaltmaq üçün avtomatik olaraq ProMotion sinxronizasiyasını aktivləşdirir.

Marşrut dəyişikliyinin monitorinqi

RouteChangeNotification-a abunə olmaq qulaqlıqların qoşulması və ayrılmasına reaksiya verməyə imkan verir. Bluetooth qulaqlığı ayrıldıqda pleyer səsləndirməni dayandırmalıdır — istifadəçi səsin telefon dinamikindən çalmağa başlayacağını gözləməyə bilər. Apple HIG (2026) məlumatına görə, bu musiqi tətbiqləri üçün məcburi davranışdır.

AvailableInputsavailableOutputs xassələri mövcud audio cihazlarının siyahısını onların növləri ilə qaytarır (builtInSpeaker, headphones, bluetoothA2DP, hdmi). Tərtibatçı fərdi marşrutlaşdırma ssenariləri üçün overrideOutputAudioPort vasitəsilə proqram olaraq konkret cihazı seçə bilər.

Tez-tez verilən suallar

Audio Session Android Audio Focus-dan nə ilə fərqlənir?

Əsas fərq — memarlıq. Audio Session — tətbiq başına bir mərkəzləşdirilmiş sessiyadır, bir dəfə konfiqurasiya edilir. Android-də Audio Focus hər səsləndirmə zamanı əl ilə fokus tələb edir. Bundan əlavə, iOS mixWithOthers seçimi vasitəsilə miksinqi dəstəkləyir, Android-də isə duck tam dayandırmanın yeganə alternatividir.

Niyə iPhone ekranı bloklandıqda səs itir?

Ən çox yayılmış səbəb — Audio Session-un səhv kateqoriyası. Əgər ambient və ya soloAmbient seçilibsə, səs ekran bloklandıqda dayanır. Kateqoriyanı playback-ə dəyişin və Info.plist-də Background Modes — Audio, AirPlay, and Picture in Picture əlavə olunduğundan əmin olun.

iOS-da iki tətbiqin eyni anda səs çalmasına necə icazə vermək olar?

SetCategory-də .mixWithOthers seçimini əlavə edin. Bu, tətbiqinizin səsinin digər aktiv sessiyalarla miksinqinə icazə verəcək. Bu seçim olmadan yeni tətbiq cari tətbiqi kəsir. MixWithOthers — Android-də duck rejiminin analoqudur, lakin səs səviyyəsi tam saxlanılmaqla.

Bluetooth dinamikinə səsi proqram olaraq necə keçirmək olar?

Avtomatik seçim üçün overrideOutputAudioPort-u nil ilə istifadə edin. Bluetooth-a məcburi çıxış üçün: availableOutputs-dan AVAudioSessionRouteDescription əldə edin, .bluetoothA2DP növü olan portu seçin və overrideOutputAudioPort-a ötürün. Sessiyanın allowBluetooth ilə konfiqurasiya edildiyindən əmin olun.

Pleyer dayandırıldıqda setActive(false) çağırmaq lazımdırmı?

Əksər tətbiqlər üçün — bəli. Dayandırma zamanı sessiyanın deaktiv edilməsi digər tətbiqlərə audio fokusu əldə etməyə imkan verir. İstisna — uzunmüddətli fon səsləndirməsi olan musiqi pleyerləri. Əgər fasilə qısadırsa (5 saniyədən az), sürətli bərpa üçün sessiyanı aktiv saxlamaq daha yaxşıdır.

Nəticə

  • Audio Session (AVAudioSession) — iOS-da əməliyyat sistemi səviyyəsində səsin davranışını idarə edən tətbiq başına tək audio sessiya.
  • Altı kateqoriya: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — əsas audio davranışını müəyyən edir.
  • Fonda səsləndirmə üçün playback kateqoriyası və Info.plist-də Background Modes məcburidir.
  • Kəsilmələr NotificationCenter vasitəsilə began (fasilə) və ended (shouldResume ilə bərpa) növləri ilə işlənir.
  • .MixWithOthers seçimi kəsilmədən digər tətbiqlərlə səs miksinqini aktivləşdirir.
  • Marşrutlaşdırma avtomatik idarə olunur, lakin qulaqlıq ayrıldıqda dayandırma üçün routeChangeNotification vasitəsilə izlənilir.
  • PlayAndRecord kateqoriyası voiceChat rejimi ilə — əks-sədanın qarşısının alınması və AGC ilə VoIP tətbiqləri üçün standart.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun