Audio Session — यह क्या है, श्रेणियाँ और iOS में कॉन्फ़िगरेशन

लेखक: IT Sectr प्रकाशित: 2026-05-24 पढ़ने का समय: 8 मिनट

Audio Session, iOS में एप्लिकेशन के ऑडियो व्यवहार को प्रबंधित करने के लिए केंद्रीय तंत्र है: सिस्टम के साथ इंटरैक्शन, रुकावटों को संभालना और ऑडियो रूटिंग। प्रत्येक iOS एप्लिकेशन को एक एकल ऑडियो सत्र मिलता है जो यह निर्धारित करता है कि स्क्रीन लॉक होने पर, कॉल के दौरान और Bluetooth कनेक्ट करते समय ध्वनि कैसे व्यवहार करती है। Apple Developer Documentation, 2026 के अनुसार, Audio Session को एक श्रेणी और मोड के माध्यम से कॉन्फ़िगर किया जाता है — सही कॉन्फ़िगरेशन के बिना, एप्लिकेशन पृष्ठभूमि में ध्वनि नहीं चला सकता।

मुख्य बिंदु

  • Audio Session (AVAudioSession) iOS में एक सिस्टम ऑब्जेक्ट है जो OS स्तर पर एप्लिकेशन के ऑडियो व्यवहार को प्रबंधित करता है।
  • सत्र श्रेणी मूल व्यवहार को परिभाषित करती है: playback, record, ambient, playAndRecord और अन्य।
  • मोड और विकल्प व्यवहार को परिष्कृत करते हैं: default, voiceChat, videoRecording, allowBluetooth
  • रुकावट (कॉल, अलार्म) पर सत्र को NotificationCenter के माध्यम से interruptionType प्रकार के साथ एक सूचना मिलती है।
  • पृष्ठभूमि में चलाने के लिए, Background Modes — Audio, AirPlay and Picture in Picture को सक्रिय करना आवश्यक है।

Audio Session क्या है?

Audio Session AVAudioSession का एक एकल उदाहरण है जो सिस्टम द्वारा तब बनाया जाता है जब कोई एप्लिकेशन लॉन्च होता है और अपने पूरे जीवनचक्र में मौजूद रहता है। यह एप्लिकेशन और iOS ऑडियो सिस्टम के बीच एक मध्यस्थ के रूप में कार्य करता है: श्रेणी कॉन्फ़िगरेशन यह निर्धारित करता है कि एप्लिकेशन को पृष्ठभूमि में ध्वनि चलाने की अनुमति है या नहीं, क्या कॉल के दौरान ध्वनि म्यूट की जाएगी, और किन उपकरणों पर ऑडियो आउटपुट करना है।

Android Audio Focus के विपरीत, जहाँ प्रत्येक एप्लिकेशन स्वतंत्र रूप से फ़ोकस का अनुरोध और जारी करता है, iOS Audio Session को प्रति एप्लिकेशन एक सत्र के माध्यम से केंद्रीय रूप से प्रबंधित किया जाता है। जब कोई सत्र सक्रिय होता है, सिस्टम स्वचालित रूप से पिछले एप्लिकेशन के सत्र को निष्क्रिय कर देता है, उसे एक रुकावट सूचना भेजता है। यह आर्किटेक्चरल अंतर दो प्लेटफार्मों पर ऑडियो प्रबंधन के विभिन्न दृष्टिकोणों को परिभाषित करता है।

WWDC 2024 सत्र 211 के अनुसार, iOS एप्लिकेशन में लगभग 40% ऑडियो समस्याएँ गलत Audio Session कॉन्फ़िगरेशन के कारण होती हैं। सबसे आम गलती ambient श्रेणी के बजाय playback चुनना है, जिसके कारण स्क्रीन लॉक होने पर ध्वनि गायब हो जाती है।

AVAudioSession कैसे काम करता है

लॉन्च होने पर, एप्लिकेशन सत्र का sharedInstance प्राप्त करता है, setCategory(_:mode:options:) कॉल के माध्यम से श्रेणी सेट करता है, और setActive(true) के माध्यम से सत्र को सक्रिय करता है। सक्रियण के बाद, iOS रूटिंग के लिए श्रेणी नीतियों पर विचार करता है। यदि कोई अन्य एप्लिकेशन अपना सत्र सक्रिय करता है, तो वर्तमान को Notification.Name.AVAudioSessionInterruption के माध्यम से AudioSessionInterruptionType.began सूचना मिलती है।

Audio Session की श्रेणियाँ

श्रेणी Audio Session का मुख्य पैरामीटर है, जो छह पूर्वनिर्धारित व्यवहार विकल्पों को परिभाषित करती है। श्रेणी चुनना iOS में ऑडियो सेट करते समय पहला और सबसे महत्वपूर्ण निर्णय है।

श्रेणीकब उपयोग करेंपृष्ठभूमि ऑडियोम्यूट स्विच प्रभावित करता है
ambientगेम, पृष्ठभूमि प्रभावनहींहाँ
playbackसंगीत, पॉडकास्ट, ऑडियोबुकहाँनहीं
recordवॉयस मेमो, ऑडियो रिकॉर्डिंगनहींलागू नहीं
playAndRecordVoIP, वॉयस संदेशहाँनहीं
multiRouteDJ मिक्सर, कराओकेहाँनहीं
soloAmbientडिफ़ॉल्ट (iOS default)नहींहाँ

Playback श्रेणी — प्लेयर के लिए मुख्य विकल्प

संगीत और वीडियो प्लेयर के लिए, हमेशा playback का उपयोग करें। यह श्रेणी अनुमति देती है: स्क्रीन लॉक होने पर, म्यूट स्विच बंद होने पर (iPhone पर भौतिक बटन), और एप्लिकेशन के पृष्ठभूमि में होने पर ध्वनि चलाना। playback श्रेणी के बिना, स्क्रीन लॉक होने या एप्लिकेशन छोटा होने पर सत्र निष्क्रिय हो जाता है।

ambient श्रेणी गेम और पृष्ठभूमि ध्वनियों वाले एप्लिकेशन के लिए उपयुक्त है — यह अन्य एप्लिकेशन को चलते रहने देती है। उदाहरण के लिए, यदि कोई उपयोगकर्ता संगीत सुन रहा है और ambient सत्र वाला गेम खोलता है, तो संगीत गेम की ध्वनियों के ऊपर चलता रहता है। यह Android से एक मूलभूत अंतर है, जहाँ ऐसे परिदृश्य के लिए स्पष्ट duck अनुमति की आवश्यकता होती है।

Audio Session कैसे सेट करें

Audio Session कॉन्फ़िगरेशन किसी भी प्लेबैक शुरू होने से पहले किया जाना चाहिए। application(_:didFinishLaunchingWithOptions:) विधि में या प्लेयर के इनिशियलाइज़र में सत्र को कॉन्फ़िगर करने की अनुशंसा की जाती है। श्रेणी सेट करने के बाद, सत्र को सक्रिय किया जाना चाहिए।

Swift में मूल Audio Session सेटअप

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 सेटअप विफल: \(error.localizedDescription)")
}

options पैरामीटर में allowBluetooth (Bluetooth हेडसेट पर आउटपुट) और defaultToSpeaker (ईयरपीस के बजाय स्पीकर के माध्यम से प्लेबैक) शामिल है। allowBluetooth विकल्प Bluetooth हेडफ़ोन का समर्थन करने वाले एप्लिकेशन के लिए अनिवार्य है — इसके बिना, हेडसेट कनेक्ट होने पर भी ध्वनि बिल्ट-इन स्पीकर पर जा सकती है।

रिकॉर्डिंग और प्लेबैक (VoIP) के लिए कॉन्फ़िगरेशन

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

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

playAndRecord श्रेणी voiceChat मोड के साथ वॉयस संचार के लिए ऑडियो पथ को अनुकूलित करती है: इको कैंसलेशन, ऑटोमैटिक गेन कंट्रोल (AGC) सक्षम करती है और इष्टतम कोडेक का चयन करती है। OverrideOutputAudioPort(.speaker) हेडसेट कनेक्ट होने पर भी स्पीकर के माध्यम से आउटपुट को बल देता है — स्पीकरफ़ोन के लिए उपयोगी।

सत्र सक्रियण और निष्क्रियण

setActive(true) कॉल करने से सत्र सक्रिय होता है और सिस्टम को सूचित करता है कि एप्लिकेशन ऑडियो का उपयोग करेगा। जब प्लेबैक रोका जाता है, तो सत्र को निष्क्रिय करने की अनुशंसा की जाती है ताकि अन्य एप्लिकेशन ऑडियो स्ट्रीम प्राप्त कर सकें। अपवाद लंबी पृष्ठभूमि प्लेबैक (संगीत, पॉडकास्ट) वाले एप्लिकेशन हैं, जहाँ सत्र पूरे ट्रैक के दौरान सक्रिय रहता है।

setActive कॉल करते समय त्रुटियों को संभालना महत्वपूर्ण है। यदि उच्च प्राथमिकता वाला कोई अन्य सत्र सक्रिय है (उदाहरण के लिए, कॉल के दौरान फ़ोन), तो setActive एक त्रुटि फेंक सकता है। इस मामले में, AudioSessionInterruptionType.ended सूचना की प्रतीक्षा करें और सक्रियण पुनः प्रयास करें।

Audio Session के मोड और नीतियाँ

मोड श्रेणी को परिष्कृत करता है और एक विशिष्ट उपयोग मामले के लिए ऑडियो पथ को अनुकूलित करता है। प्रत्येक मोड AGC, इको कैंसलेशन और कोडेक के व्यवहार को बदलता है। मोड श्रेणी को प्रतिस्थापित नहीं करते बल्कि पूरक करते हैं — एक श्रेणी विभिन्न मोड के साथ काम कर सकती है।

  • default — संगीत और वीडियो के लिए मानक मोड। AGC बंद है, इको कैंसलेशन न्यूनतम है।
  • voiceChat — VoIP के लिए अनुकूलन। इको कैंसलेशन, AGC, शोर दमन सक्षम करता है। playAndRecord श्रेणी के साथ उपयोग करें।
  • videoRecording — वीडियो रिकॉर्डिंग के लिए। प्लेबैक पर रिकॉर्डिंग गुणवत्ता को प्राथमिकता देता है। record या playAndRecord श्रेणी के साथ उपयोग करें।
  • measurement — ऑडियो माप के लिए। न्यूनतम सिग्नल प्रोसेसिंग, कोई AGC या इको कैंसलेशन नहीं।
  • gameChat — गेम में वॉयस चैट के लिए। voiceChat के समान, लेकिन गेम ऑडियो के लिए प्राथमिकता के साथ।
  • moviePlayback — फिल्में देखने के लिए। मल्टीचैनल ऑडियो (5.1, 7.1) और Dolby Atmos के लिए अनुकूलन।

Audio Session श्रेणी विकल्प

विकल्प सत्र व्यवहार का सूक्ष्म समायोजन प्रदान करते हैं। प्रत्येक विकल्प एक फ़्लैग है जिसे एक सरणी में दूसरों के साथ जोड़ा जा सकता है। उदाहरण के लिए, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] Bluetooth हेडसेट पर ध्वनि आउटपुट की अनुमति देता है, डिफ़ॉल्ट रूप से स्पीकर का उपयोग करता है, और ऑडियोबुक के साथ मिश्रित होता है।

iOS 17+ पर spatialAudio विकल्प दिखाई दिया, जो AVAudioSessionSpatialPreferences के माध्यम से AirPods के लिए वैयक्तिकृत स्थानिक ध्वनि सक्षम करता है। WWDC 2024 के अनुसार, Apple के परीक्षणों में स्थानिक ध्वनि संगीत एप्लिकेशन में उपयोगकर्ता सहभागिता को 25% बढ़ाती है।

रुकावटों और कॉल को संभालना

रुकावटें Audio Session और Android Audio Focus के बीच एक मुख्य अंतर हैं। iOS में, रुकावटों को NotificationCenter के माध्यम से AVAudioSession.interruptionNotification की सदस्यता लेकर संभाला जाता है। सूचना में रुकावट प्रकार के साथ एक शब्दकोश होता है: began या ended।

रुकावट सूचनाओं की सदस्यता लेना

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 प्राप्त होता है, तो प्लेयर को प्लेबैक रोकना चाहिए। जब interruptionType.ended प्राप्त होता है, तो interruptionOptionKey गुण इंगित करता है कि क्या प्लेयर स्वचालित रूप से फिर से शुरू कर सकता है (shouldResume)। यदि उपयोगकर्ता ने कॉल अस्वीकार कर दी, तो shouldResume = true। यदि कॉल टाइमआउट द्वारा समाप्त हुई — shouldResume = false, पुनरारंभ की अनुमति नहीं है।

अन्य एप्लिकेशन से रुकावटों को संभालना

जब कोई अन्य एप्लिकेशन playback श्रेणी के साथ अपना Audio Session सक्रिय करता है, तो वर्तमान सत्र को रुकावट सूचना मिलती है। यदि कोई अन्य एप्लिकेशन ambient का उपयोग करता है, तो कोई रुकावट नहीं होती — ध्वनियाँ मिश्रित होती हैं। यह व्यवहार Android से बिल्कुल अलग है, जहाँ कोई भी Audio Focus सक्रियण LOSS घटना को ट्रिगर करता है।

उन एप्लिकेशन के लिए जिन्हें अन्य सत्र सक्रिय होने पर प्लेबैक जारी रखने की आवश्यकता है (उदाहरण के लिए, संगीत चलने के दौरान नेविगेशन), .mixWithOthers विकल्प का उपयोग करें। यह विकल्प अन्य एप्लिकेशन के साथ ध्वनि मिश्रण की अनुमति देता है, और कोई रुकावट नहीं भेजी जाती है। MixWithOthers Android में duck मोड का iOS समकक्ष है।

ऑडियो रूटिंग और Bluetooth

Audio Session स्वचालित रूप से बिल्ट-इन स्पीकर, हेडफ़ोन, Bluetooth हेडसेट और AirPlay उपकरणों के बीच ऑडियो रूटिंग का प्रबंधन करता है। एप्लिकेशन currentRoute गुण के माध्यम से वर्तमान रूट की निगरानी कर सकता है और AVAudioSession.routeChangeNotification के माध्यम से परिवर्तनों के बारे में सूचनाएँ प्राप्त कर सकता है।

जब Bluetooth हेडफ़ोन कनेक्ट होते हैं, iOS स्वचालित रूप से ऑडियो आउटपुट को उन पर स्विच कर देता है यदि सत्र allowBluetooth विकल्प के साथ कॉन्फ़िगर किया गया है। इस विकल्प के बिना, ध्वनि बिल्ट-इन स्पीकर के माध्यम से जारी रहती है। iOS 16 से शुरू होकर, जब AirPods Pro कनेक्ट होते हैं, सिस्टम स्वचालित रूप से विलंबता कम करने के लिए ProMotion सिंक्रोनाइज़ेशन सक्षम करता है।

रूट परिवर्तनों की निगरानी

routeChangeNotification की सदस्यता लेने से हेडफ़ोन कनेक्शन और डिस्कनेक्शन पर प्रतिक्रिया करने की अनुमति मिलती है। जब Bluetooth हेडसेट डिस्कनेक्ट होता है, तो प्लेयर को प्लेबैक रोक देना चाहिए — उपयोगकर्ता यह उम्मीद नहीं कर सकता कि फ़ोन के स्पीकर से ध्वनि आने लगे। Apple HIG (2026) के अनुसार, संगीत एप्लिकेशन के लिए यह अनिवार्य व्यवहार है।

availableInputs और availableOutputs गुण अपने प्रकारों (builtInSpeaker, headphones, bluetoothA2DP, hdmi) के साथ उपलब्ध ऑडियो उपकरणों की एक सूची लौटाते हैं। डेवलपर कस्टम रूटिंग परिदृश्यों के लिए overrideOutputAudioPort के माध्यम से प्रोग्रामेटिक रूप से एक विशिष्ट उपकरण चुन सकता है।

अक्सर पूछे जाने वाले प्रश्न

Audio Session Android Audio Focus से कैसे अलग है?

मुख्य अंतर आर्किटेक्चर है। Audio Session प्रति एप्लिकेशन एक एकल केंद्रीकृत सत्र है जिसे एक बार कॉन्फ़िगर किया जाता है। Android में Audio Focus को चलाते समय हर बार मैन्युअल रूप से फ़ोकस का अनुरोध करना आवश्यक होता है। इसके अलावा, iOS mixWithOthers विकल्प के माध्यम से मिश्रण का समर्थन करता है, जबकि Android में duck पूर्ण रुकावट का एकमात्र विकल्प है।

iPhone स्क्रीन लॉक होने पर ध्वनि क्यों गायब हो जाती है?

सबसे आम कारण गलत Audio Session श्रेणी है। यदि ambient या soloAmbient चुना गया है, तो स्क्रीन लॉक होने पर ध्वनि बंद हो जाती है। श्रेणी को playback पर स्विच करें और सुनिश्चित करें कि Info.plist में Background Modes — Audio, AirPlay, and Picture in Picture जोड़ा गया है।

iOS पर दो एप्लिकेशन को एक साथ चलाने की अनुमति कैसे दें?

setCategory में .mixWithOthers विकल्प जोड़ें। यह आपके एप्लिकेशन की ध्वनि को अन्य सक्रिय सत्रों के साथ मिश्रित करने की अनुमति देगा। इस विकल्प के बिना, एक नया एप्लिकेशन वर्तमान को बाधित करता है। MixWithOthers Android में duck मोड का एनालॉग है, लेकिन पूर्ण वॉल्यूम संरक्षण के साथ।

प्रोग्रामेटिक रूप से ध्वनि को Bluetooth स्पीकर पर कैसे स्विच करें?

स्वचालित चयन के लिए nil के साथ overrideOutputAudioPort का उपयोग करें। Bluetooth पर बलपूर्वक आउटपुट के लिए: availableOutputs से AVAudioSessionRouteDescription प्राप्त करें, .bluetoothA2DP प्रकार वाला पोर्ट चुनें और इसे overrideOutputAudioPort को पास करें। सुनिश्चित करें कि सत्र allowBluetooth के साथ कॉन्फ़िगर किया गया है।

क्या प्लेयर को रोकते समय setActive(false) कॉल करना चाहिए?

अधिकांश एप्लिकेशन के लिए — हाँ. रोकने पर सत्र निष्क्रिय करने से अन्य एप्लिकेशन को ऑडियो फ़ोकस प्राप्त करने की अनुमति मिलती है। अपवाद लंबी पृष्ठभूमि प्लेबैक वाले संगीत प्लेयर हैं। यदि रुकावट छोटी है (5 सेकंड से कम), त्वरित पुनरारंभ के लिए सत्र को सक्रिय रखना बेहतर है।

सारांश

  • Audio Session (AVAudioSession) iOS में प्रति एप्लिकेशन एकल ऑडियो सत्र है जो OS स्तर पर ध्वनि व्यवहार का प्रबंधन करता है।
  • छह श्रेणियाँ: ambient, playback, record, playAndRecord, multiRoute, soloAmbient — मूल ऑडियो व्यवहार को परिभाषित करती हैं।
  • पृष्ठभूमि प्लेबैक के लिए, playback श्रेणी और Info.plist में Background Modes आवश्यक हैं।
  • रुकावटों को NotificationCenter के माध्यम से began (रोकें) और ended (shouldResume पर पुनरारंभ) प्रकारों के साथ संभाला जाता है।
  • .mixWithOthers विकल्प बिना रुकावट के अन्य एप्लिकेशन के साथ ध्वनि मिश्रण सक्षम करता है।
  • रूटिंग स्वचालित रूप से प्रबंधित होती है लेकिन हेडफ़ोन डिस्कनेक्ट होने पर रोकने के लिए routeChangeNotification के माध्यम से निगरानी की जाती है।
  • playAndRecord श्रेणी voiceChat मोड के साथ इको कैंसलेशन और AGC वाले VoIP एप्लिकेशन के लिए मानक है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें