इस पेज पर, ऑडियो फ़्रेमवर्क और ऑडियो एचएएल (एएचएएल) को चालू करने का तरीका बताया गया है. इससे सिंक्रोनस कनेक्शन-ओरिएंटेड (एससीओ) कनेक्शन मैनेज किए जा सकते हैं. इस प्रोसेस को ऑडियो मैनेज्ड एससीओ (एएमएसको) कहा जाता है.
Android 17 और इसके बाद के वर्शन में, Android ऑडियो फ़्रेमवर्क, SCO राउटिंग को मैनेज करने के लिए SCO मैनेजमेंट सुविधा का इस्तेमाल करता है. पहले इसे ब्लूटूथ (BT) फ़्रेमवर्क मैनेज करता था. इस माइग्रेशन से, SCO कनेक्शन की स्थिति को बीटी फ़्रेमवर्क के मालिकाना हक वाली स्थिति से ऑडियो स्ट्रीमिंग गतिविधि के डाउनस्ट्रीम नतीजे में ले जाया जाता है.
ऑडियो फ़्रेमवर्क में ऑडियो राउटिंग के मालिकाना हक को केंद्रीकृत करके, यह सुविधा SCO के लिए ऑडियो हार्डवेयर ऐब्स्ट्रैक्शन लेयर (एचएएल) को, A2DP और LE ऑडियो जैसी अन्य बीटी प्रोफ़ाइलों के साथ अलाइन करती है. इस रिफ़ैक्टर से, टेलीकॉम और बीटी स्टैक के बीच इंटरैक्शन आसान हो जाता है. इससे ऑडियो राउटिंग का ज़्यादा मज़बूत और केंद्रीकृत आर्किटेक्चर तैयार होता है.
आर्किटेक्चर की खास जानकारी
AMSCO आर्किटेक्चर, Android ऑडियो फ़्रेमवर्क में SCO कनेक्शन मैनेजमेंट को केंद्रीकृत करता है. यह ऑडियो स्ट्रीमिंग गतिविधि के आधार पर राउटिंग के फ़ैसले लेता है. यह आर्किटेक्चर, पिछले मॉडल से अलग है. पिछले मॉडल में, बीटी स्टैक कनेक्शन मैनेज करता था. इस आर्किटेक्चर में, हर कॉम्पोनेंट की भूमिकाएं यहां दी गई हैं:
AHAL, SCO सेशन को सिर्फ़ तब शुरू और निलंबित करता है, जब ये शर्तें पूरी होती हैं:
- किसी चालू स्ट्रीम को SCO डिवाइस से पैच किया जाता है.
- ऑडियो मोड सेट है और एससीओ डिवाइस के लिए पैच मौजूद है.
ऑडियो फ़्रेमवर्क, इन शर्तों को पूरा करने पर A2DP डिवाइस को एक साथ कई पैच करने से रोकता है. ऑडियो फ़्रेमवर्क, अब SCO की स्थिति में होने वाले बदलावों या A2DP को रोकने की जानकारी, AHAL को नहीं भेजता.
ऑडियो फ़्रेमवर्क, एससीओ मैनेजमेंट को हैंडल करता है. इसलिए, बीटी स्टैक अब ऑडियो को कनेक्ट या डिसकनेक्ट नहीं करता है. अगर एसCO को पहले से ही डिसकनेक्ट कर दिया गया है या कोई गड़बड़ी हुई है, तो बीटी स्टैक, ऑडियो फ़्रेमवर्क को AudioManager#onHfpAudioDisconnected के साथ सूचना देता है.
प्लान
एससीओ मैनेजमेंट को फिर से बनाने की प्रोसेस शुरू करने से पहले, इस सेक्शन में दी गई जानकारी का इस्तेमाल करके, यहां दी गई ज़रूरी शर्तों को पूरा करें.
पिछले वर्शन के गेम खेलने की सुविधा
फ़्रेमवर्क को उन डिवाइसों के साथ काम करने की सुविधा देने के लिए, सिस्टम प्रॉपर्टी का इस्तेमाल करें जिन्हें एएचएएल या बीटी एएचएएल अपडेट किए बिना ओएस अपडेट मिल सकते हैं. इससे यह पता चलेगा कि नया एससीओ मैनेजमेंट चालू होना चाहिए. सिस्टम प्रॉपर्टी के बंद होने या एचएएल वर्शन के पुराने होने पर, लेगसी पाथ को छह साल तक सुरक्षित रखा जाता है.
HFP सेशन सेट अप करना
एएचएएल को, हैंड्स-फ़्री प्रोफ़ाइल (एचएफ़पी) के नए सेशन टाइप का इस्तेमाल करना होगा, ताकि वह प्लेबैक शुरू या निलंबित कर सके. यह अन्य बीटी सेशन टाइप की तरह ही काम करता है. स्ट्रीम की स्थिति को मैनेज करने के लिए, अलग-अलग IBluetoothAudioProviders का इस्तेमाल किया जाता है. इन्हें Factory क्लास के ज़रिए बनाया जाता है और उपलब्ध पाथवे के हिसाब से इनकी गिनती की जाती है.
जब भी हो सके, बीटी स्टैक, हार्डवेयर ऑफलोड पाथ का इस्तेमाल करता है. बातचीत के दौरान कोडेक चुनने के लिए, इस क्रम का पालन किया जाता है: LC3 सॉफ़्टवेयर की तुलना में LC3 हार्डवेयर को प्राथमिकता दी जाती है. इसके बाद, mSBC सॉफ़्टवेयर की तुलना में mSBC हार्डवेयर को प्राथमिकता दी जाती है. आखिर में, CVSD सॉफ़्टवेयर की तुलना में CVSD हार्डवेयर को प्राथमिकता दी जाती है.
नीचे दिए गए क्रम के डायग्राम में, स्ट्रीम की स्थिति सेट अप करने के लिए, AHAL और BT स्टैक के बीच होने वाली इंटरैक्शन के बारे में बताया गया है.
हार्डवेयर ऑफलोड करने की प्रक्रिया
पहली इमेज में दिखाया गया है कि SCO ऑडियो के लिए, डायरेक्ट हार्डवेयर डेटा पाथ बनाने के लिए AHAL और BT स्टैक कैसे काम करते हैं:
पहली इमेज. हार्डवेयर ऑफलोड करने की प्रोसेस.
सॉफ़्टवेयर डेटा पाथ की प्रक्रिया
दूसरी इमेज में, ऑडियो डेटा को मैनेज करने की प्रोसेस दिखाई गई है. इसके लिए, सिस्टम सॉफ़्टवेयर प्रोसेसिंग की ज़रूरत होती है:
दूसरी इमेज. सॉफ़्टवेयर के डेटा पाथ की प्रक्रिया.
कोडेक को फिर से नेगोशिएट करने की प्रोसेस
जब ऑडियो गेटवे (एजी) को नया बीटी उपलब्ध कोडेक (AT+BAC) कमांड मिलता है, तो एजी कोडेक नेगोशिएशन की प्रक्रिया को फिर से शुरू करता है. तीसरी इमेज में, कोडेक को फिर से बातचीत करने की प्रोसेस दिखाई गई है:
तीसरी इमेज. कोडेक को फिर से बातचीत करके तय करने की प्रोसेस.
HeadsetStateMachine पर असर
Java लेयर हेडसेट स्टेट मशीन (HeadsetStateMachine क्लास के तौर पर दिखाई गई) में ज़्यादातर बदलाव नहीं किया गया है. हालांकि, AUDIO_CONNECTED स्टेट में बदलाव किया गया है. यह नेटिव स्टैक इवेंट से कंट्रोल होती है.
Java लेयर में, सिस्टम अब connectAudioNative या disconnectAudioNative शुरू नहीं करता. इसके बजाय, सिस्टम नेटिव स्टैक से ऑडियो कनेक्शन की स्थिति में हुए बदलावों का जवाब देता है. ये बदलाव, IBluetoothAudioProvider या IBluetoothAudioPort पर AHAL के निर्देशों की वजह से होते हैं.
लागू करना
SCO मैनेजमेंट रिफ़ैक्टर को इंटिग्रेट करने के लिए, बीटी स्टैक और ऑडियो फ़्रेमवर्क के बीच कम्यूनिकेशन को अपडेट करें.
इस सुविधा को लागू करने के लिए, यह तरीका अपनाएं:
इससे ऑडियो फ़्रेमवर्क को, चालू बीटी में हुए बदलावों के बारे में सूचना मिलती है. इससे एचएफ़पी डिवाइस कनेक्शन के दौरान, एससीओ शुरू करने और बंद करने की प्रोसेस को सही तरीके से मैनेज करने में मदद मिलती है. साथ ही, इससे चालू डिवाइस में हुए बदलावों को मैनेज करने में भी मदद मिलती है. ऑडियो फ़्रेमवर्क को यह जानकारी देने के लिए,
AudioManager.handleBluetoothActiveDeviceChanged(HfpInfo)का इस्तेमाल करें.
चौथी इमेज. एचएफ़पी डिवाइस कनेक्ट करें.
ऑडियो डिवाइस की स्थिति के बारे में बताने के लिए, ऑडियो फ़्रेमवर्क लेगसी ब्रॉडकास्ट के बजाय
AudioManagerAudioDeviceCallback#onAudioDevicesAddedकॉलबैक का इस्तेमाल करता है.एससीओ कनेक्शन शुरू करने के लिए,
setCommunicationDevice(AudioDeviceInfodevice)को प्राइमरी कंट्रोल पॉइंट के तौर पर इस्तेमाल करके, AHAL स्ट्रीम कंट्रोल लागू करें.अगर
HfpTransport::StartRequest,BluetoothAudioCtrlAck::PENDINGदिखाता है, तो AHAL को अनुरोध फिर से करना होगा, क्योंकि एचएफ़पी स्टेट मशीन सेट अप नहीं की गई है.
इस्तेमाल के उदाहरण
यहां दिए गए सेक्शन में, सामान्य क्रिटिकल यूज़र जर्नी (सीयूजे) के बारे में बताया गया है.
टेलीकॉम कॉल फ़्लो
SCO मैनेजमेंट के रिफ़ैक्टर में बदलाव करने से, phoneStateChanged को ब्लॉक करने वाले फ़ंक्शन में बदल दिया जाता है. इस बदलाव की वजह से, टेलीकॉम को BluetoothInCallService.onCallAdded() तरीके में phoneStateChanged के पूरा होने का इंतज़ार करना पड़ता है. इसके बाद, यह SCO बनाने के लिए ऑडियो फ़्रेमवर्क एपीआई को शुरू करता है.

पांचवीं इमेज. टेलीकॉम के ज़रिए कॉल का जवाब देना या कॉल करना.
वीओआईपी कॉल फ़्लो
ऑडियो फ़्रेमवर्क, BluetoothHeadset.startScoUsingVirtualVoiceCall तरीके को कॉल करके प्रोसेस शुरू करता है. बीटी स्टैक से ऑडियो फ़्रेमवर्क को नतीजा मिलने के बाद, फ़्रेमवर्क, एएचएएल को startStream को लागू करने का निर्देश देता है. इस इमेज में, इस फ़्लो को दिखाया गया है:

छठी इमेज. वीओआईपी के ज़रिए कॉल का जवाब देना या कॉल करना.
आवाज़ पहचानने की सुविधा
बोलकर इस्तेमाल करने की सुविधा (एचएफ़) और एजी की ओर से शुरू की गई आवाज़ की पहचान, दोनों के लिए बीटी स्टैक को AudioManager.setCommunicationDevice() का इस्तेमाल करके, ऑडियो फ़्रेमवर्क से एससीओ खोलने का अनुरोध करना होगा. इसे यहां दिए गए डायग्राम में दिखाया गया है:

सातवीं इमेज. आवाज़ पहचानने की सुविधा के लिए, एससीओ शुरू करना.
ऑडियो कनेक्शन
बीटी स्टैक, एससीओ कनेक्शन शुरू करता है. इसके लिए, वह आवाज़ पहचानने की सुविधा के दौरान AudioManager.setCommunicationDevice(AudioDeviceInfo) का इस्तेमाल करके ऑडियो फ़्रेमवर्क से अनुरोध करता है. अगर कॉल चालू है, तो बीटी स्टैक, टेलीकॉम स्टैक से BluetoothInCallService#requestBluetoothAudio का अनुरोध करता है.
इस प्रोसेस को यहां दी गई इमेज में दिखाया गया है:

आठवीं इमेज. ऑडियो कनेक्शन.
पुष्टि करना और जांच करना
यह पुष्टि करने के लिए कि सुविधा को सही तरीके से इंटिग्रेट किया गया है और यह क्वालिटी स्टैंडर्ड के मुताबिक है, डिवाइस बनाने वाली कंपनियों को ये टेस्ट करने होंगे:
- CTS Verifier: कॉल के दौरान ऑडियो रूटिंग की इंटरैक्टिव टेस्टिंग के लिए, CTS Verifier का इस्तेमाल करें.
- Vendor Test Suite (VTS): VTS का इस्तेमाल करके, AHAL और BT AHAL के इंटरैक्शन की पुष्टि करें.
ज़रूरी शर्तें
इस सुविधा के लिए, ये ज़रूरी शर्तें पूरी होनी चाहिए:
- AHAL: इसे लागू करने के लिए, ऐसे AHAL की ज़रूरत होती है जो रिफ़ैक्टर किए गए एससीओ मैनेजमेंट पाथ के साथ काम कर सके.