Audio Session, iOS में एप्लिकेशन के ऑडियो व्यवहार को प्रबंधित करने के लिए केंद्रीय तंत्र है: सिस्टम के साथ इंटरैक्शन, रुकावटों को संभालना और ऑडियो रूटिंग। प्रत्येक iOS एप्लिकेशन को एक एकल ऑडियो सत्र मिलता है जो यह निर्धारित करता है कि स्क्रीन लॉक होने पर, कॉल के दौरान और Bluetooth कनेक्ट करते समय ध्वनि कैसे व्यवहार करती है। Apple Developer Documentation, 2026 के अनुसार, Audio Session को एक श्रेणी और मोड के माध्यम से कॉन्फ़िगर किया जाता है — सही कॉन्फ़िगरेशन के बिना, एप्लिकेशन पृष्ठभूमि में ध्वनि नहीं चला सकता।
मुख्य बिंदु
Audio Session AVAudioSession का एक एकल उदाहरण है जो सिस्टम द्वारा तब बनाया जाता है जब कोई एप्लिकेशन लॉन्च होता है और अपने पूरे जीवनचक्र में मौजूद रहता है। यह एप्लिकेशन और iOS ऑडियो सिस्टम के बीच एक मध्यस्थ के रूप में कार्य करता है: श्रेणी कॉन्फ़िगरेशन यह निर्धारित करता है कि एप्लिकेशन को पृष्ठभूमि में ध्वनि चलाने की अनुमति है या नहीं, क्या कॉल के दौरान ध्वनि म्यूट की जाएगी, और किन उपकरणों पर ऑडियो आउटपुट करना है।
Android Audio Focus के विपरीत, जहाँ प्रत्येक एप्लिकेशन स्वतंत्र रूप से फ़ोकस का अनुरोध और जारी करता है, iOS Audio Session को प्रति एप्लिकेशन एक सत्र के माध्यम से केंद्रीय रूप से प्रबंधित किया जाता है। जब कोई सत्र सक्रिय होता है, सिस्टम स्वचालित रूप से पिछले एप्लिकेशन के सत्र को निष्क्रिय कर देता है, उसे एक रुकावट सूचना भेजता है। यह आर्किटेक्चरल अंतर दो प्लेटफार्मों पर ऑडियो प्रबंधन के विभिन्न दृष्टिकोणों को परिभाषित करता है।
WWDC 2024 सत्र 211 के अनुसार, iOS एप्लिकेशन में लगभग 40% ऑडियो समस्याएँ गलत Audio Session कॉन्फ़िगरेशन के कारण होती हैं। सबसे आम गलती ambient श्रेणी के बजाय playback चुनना है, जिसके कारण स्क्रीन लॉक होने पर ध्वनि गायब हो जाती है।
लॉन्च होने पर, एप्लिकेशन सत्र का sharedInstance प्राप्त करता है, setCategory(_:mode:options:) कॉल के माध्यम से श्रेणी सेट करता है, और setActive(true) के माध्यम से सत्र को सक्रिय करता है। सक्रियण के बाद, iOS रूटिंग के लिए श्रेणी नीतियों पर विचार करता है। यदि कोई अन्य एप्लिकेशन अपना सत्र सक्रिय करता है, तो वर्तमान को Notification.Name.AVAudioSessionInterruption के माध्यम से AudioSessionInterruptionType.began सूचना मिलती है।
श्रेणी Audio Session का मुख्य पैरामीटर है, जो छह पूर्वनिर्धारित व्यवहार विकल्पों को परिभाषित करती है। श्रेणी चुनना iOS में ऑडियो सेट करते समय पहला और सबसे महत्वपूर्ण निर्णय है।
| श्रेणी | कब उपयोग करें | पृष्ठभूमि ऑडियो | म्यूट स्विच प्रभावित करता है |
|---|---|---|---|
| ambient | गेम, पृष्ठभूमि प्रभाव | नहीं | हाँ |
| playback | संगीत, पॉडकास्ट, ऑडियोबुक | हाँ | नहीं |
| record | वॉयस मेमो, ऑडियो रिकॉर्डिंग | नहीं | लागू नहीं |
| playAndRecord | VoIP, वॉयस संदेश | हाँ | नहीं |
| multiRoute | DJ मिक्सर, कराओके | हाँ | नहीं |
| soloAmbient | डिफ़ॉल्ट (iOS default) | नहीं | हाँ |
संगीत और वीडियो प्लेयर के लिए, हमेशा playback का उपयोग करें। यह श्रेणी अनुमति देती है: स्क्रीन लॉक होने पर, म्यूट स्विच बंद होने पर (iPhone पर भौतिक बटन), और एप्लिकेशन के पृष्ठभूमि में होने पर ध्वनि चलाना। playback श्रेणी के बिना, स्क्रीन लॉक होने या एप्लिकेशन छोटा होने पर सत्र निष्क्रिय हो जाता है।
ambient श्रेणी गेम और पृष्ठभूमि ध्वनियों वाले एप्लिकेशन के लिए उपयुक्त है — यह अन्य एप्लिकेशन को चलते रहने देती है। उदाहरण के लिए, यदि कोई उपयोगकर्ता संगीत सुन रहा है और ambient सत्र वाला गेम खोलता है, तो संगीत गेम की ध्वनियों के ऊपर चलता रहता है। यह Android से एक मूलभूत अंतर है, जहाँ ऐसे परिदृश्य के लिए स्पष्ट duck अनुमति की आवश्यकता होती है।
Audio Session कॉन्फ़िगरेशन किसी भी प्लेबैक शुरू होने से पहले किया जाना चाहिए। application(_:didFinishLaunchingWithOptions:) विधि में या प्लेयर के इनिशियलाइज़र में सत्र को कॉन्फ़िगर करने की अनुशंसा की जाती है। श्रेणी सेट करने के बाद, सत्र को सक्रिय किया जाना चाहिए।
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 हेडफ़ोन का समर्थन करने वाले एप्लिकेशन के लिए अनिवार्य है — इसके बिना, हेडसेट कनेक्ट होने पर भी ध्वनि बिल्ट-इन स्पीकर पर जा सकती है।
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 सूचना की प्रतीक्षा करें और सक्रियण पुनः प्रयास करें।
मोड श्रेणी को परिष्कृत करता है और एक विशिष्ट उपयोग मामले के लिए ऑडियो पथ को अनुकूलित करता है। प्रत्येक मोड AGC, इको कैंसलेशन और कोडेक के व्यवहार को बदलता है। मोड श्रेणी को प्रतिस्थापित नहीं करते बल्कि पूरक करते हैं — एक श्रेणी विभिन्न मोड के साथ काम कर सकती है।
विकल्प सत्र व्यवहार का सूक्ष्म समायोजन प्रदान करते हैं। प्रत्येक विकल्प एक फ़्लैग है जिसे एक सरणी में दूसरों के साथ जोड़ा जा सकता है। उदाहरण के लिए, [.allowBluetooth, .defaultToSpeaker, .interruptSpokenAudioAndMix] Bluetooth हेडसेट पर ध्वनि आउटपुट की अनुमति देता है, डिफ़ॉल्ट रूप से स्पीकर का उपयोग करता है, और ऑडियोबुक के साथ मिश्रित होता है।
iOS 17+ पर spatialAudio विकल्प दिखाई दिया, जो AVAudioSessionSpatialPreferences के माध्यम से AirPods के लिए वैयक्तिकृत स्थानिक ध्वनि सक्षम करता है। WWDC 2024 के अनुसार, Apple के परीक्षणों में स्थानिक ध्वनि संगीत एप्लिकेशन में उपयोगकर्ता सहभागिता को 25% बढ़ाती है।
रुकावटें Audio Session और Android Audio Focus के बीच एक मुख्य अंतर हैं। iOS में, रुकावटों को NotificationCenter के माध्यम से AVAudioSession.interruptionNotification की सदस्यता लेकर संभाला जाता है। सूचना में रुकावट प्रकार के साथ एक शब्दकोश होता है: began या ended।
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 समकक्ष है।
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 को चलाते समय हर बार मैन्युअल रूप से फ़ोकस का अनुरोध करना आवश्यक होता है। इसके अलावा, iOS mixWithOthers विकल्प के माध्यम से मिश्रण का समर्थन करता है, जबकि Android में duck पूर्ण रुकावट का एकमात्र विकल्प है।
सबसे आम कारण गलत Audio Session श्रेणी है। यदि ambient या soloAmbient चुना गया है, तो स्क्रीन लॉक होने पर ध्वनि बंद हो जाती है। श्रेणी को playback पर स्विच करें और सुनिश्चित करें कि Info.plist में Background Modes — Audio, AirPlay, and Picture in Picture जोड़ा गया है।
setCategory में .mixWithOthers विकल्प जोड़ें। यह आपके एप्लिकेशन की ध्वनि को अन्य सक्रिय सत्रों के साथ मिश्रित करने की अनुमति देगा। इस विकल्प के बिना, एक नया एप्लिकेशन वर्तमान को बाधित करता है। MixWithOthers Android में duck मोड का एनालॉग है, लेकिन पूर्ण वॉल्यूम संरक्षण के साथ।
स्वचालित चयन के लिए nil के साथ overrideOutputAudioPort का उपयोग करें। Bluetooth पर बलपूर्वक आउटपुट के लिए: availableOutputs से AVAudioSessionRouteDescription प्राप्त करें, .bluetoothA2DP प्रकार वाला पोर्ट चुनें और इसे overrideOutputAudioPort को पास करें। सुनिश्चित करें कि सत्र allowBluetooth के साथ कॉन्फ़िगर किया गया है।
अधिकांश एप्लिकेशन के लिए — हाँ. रोकने पर सत्र निष्क्रिय करने से अन्य एप्लिकेशन को ऑडियो फ़ोकस प्राप्त करने की अनुमति मिलती है। अपवाद लंबी पृष्ठभूमि प्लेबैक वाले संगीत प्लेयर हैं। यदि रुकावट छोटी है (5 सेकंड से कम), त्वरित पुनरारंभ के लिए सत्र को सक्रिय रखना बेहतर है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें