ब्लूटूथ LE के ज़रिए, कान की मशीन के साथ काम करने की सुविधा

ब्लूटूथ लो एनर्जी (BLE) पर कनेक्शन-ओरिएंटेड L2CAP चैनलों (CoC) का इस्तेमाल करके, Android डिवाइसों पर कान की मशीन के डिवाइसों (एचए) को बेहतर तरीके से ऐक्सेस किया जा सकता है. CoC, कई ऑडियो पैकेट के एक साथ काम करने वाले बफ़र का इस्तेमाल करता है, ताकि ऑडियो का फ़्लो लगातार बना रहे. ऐसा तब भी होता है, जब पैकेट का न मिलना जैसी समस्या आ रही हो. यह बफ़र, कान की मशीन वाले डिवाइसों के लिए ऑडियो क्वालिटी देता है. हालांकि, इसके लिए थोड़ा इंतज़ार करना पड़ता है.

सीओसी के डिज़ाइन में, ब्लूटूथ कोर स्पेसिफ़िकेशन वर्शन 5 (बीटी) का रेफ़रंस दिया गया है. मुख्य स्पेसिफ़िकेशन के मुताबिक रहने के लिए, इस पेज पर मौजूद सभी मल्टी-बाइट वैल्यू को लिटल-इंडियन के तौर पर पढ़ा जाएगा.

शब्दावली

  • सेंट्रल - वह Android डिवाइस जो ब्लूटूथ की मदद से विज्ञापनों को स्कैन करता है.
  • पैरिफ़रल - कान की मशीन, जो ब्लूटूथ से विज्ञापन पैकेट भेजती है.

नेटवर्क टोपोलॉजी और सिस्टम आर्किटेक्चर

सुनने की मशीनों के लिए सीओसी का इस्तेमाल करते समय, नेटवर्क टोपोलॉजी में एक मुख्य और दो सहायक डिवाइस होते हैं. एक बाईं ओर और एक दाईं ओर, जैसा कि पहली इमेज में दिखाया गया है. ब्लूटूथ ऑडियो सिस्टम, बाईं और दाईं ओर मौजूद डिवाइसों को एक ही ऑडियो सिंक के तौर पर देखता है. अगर किसी सहायक डिवाइस के कनेक्ट न होने या मोनो ऑडियो फ़िट की वजह से कोई सहायक डिवाइस मौजूद नहीं है, तो मुख्य डिवाइस, बाईं और दाईं ऑडियो चैनल को मिक्स करता है और ऑडियो को बाकी बचे सहायक डिवाइस पर भेजता है. अगर सेंट्रल यूनिट, दोनों डिवाइसों से कनेक्ट नहीं रहती है, तो वह ऑडियो सिंक से लिंक होने की स्थिति को 'लिंक नहीं है' के तौर पर दिखाती है. ऐसे मामलों में, सेंट्रल ऑडियो को किसी दूसरे आउटपुट पर भेजता है.


पहली इमेज. कान की मशीनों को BLE पर CoC का इस्तेमाल करके, Android मोबाइल डिवाइसों से जोड़ने के लिए टॉपोलॉजी

जब सेंट्रल, ऑडियो डेटा को पेरिफ़रल पर स्ट्रीम नहीं कर रहा है और BLE कनेक्शन बनाए रख सकता है, तो सेंट्रल को पेरिफ़रल से डिसकनेक्ट नहीं करना चाहिए. कनेक्शन बनाए रखने से, डेटा को पेरिफ़रल पर मौजूद GATT सर्वर से कम्यूनिकेट करने में मदद मिलती है.

कान की मशीनों को पेयर और कनेक्ट करते समय, सेंट्रल:

  • हाल ही में जोड़े गए बाईं और दाईं ओर के सहायक डिवाइसों (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) पर नज़र रखें.
  • अगर कोई मान्य पेयरिंग मौजूद है, तो मान लें कि सहायक डिवाइसों का इस्तेमाल किया जा रहा है. कनेक्शन टूटने पर, केंद्रीय डिवाइस, जोड़े गए डिवाइस से कनेक्ट या फिर से कनेक्ट करने की कोशिश करेगा.
  • अगर किसी डिवाइस को अनपेयर किया जाता है, तो मान लें कि उस डिवाइस का इस्तेमाल नहीं किया जा रहा है.

ऊपर दिए गए मामलों में, पेयरिंग का मतलब, ब्लूटूथ की जोड़ने की प्रोसेस से नहीं, बल्कि ऑपरेटिंग सिस्टम में दिए गए यूयूआईडी और बाएं/दाएं डिज़ाइनर के साथ, सुनने की मशीनों के सेट को रजिस्टर करने की कार्रवाई से है.

सिस्टम की ज़रूरतें

उपयोगकर्ता को अच्छा अनुभव देने के लिए, सीओसी को सही तरीके से लागू करने के लिए, मुख्य और सहायक डिवाइसों में मौजूद ब्लूटूथ सिस्टम को:

  • BT 4.2 या इसके बाद के वर्शन का कंट्रोलर लागू करें. हमारा सुझाव है कि आप LE के सुरक्षित कनेक्शन का इस्तेमाल करें.
  • कम से कम दो एक साथ काम करने वाले LE लिंक के लिए, सेंट्रल सपोर्ट में पैरामीटर होने चाहिए. इन पैरामीटर के बारे में ऑडियो पैकेट के फ़ॉर्मैट और समय में बताया गया है.
  • कम से कम एक LE लिंक के साथ काम करने वाली, ऑडियो पैकेट के फ़ॉर्मैट और समय में बताए गए पैरामीटर के साथ काम करने वाली.
  • LE क्रेडिट के आधार पर फ़्लो कंट्रोल की सुविधा हो [BT Vol 3, Part A, Sec 10.1]. डिवाइसों में, सीओसी पर कम से कम 167 बाइट का एमटीयू और एमपीएस साइज़ होना चाहिए. साथ ही, वे आठ पैकेट तक बफ़र कर पाएं.
  • कम से कम 167 बाइट के पेलोड के साथ, LE डेटा की लंबाई का एक्सटेंशन [BT Vol 6, Part B, Sec 5.1.9] हो.
  • सेंट्रल डिवाइस, HCI LE कनेक्शन अपडेट कमांड के साथ काम करता हो और maximum_CE_Length और minimum_CE_Length पैरामीटर के साथ काम करता हो.
  • दो अलग-अलग डिवाइसों से कनेक्ट करने के लिए, दो LE CoC कनेक्शन के लिए डेटा गति को बनाए रखें. इसके लिए, ऑडियो पैकेट के फ़ॉर्मैट और समय में कनेक्शन के इंटरवल और पेलोड के साइज़ का इस्तेमाल करें.
  • इन स्पेसिफ़िकेशन के लिए ज़रूरी सबसे कम वैल्यू के तौर पर, पेरिफ़रल को LL_LENGTH_REQ या LL_LENGTH_RSP फ़्रेम में MaxRxOctets और MaxRxTime पैरामीटर सेट करने दें. इससे, सेंट्रल डिवाइस को फ़्रेम पाने में लगने वाले समय का हिसाब लगाते समय, अपने टाइम शेड्यूलर को ऑप्टिमाइज़ करने में मदद मिलती है.

हमारा सुझाव है कि सेंट्रल और पेरिफ़रल डिवाइस, BT 5.0 स्पेसिफ़िकेशन में बताए गए मुताबिक 2 एमबी पीएचवाई का इस्तेमाल करें. सेंट्रल, 1 एम और 2 एम पीएचवाई, दोनों पर कम से कम 64 केबीपीएस के ऑडियो लिंक के साथ काम करेगा. BLE की लंबी रेंज वाले PHY का इस्तेमाल नहीं किया जाएगा.

CoC, लिंक लेयर एन्क्रिप्शन और फ़्रीक्वेंसी हॉपिंग के लिए, स्टैंडर्ड ब्लूटूथ प्रोटोकॉल का इस्तेमाल करता है.

ASHA GATT सेवाएं

किसी पेरिफ़रल डिवाइस में, यहां बताई गई 'कान की मशीन के लिए ऑडियो स्ट्रीमिंग' (ASHA) GATT सर्वर सेवा लागू होनी चाहिए. सामान्य तौर पर डिस्कवर किए जा सकने वाले मोड में, डिवाइस इस सेवा का विज्ञापन करेगा, ताकि मुख्य डिवाइस, ऑडियो सिंक को पहचान सके. LE ऑडियो स्ट्रीमिंग के किसी भी ऑपरेशन के लिए, एन्क्रिप्शन की ज़रूरत होगी. बीएलई ऑडियो स्ट्रीमिंग में ये सुविधाएं शामिल हैं:

विशेषता प्रॉपर्टी ब्यौरा
ReadOnlyProperties पढ़े गए मैसेज ReadOnlyProperties देखें.
AudioControlPoint लिखें और जवाब के बिना लिखें ऑडियो स्ट्रीम के लिए कंट्रोल पॉइंट. AudioControlPoint देखें.
AudioStatusPoint पढ़ना/सूचना देना ऑडियो कंट्रोल पॉइंट के लिए, स्टेटस रिपोर्ट फ़ील्ड. AudioStatusPoint देखें.
वॉल्यूम जवाब के बिना लिखें -128 और 0 के बीच का बाइट, जो स्ट्रीम किए गए ऑडियो सिग्नल पर लागू होने वाले घटाव की मात्रा दिखाता है. यह घटाव -48 dB से 0 dB तक हो सकता है. -128 की सेटिंग का मतलब है कि ऑडियो पूरी तरह म्यूट है. इसका मतलब है कि म्यूट न किए गए ऑडियो का सबसे कम वॉल्यूम लेवल -127 है, जो -47.625 dB के बराबर है. सेटिंग 0 पर, सुनने की मशीन पर स्ट्रीम की गई रेल-टू-रेल साइन टोन, 100 dBSPL के बराबर इनपुट दिखाएगी. सेंट्रल, नाममात्र के पूरे स्केल में स्ट्रीम करेगा और पेरिफ़रल में मनमुताबिक प्रज़ेंटेशन लेवल सेट करने के लिए, इस वैरिएबल का इस्तेमाल करेगा.
LE_PSM_OUT पढ़े गए मैसेज ऑडियो चैनल को कनेक्ट करने के लिए इस्तेमाल किया जाने वाला पीएसएम. डायनैमिक रेंज [BT Vol 3, Part A, Sec 4.22] से चुना जाना चाहिए

सेवा और विशेषताओं को असाइन किए गए UUID:

सेवा का यूनीक आइडेंटिफ़ायर (यूआईडी): {0xFDF0}

विशेषता यूयूआईडी
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
AudioStatus {38663f1a-e711-4cac-b641-326b56404837}
वॉल्यूम {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

ASHA GATT सेवा के अलावा, डिवाइस की जानकारी देने वाली सेवा को भी लागू किया जाना चाहिए, ताकि सेंट्रल डिवाइस, डिवाइस के मैन्युफ़ैक्चरर के नाम और डिवाइस के नाम का पता लगा सके.

ReadOnlyProperties

ReadOnlyProperties में ये वैल्यू होती हैं:

बाइट ब्यौरा
0 वर्शन - यह 0x01 होना चाहिए
1 DeviceCapabilities देखें.
2-9 HiSyncId देखें.
10 FeatureMap देखें.
11-12 RenderDelay. यह समय, मिलीसेकंड में होता है. यह समय तब से शुरू होता है, जब डिवाइस को ऑडियो फ़्रेम मिलता है और आउटपुट रेंडर होने तक खत्म होता है. इन बाइट का इस्तेमाल, वीडियो को देर से चलाने के लिए किया जा सकता है, ताकि वह ऑडियो के साथ सिंक हो सके.
13-14 आने वाले समय में इस्तेमाल के लिए रिज़र्व किया गया. शून्य पर शुरू करें.
15-16 इस्तेमाल किए जा सकने वाले कोडेक आईडी. यह काम करने वाले कोडेक आईडी का बिटमास्क है. बिट लोकेशन में 1 का मतलब, काम करने वाले कोडेक से है. उदाहरण के लिए, 0x0002 से पता चलता है कि 16 केएचज़ पर G.722 काम करता है. बाकी सभी बिट 0 पर सेट किए जाएंगे.

DeviceCapabilities

बिट ब्यौरा
0 डिवाइस की साइड (0: बाईं, 1: दाईं)
1 इससे पता चलता है कि डिवाइस स्टैंडअलोन है और उसे मोनो डेटा मिलता है या डिवाइस किसी सेट का हिस्सा है (0: मोनोरल, 1: बाइनॉरल)
2 डिवाइस पर सीएसआईएस काम करता है (0: काम नहीं करता, 1: काम करता है)
3-7 रिज़र्व किया गया (0 पर सेट)

HiSyncID

यह फ़ील्ड, सभी बायनेरल डिवाइसों के लिए यूनीक होना चाहिए. हालांकि, यह बाएं और दाएं सेट के लिए एक जैसा होना चाहिए.

बाइट ब्यौरा
0-1 मैन्युफ़ैक्चरर का आईडी. यह BTSIG से असाइन किया गया कंपनी के आइडेंटिफ़ायर है.
2-7 यह एक यूनीक आईडी है, जिससे सुनने में मदद करने वाले डिवाइस के सेट की पहचान की जाती है. यह आईडी, बाईं और दाईं ओर मौजूद दोनों पेरिफ़रल पर एक जैसा होना चाहिए.

FeatureMap

बिट ब्यौरा
0 LE CoC ऑडियो आउटपुट स्ट्रीमिंग की सुविधा काम करती है (हां/नहीं).
1-7 रिज़र्व किया गया (0 पर सेट किया गया).

कोडेक आईडी

अगर बिट सेट है, तो इसका मतलब है कि वह कोडेक काम करता है.

आईडी / बिट नंबर कोडेक और सैंपल रेट ज़रूरी बिटरेट फ़्रेम टाइम सेंट्रल (C) या पेरिफ़ेरल (P) पर ज़रूरी है
0 बुक किया हुआ बुक किया हुआ बुक किया हुआ बुक किया हुआ
1 G.722 @ 16 kHz 64 केबीपीएस वैरिएबल C और P
2 से 15 तक के नंबर रिज़र्व हैं.
0 भी रिज़र्व है.

AudioControlPoint

LE CoC बंद होने पर, इस कंट्रोल पॉइंट का इस्तेमाल नहीं किया जा सकता. प्रोसेस के बारे में जानने के लिए, ऑडियो स्ट्रीम शुरू करना और बंद करना लेख पढ़ें.

ऑपकोड तर्क GATT सब-प्रोसिड्यूर ब्यौरा
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
जवाब के साथ लिखें और AudioStatusPoint विशेषता के ज़रिए, स्थिति की एक और सूचना मिलने की उम्मीद करें. यह निर्देश देता है कि कोडेक को रीसेट करें और फ़्रेम 0 का प्लेबैक शुरू करें. कोडेक फ़ील्ड से पता चलता है कि इस वीडियो को चलाने के लिए, किस कोडेक आईडी का इस्तेमाल करना है. उदाहरण के लिए, 16k Hz पर G.722 के लिए कोडेक फ़ील्ड "1" है.

ऑडियो टाइप बिट फ़ील्ड से पता चलता है कि स्ट्रीम में किस तरह का ऑडियो मौजूद है:
  • 0 - जानकारी नहीं है
  • 1 - रिंगटोन
  • 2 - फ़ोन कॉल
  • 3 - मीडिया
otherstate फ़ील्ड से पता चलता है कि बाइनॉरल डिवाइसों का दूसरा हिस्सा कनेक्ट है या नहीं. जब कोई दूसरा पेरिफ़रल डिवाइस कनेक्ट होता है, तो फ़ील्ड की वैल्यू 1 होती है. इसके अलावा, वैल्यू 0 होती है.

«Stop» ऑपरेंड कोड मिलने से पहले, पेरिफ़रल डिवाइस, कनेक्शन अपडेट का अनुरोध नहीं करेगा.
2 «Stop» कोई नहीं जवाब के साथ लिखें और AudioStatusPoint विशेषता के ज़रिए, स्थिति की एक और सूचना मिलने की उम्मीद करें. यह निर्देश देता है कि ऑडियो को रेंडर करना बंद कर दिया जाए. ऑडियो को फिर से रेंडर करने के लिए, इस रोक के बाद एक नया ऑडियो सेटअप सिलसिला शुरू किया जाना चाहिए.
3 «Status»
  • uint8_t connected
जवाब के बिना लिखें कनेक्ट किए गए पेरिफ़रल को बताता है कि दूसरे पेरिफ़रल का स्टेटस अपडेट हुआ है. कनेक्ट किया गया फ़ील्ड, अपडेट के टाइप के बारे में बताता है:
  • 0 - अन्य सहायक डिवाइस डिसकनेक्ट हो गया
  • 1 - कनेक्ट किया गया अन्य पेरिफ़रल
  • 2 - किसी भी कनेक्शन पर, LE कनेक्शन पैरामीटर का अपडेट हुआ

AudioStatusPoint

ऑडियो कंट्रोल पॉइंट के लिए स्टेटस रिपोर्ट फ़ील्ड

ऑपकोड ब्यौरा
0 स्टेटस ठीक है
-1 अज्ञात निर्देश
-2 गैर-कानूनी पैरामीटर

ASHA GATT सेवा के विज्ञापन

सेवा का यूनीक आइडेंटिफ़ायर (यूयूआईडी), विज्ञापन पैकेट में होना चाहिए. विज्ञापन या स्कैन रिस्पॉन्स फ़्रेम में से किसी एक में, पेरिफ़रल में सेवा डेटा होना चाहिए:

बाइट ऑफ़सेट नाम ब्यौरा
0 विज्ञापन की अवधि >= 0x09
1 विज्ञापन का टाइप 0x16 (सेवा डेटा - 16-बिट यूयूआईडी)
2-3 सेवा का यूयूआईडी 0xFDF0 (लिटल-इंडियन)

ध्यान दें: यह एक अस्थायी आईडी है.
4 प्रोटोकॉल वर्शन 0x01
5 क्षमता
  • 0 - बाईं (0) या दाईं (1) ओर
  • 1 - एक (0) या दो (1) डिवाइस.
  • 2 - डिवाइस पर सीएसआईएस काम करता है (<0: काम नहीं करता, 1: काम करता है)
  • 3-7 - रिज़र्व किया गया. ये बिट शून्य होने चाहिए.
6-9 काटा गया HiSyncID HiSyncId के चार सबसे अहम बाइट. ये बाइट, आईडी का सबसे रैंडम हिस्सा होने चाहिए.

इन डिवाइसों में पूरा स्थानीय नाम डेटा टाइप होना चाहिए. इससे, यह पता चलता है कि यह डिवाइस, सुनने में मदद करने वाली मशीन है. इस नाम का इस्तेमाल, मोबाइल डिवाइस के यूज़र इंटरफ़ेस पर किया जाएगा, ताकि उपयोगकर्ता सही डिवाइस चुन सके. नाम से यह पता नहीं चलना चाहिए कि कौनसा चैनल बायां है और कौनसा चैनल दायां है, क्योंकि यह जानकारी DeviceCapabilities में दी जाती है.

अगर पेरिफ़रल, नाम और ASHA सेवा के डेटा टाइप को एक ही फ़्रेम टाइप (ADV या SCAN RESP) में डालते हैं, तो दोनों डेटा टाइप ("पूरा स्थानीय नाम" और "ASHA सेवा के लिए सेवा डेटा") एक ही फ़्रेम में दिखेंगे. इससे मोबाइल डिवाइस स्कैनर को एक ही स्कैन के नतीजे में, दोनों डेटा मिल सकते हैं.

शुरुआती पेयरिंग के दौरान, यह ज़रूरी है कि डिवाइसों के बीच सूचनाएं तेज़ी से भेजी और पाएं जाएं, ताकि मोबाइल डिवाइस डिवाइसों को तुरंत ढूंढ सके और उनसे कनेक्ट हो सके.

बाईं और दाईं ओर के पेरिफ़रल डिवाइसों को सिंक करना

Android मोबाइल डिवाइसों पर ब्लूटूथ के साथ काम करने के लिए, सहायक डिवाइसों को यह पक्का करना होता है कि वे सिंक किए गए हों. बाईं और दाईं ओर के डिवाइसों पर, वीडियो का समय एक साथ होना चाहिए. दोनों पेरिफ़रल डिवाइसों को एक ही समय पर, सोर्स से ऑडियो सैंपल चलाने चाहिए.

ऑडियो पेलोड के हर पैकेट के आगे मौजूद क्रम संख्या का इस्तेमाल करके, पेरिफ़रल डिवाइस अपने समय को सिंक कर सकते हैं. सेंट्रल प्रोसेसिंग यूनिट यह पक्का करती है कि हर पेरिफ़रल पर एक ही समय पर चलाए जाने वाले ऑडियो पैकेट का क्रम एक ही हो. हर ऑडियो पैकेट के बाद, क्रम की संख्या एक बढ़ जाती है. हर क्रम का नंबर आठ बिट का होता है. इसलिए, क्रम के नंबर 256 ऑडियो पैकेट के बाद दोहराए जाएंगे. हर कनेक्शन के लिए, ऑडियो पैकेट का साइज़ और सैंपल रेट तय होता है. इसलिए, दोनों डिवाइसों के बीच, वीडियो चलाने में लगने वाले समय का अनुमान लगाया जा सकता है. ऑडियो पैकेट के बारे में ज़्यादा जानने के लिए, ऑडियो पैकेट का फ़ॉर्मैट और समय देखें.

जब सिंक करने की ज़रूरत हो, तो सेंट्रल डिवाइस, दोनों कान में लगाए जाने वाले डिवाइसों को ट्रिगर भेजकर मदद करता है. जब भी कोई ऐसा काम होता है जिससे सिंक करने की सुविधा पर असर पड़ सकता है, तो ये ट्रिगर हर पेरिफ़ेरल को, अपने जोड़े गए पेरिफ़ेरल डिवाइस की स्थिति की जानकारी देते हैं. ये ट्रिगर हैं:

  • AudioControlPoint के «Start» कमांड के हिस्से के तौर पर, बाइनॉरल डिवाइसों के दूसरे हिस्से की मौजूदा कनेक्शन स्थिति दी गई है.
  • जब भी किसी एक डिवाइस पर कनेक्शन, डिसकनेक्ट या कनेक्शन पैरामीटर अपडेट करने की कार्रवाई होती है, तब AudioControlPoint का «Status» कमांड, दोनों कानों के लिए बने डिवाइसों के दूसरे हिस्से पर भेजा जाता है.

ऑडियो पैकेट का फ़ॉर्मैट और टाइमिंग

ऑडियो फ़्रेम (सैंपल के ब्लॉक) को पैकेट में पैक करने से, सुनने की सुविधा देने वाले डिवाइस को लिंक लेयर के टाइमिंग ऐंकर से टाइमिंग मिलती है. इसे लागू करने के लिए, ये काम करें:

  • ऑडियो फ़्रेम, समय के हिसाब से हमेशा कनेक्शन इंटरवल से मेल खाना चाहिए. उदाहरण के लिए, अगर कनेक्शन इंटरवल 20 मिलीसेकंड और सैंपल रेट 16 किलोहर्ट्ज़ है, तो ऑडियो फ़्रेम में 320 सैंपल होंगे.
  • सिस्टम में सैंपल रेट, 8kHz के मल्टीपल में ही सेट किए जा सकते हैं, ताकि किसी फ़्रेम में हमेशा पूर्णांक सैंपल हों. भले ही, फ़्रेम का समय या कनेक्शन इंटरवल कुछ भी हो.
  • ऑडियो फ़्रेम के आगे सीक्वेंस बाइट होना चाहिए. सीक्वेंस बाइट की गिनती, रैप-अराउंड के साथ की जाएगी. इससे, पेरिफ़रल को बफ़र के मेल न खाने या अंडरफ़्लो का पता लगाने में मदद मिलेगी.
  • ऑडियो फ़्रेम हमेशा एक ही LE पैकेट में फ़िट होना चाहिए. ऑडियो फ़्रेम को अलग L2CAP पैकेट के तौर पर भेजा जाएगा. LE LL PDU का साइज़ यह होगा:
    ऑडियो पेलोड साइज़ + 1 (सीक्वेंस काउंटर) + 6 (L2CAP हेडर के लिए 4, एसडीयू के लिए 2)
  • कनेक्शन इवेंट हमेशा इतना बड़ा होना चाहिए कि उसमें दो ऑडियो पैकेट और दो खाली पैकेट शामिल किए जा सकें. इससे, फिर से भेजने के लिए बैंडविड्थ रिज़र्व की जा सकेगी. ध्यान दें कि ऑडियो पैकेट को सेंट्रल के ब्लूटूथ कंट्रोलर से अलग-अलग हिस्सों में बांटा जा सकता है. हर कनेक्शन इवेंट के लिए, पेरिफ़रल डिवाइस को दो से ज़्यादा फ़्रैगमेंट किए गए ऑडियो पैकेट पाने चाहिए.

सेंट्रल को कुछ सुविधा देने के लिए, G.722 पैकेट की लंबाई तय नहीं की गई है. सेंटर सेट किए गए कनेक्शन इंटरवल के आधार पर, G.722 पैकेट की लंबाई बदल सकती है.

G.722 आउटपुट ऑक्टेट फ़ॉर्मैट, Rec. ITU-T G.722 (09/2012) के सेक्शन 1.4.4 "मल्टीप्लेक्सर" का रेफ़रंस देता है

सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) जिन कोडेक के साथ काम करता है उनके लिए, वह डिवाइस यहां दिए गए कनेक्शन पैरामीटर के साथ काम करना चाहिए. यह उन कॉन्फ़िगरेशन की पूरी सूची नहीं है जिन्हें सेंट्रल लागू कर सकता है.

कोडेक बिटरेट कनेक्शन इंटरवल सीई की लंबाई (1M/2M PHY) ऑडियो पेलोड का साइज़
G.722 @ 16 kHz 64 केबीपीएस 20 मिलीसेकंड 5,000/3,750 डॉलर 160 बाइट

ऑडियो स्ट्रीम शुरू और बंद करना

ऑडियो स्ट्रीम शुरू करने से पहले, सेंट्रल डिवाइस, डिवाइसों से पूछताछ करता है और एक सामान्य कोडेक सेट करता है. इसके बाद, स्ट्रीम सेटअप करने के लिए यह क्रम अपनाया जाता है:

  1. PSM और वैकल्पिक रूप से, RenderDelay को पढ़ा जाता है. इन वैल्यू को केंद्रीय सर्वर कैश मेमोरी में सेव कर सकता है.
  2. CoC L2CAP चैनल खुला है – शुरुआत में, पेरिफ़रल 8 क्रेडिट देगा.
  3. चुने गए कोडेक के लिए ज़रूरी पैरामीटर पर लिंक को स्विच करने के लिए, कनेक्शन अपडेट जारी किया जाता है. सेंट्रल, पिछले चरण में सीओसी कनेक्शन से पहले यह कनेक्शन अपडेट कर सकता है.
  4. सेंट्रल और पेरिफ़रल होस्ट, दोनों ही अपडेट के पूरा होने के इवेंट का इंतज़ार करते हैं.
  5. ऑडियो एन्कोडर को फिर से शुरू करें और पैकेट सीक्वेंस की गिनती को 0 पर रीसेट करें. AudioControlPoint पर, काम के पैरामीटर के साथ «Start» कमांड भेजा जाता है. स्ट्रीमिंग शुरू करने से पहले, सेंट्रल यूनिट, पेरिफ़रल यूनिट से मिले «Start» कमांड के स्टेटस की सूचना मिलने का इंतज़ार करती है. इस इंतज़ार से, डिवाइस के ऑडियो प्लेलबैक की लाइन तैयार करने में समय मिलता है. ऑडियो स्ट्रीमिंग के दौरान, हर कनेक्शन इवेंट में रिप्लिक उपलब्ध होना चाहिए. भले ही, मौजूदा रिप्लिक में देरी शून्य न हो.
  6. पेरिफ़रल, अपनी इंटरनल कतार (क्रम संख्या 0) से पहला ऑडियो पैकेट लेता है और उसे चलाता है.

ऑडियो स्ट्रीम बंद करने के लिए, मुख्य डिवाइस «Stop» निर्देश जारी करता है. इस निर्देश के बाद, हर कनेक्शन इवेंट के लिए, पेरिफ़रल डिवाइस के उपलब्ध होने की ज़रूरत नहीं होती. ऑडियो स्ट्रीमिंग को फिर से शुरू करने के लिए, ऊपर दिया गया तरीका अपनाएं. इसके लिए, पांचवें चरण से शुरू करें. जब सेंट्रल डिवाइस ऑडियो स्ट्रीम नहीं कर रहा है, तब भी उसे GATT सेवाओं के लिए LE कनेक्शन बनाए रखना चाहिए.

सहायक डिवाइस, सेंट्रल डिवाइस को कनेक्शन अपडेट नहीं भेजेगा. ऑडियो स्ट्रीम न होने पर, पावर बचाने के लिए सेंट्रल डिवाइस, पेरिफ़रल डिवाइस को कनेक्शन अपडेट भेज सकता है.