হিয়ারিং এইড (HA) ডিভাইসগুলি ব্লুটুথ লো এনার্জি (BLE) এর উপর সংযোগ-ভিত্তিক L2CAP চ্যানেল (CoC) ব্যবহার করে Android-চালিত মোবাইল ডিভাইসগুলিতে অ্যাক্সেসযোগ্যতা উন্নত করতে পারে। CoC অডিওর একটি স্থির প্রবাহ বজায় রাখার জন্য বেশ কয়েকটি অডিও প্যাকেটের একটি ইলাস্টিক বাফার ব্যবহার করে, এমনকি প্যাকেটের ক্ষতির উপস্থিতিতেও। এই বাফার শ্রবণ সহায়ক ডিভাইসের জন্য অডিও গুণমান প্রদান করে বিলম্বের খরচে।
CoC এর ডিজাইন ব্লুটুথ (BT) কোর স্পেসিফিকেশন সংস্করণ 6.0 উল্লেখ করে। মূল স্পেসিফিকেশনের সাথে সারিবদ্ধ থাকার জন্য, এই পৃষ্ঠার সমস্ত মাল্টি-বাইট মান অবশ্যই ছোট-এন্ডিয়ান হিসাবে পড়তে হবে।
পরিভাষা
- কেন্দ্রীয়
- Android ডিভাইস যা ব্লুটুথের মাধ্যমে বিজ্ঞাপনের জন্য স্ক্যান করে।
- পেরিফেরাল
- শ্রবণ যন্ত্র যা ব্লুটুথের মাধ্যমে বিজ্ঞাপনের প্যাকেট পাঠায়।
নেটওয়ার্ক টপোলজি এবং সিস্টেম আর্কিটেকচার
শ্রবণ যন্ত্রের জন্য CoC ব্যবহার করার সময়, নেটওয়ার্ক টপোলজি একটি একক কেন্দ্রীয় এবং দুটি পেরিফেরাল অনুমান করে, একটি বাম এবং একটি ডান, যেমন চিত্র 1-এ দেখা যায়৷ ব্লুটুথ অডিও সিস্টেম বাম এবং ডান পেরিফেরালগুলিকে একটি একক অডিও সিঙ্ক হিসাবে দেখে৷ যদি একটি পেরিফেরাল অনুপস্থিত থাকে, একটি মনোরাল ফিট বা সংযোগ হারানোর কারণে, তাহলে কেন্দ্রীয় বাম এবং ডান অডিও চ্যানেল মিশ্রিত করে এবং বাকি পেরিফেরালে অডিও প্রেরণ করে। যদি সেন্ট্রাল উভয় পেরিফেরালের সাথে সংযোগ হারায়, তাহলে সেন্ট্রাল অডিও সিঙ্কের লিঙ্কটি হারিয়ে গেছে বলে বিবেচনা করে। এই ক্ষেত্রে, কেন্দ্রীয় রুট অডিও অন্য আউটপুট.
চিত্র 1. CoC ওভার BLE ব্যবহার করে অ্যান্ড্রয়েড মোবাইল ডিভাইসের সাথে শ্রবণযন্ত্র যুক্ত করার জন্য টপোলজি।
যখন সেন্ট্রাল পেরিফেরালে অডিও ডেটা স্ট্রিমিং না করে এবং একটি BLE সংযোগ বজায় রাখতে পারে, তখন কেন্দ্রীয় পেরিফেরাল থেকে সংযোগ বিচ্ছিন্ন করা উচিত নয়। সংযোগ বজায় রাখা পেরিফেরালে থাকা GATT সার্ভারের সাথে ডেটা যোগাযোগের অনুমতি দেয়।
শ্রবণ যন্ত্র জোড়া এবং সংযোগ করার সময়, কেন্দ্রীয় অবশ্যই:
- পেয়ার করা আরও সাম্প্রতিক বাম এবং ডান পেরিফেরালগুলির উপর নজর রাখুন।
- অনুমান করুন পেরিফেরালগুলি ব্যবহার করা হচ্ছে যদি একটি বৈধ জোড়া বিদ্যমান থাকে। সংযোগ বিচ্ছিন্ন হয়ে গেলে সেন্ট্রালকে পেয়ার করা ডিভাইসের সাথে সংযোগ বা পুনরায় সংযোগ করার চেষ্টা করতে হবে।
- অনুমান করুন যে পেয়ারিং মুছে ফেলা হলে পেরিফেরালগুলি আর ব্যবহার করা হয় না।
উপরের ক্ষেত্রে, পেয়ারিং বলতে বোঝায় OS-তে প্রদত্ত UUID এবং বাম/ডান মনোনীতদের সাথে শ্রবণযন্ত্রের একটি সেট নিবন্ধন করার ক্রিয়া, ব্লুটুথ পেয়ারিং প্রক্রিয়া নয়।
সিস্টেমের প্রয়োজনীয়তা
একটি ভাল ব্যবহারকারীর অভিজ্ঞতার জন্য CoC সঠিকভাবে প্রয়োগ করতে, কেন্দ্রীয় এবং পেরিফেরাল ডিভাইসগুলিতে ব্লুটুথ সিস্টেমগুলিকে নিম্নলিখিতগুলি করতে হবে:
- একটি অনুগত BT 4.2 বা উচ্চতর নিয়ামক প্রয়োগ করুন। আমরা অত্যন্ত LE নিরাপদ সংযোগ সুপারিশ.
- অডিও প্যাকেট ফরম্যাট এবং টাইমিং- এ বর্ণিত পরামিতি সহ কেন্দ্রে কমপক্ষে দুটি যুগপত LE লিঙ্ক সমর্থন করুন।
- অডিও প্যাকেট ফরম্যাট এবং টাইমিং- এ বর্ণিত পরামিতি সহ পেরিফেরালে কমপক্ষে একটি LE লিঙ্ক সমর্থন করুন।
- একটি LE ক্রেডিট ভিত্তিক প্রবাহ নিয়ন্ত্রণ সমর্থন করুন [BT Vol 3, Part A, Sec 10.1]। ডিভাইসগুলি অবশ্যই CoC-তে কমপক্ষে 167 বাইটের একটি MTU এবং MPS আকার সমর্থন করবে এবং আটটি প্যাকেট পর্যন্ত বাফার করতে সক্ষম হবে।
- কমপক্ষে 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
প্যারামিটারগুলিকে এই স্পেসিফিকেশনগুলির জন্য প্রয়োজনীয় ক্ষুদ্রতম প্রয়োজনীয় মানগুলির জন্য সেট করুন৷ ফ্রেম পাওয়ার জন্য প্রয়োজনীয় সময়ের পরিমাণ গণনা করার সময় এটি কেন্দ্রীয়কে তার সময় নির্ধারণকারীকে অপ্টিমাইজ করতে দেয়।
আমরা দৃঢ়ভাবে সুপারিশ করছি যে কেন্দ্রীয় এবং পেরিফেরাল সমর্থন 2M PHY যেমন BT 5.0 স্পেসিফিকেশনে উল্লেখ করা হয়েছে। সেন্ট্রালকে অবশ্যই 1M এবং 2M PHY উভয় ক্ষেত্রেই কমপক্ষে 64 kbit/s এর অডিও লিঙ্ক সমর্থন করতে হবে। BLE দীর্ঘ পরিসরের PHY ব্যবহার করা উচিত নয়।
CoC লিঙ্ক লেয়ার এনক্রিপশন এবং ফ্রিকোয়েন্সি হপিংয়ের জন্য স্ট্যান্ডার্ড ব্লুটুথ প্রক্রিয়া ব্যবহার করে।
আশা গ্যাট পরিষেবা
একটি পেরিফেরালকে অবশ্যই অডিও স্ট্রিমিং ফর হিয়ারিং এইড (ASHA) GATT সার্ভার পরিষেবা প্রয়োগ করতে হবে যা নীচে বর্ণিত হয়েছে৷ পেরিফেরালকে অবশ্যই এই পরিষেবাটির বিজ্ঞাপন দিতে হবে যখন সাধারণ আবিষ্কারযোগ্য মোডে কেন্দ্রীয় একটি অডিও সিঙ্ককে চিনতে দেয়। যেকোনো LE অডিও স্ট্রিমিং অপারেশনের জন্য অবশ্যই এনক্রিপশন প্রয়োজন। BLE অডিও স্ট্রিমিং নিম্নলিখিত বৈশিষ্ট্যগুলি নিয়ে গঠিত:
চারিত্রিক | বৈশিষ্ট্য | বর্ণনা |
---|---|---|
ReadOnlyProperties | পড়ুন | ReadOnlyProperties দেখুন। |
AudioControlPoint | উত্তর ছাড়াই লিখুন এবং লিখুন | অডিও স্ট্রিম জন্য নিয়ন্ত্রণ পয়েন্ট. AudioControlPoint দেখুন। |
AudioStatusPoint | পড়ুন/বিজ্ঞাপন করুন | অডিও কন্ট্রোল পয়েন্টের জন্য স্ট্যাটাস রিপোর্ট ক্ষেত্র। AudioStatusPoint দেখুন। |
Volume | প্রতিক্রিয়া ছাড়াই লিখুন | -128 এবং 0-এর মধ্যে বাইট স্ট্রীম করা অডিও সিগন্যালে প্রয়োগ করার জন্য টেনশনের পরিমাণ নির্দেশ করে, -48 dB থেকে 0 dB পর্যন্ত। সেটিং -128 সম্পূর্ণরূপে নিঃশব্দ হিসাবে ব্যাখ্যা করা আবশ্যক, অর্থাৎ, সর্বনিম্ন অ-নিঃশব্দ ভলিউম স্তর হল -127 যা -47.625 dB ক্ষয়করণের সমতুল্য। 0 সেটিং এ, স্ট্রিম করা একটি রেল-টু-রেল সাইন টোন অবশ্যই শ্রবণ যন্ত্রে একটি 100 dBSPL ইনপুট সমতুল্য উপস্থাপন করবে। কেন্দ্রীয়কে অবশ্যই নামমাত্র পূর্ণ স্কেলে স্ট্রিম করতে হবে এবং পেরিফেরালে পছন্দসই উপস্থাপনা স্তর সেট করতে এই ভেরিয়েবলটি ব্যবহার করতে হবে। |
LE_PSM_OUT | পড়ুন | অডিও চ্যানেল সংযোগ করার জন্য PSM ব্যবহার করুন। গতিশীল পরিসর থেকে বাছাই করা হবে [BT Vol 3, Part A, Sec 4.22]। |
নিম্নলিখিত সারণীগুলি পরিষেবার জন্য নির্ধারিত UUID এবং তাদের বৈশিষ্ট্যগুলি বর্ণনা করে৷
পরিষেবা UUID: {0xFDF0}
চারিত্রিক | UUID |
---|---|
ReadOnlyProperties | {6333651e-c481-4a3e-9169-7c902aad37bb} |
AudioControlPoint | {f0d4de7e-4a88-476c-9d9f-1937b0996cc0} |
AudioStatus | {38663f1a-e711-4cac-b641-326b56404837} |
Volume | {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 kHz এ G.722 সমর্থিত। অন্য সব বিট অবশ্যই 0 এ সেট করতে হবে। |
ডিভাইস সক্ষমতা
বিট | বর্ণনা |
---|---|
0 | ডিভাইস সাইড (0: বাম, 1: ডান) |
1 | ডিভাইসটি স্বতন্ত্র কিনা এবং মনো ডেটা গ্রহণ করে বা ডিভাইসটি একটি সেটের অংশ কিনা তা নির্দেশ করে (0: মনোরাল, 1: বাইনরাল) |
2 | ডিভাইস CSIS সমর্থন করে (0: সমর্থিত নয়, 1: সমর্থিত) |
3-7 | সংরক্ষিত (0 তে সেট) |
হাইসিঙ্কআইডি
এই ক্ষেত্রটি অবশ্যই সমস্ত বাইনোরাল ডিভাইসের জন্য অনন্য হতে হবে তবে এটি বাম এবং ডান সেটের জন্য একই হতে হবে।
বাইট | বর্ণনা |
---|---|
0-1 | প্রস্তুতকারকের আইডি। এটি BTSIG দ্বারা নির্ধারিত কোম্পানি শনাক্তকারী । |
2-7 | হিয়ারিং এইড সেট সনাক্তকারী অনন্য আইডি। এই আইডিটি অবশ্যই বাম এবং ডান উভয় পেরিফেরালে একই সেট করতে হবে। |
ফিচারম্যাপ
বিট | বর্ণনা |
---|---|
0 | LE CoC অডিও আউটপুট স্ট্রিমিং সমর্থিত (হ্যাঁ/না)। |
1-7 | সংরক্ষিত (0 তে সেট)। |
কোডেক আইডি
যদি বিট সেট করা হয়, তাহলে সেই নির্দিষ্ট কোডেক হল সমর্থন।
আইডি/বিট নম্বর | কোডেক এবং নমুনা হার | প্রয়োজনীয় বিটরেট | ফ্রেম সময় | কেন্দ্রীয় (C) বা পেরিফেরাল (P) এ বাধ্যতামূলক |
---|---|---|---|---|
0 | সংরক্ষিত | সংরক্ষিত | সংরক্ষিত | সংরক্ষিত |
1 | G.722 @ 16 kHz | 64 kbit/s | পরিবর্তনশীল | সি এবং পি |
2-15 সংরক্ষিত। |
অডিও কন্ট্রোলপয়েন্ট
যখন LE CoC বন্ধ থাকে তখন এই নিয়ন্ত্রণ পয়েন্টটি ব্যবহার করা যাবে না। পদ্ধতির বর্ণনার জন্য একটি অডিও স্ট্রিম শুরু এবং বন্ধ করুন দেখুন।
অপকোড | যুক্তি | GATT উপ-প্রক্রিয়া | বর্ণনা |
---|---|---|---|
1 «Start» |
| প্রতিক্রিয়া সহ লিখুন, এবং AudioStatusPoint বৈশিষ্ট্য ব্যবহার করে একটি অতিরিক্ত স্থিতি বিজ্ঞপ্তি আশা করুন। | পেরিফেরালকে কোডেক রিসেট করতে এবং ফ্রেম 0 এর প্লেব্যাক শুরু করার নির্দেশ দেয়। codec ক্ষেত্রটি এই প্লেব্যাকের জন্য ব্যবহার করার জন্য কোডেক আইডি নির্দেশ করে। উদাহরণস্বরূপ, 16 kHz এ G.722 এর জন্য codec ক্ষেত্র হল `1`।অডিও টাইপ বিট ক্ষেত্রটি স্ট্রীমে উপস্থিত অডিও প্রকারগুলি নির্দেশ করে:
otherstate ক্ষেত্রটি নির্দেশ করে যে বাইনোরাল ডিভাইসগুলির অন্য দিকটি সংযুক্ত কিনা। অন্যান্য পেরিফেরাল ডিভাইস সংযুক্ত হলে ক্ষেত্রের মান 1 হয়, অন্যথায় মান 0 হয়।একটি «Stop» অপকোড প্রাপ্ত হওয়ার আগে পেরিফেরাল অবশ্যই সংযোগ আপডেটের অনুরোধ করবে না। |
2 «Stop» | কোনোটিই নয় | প্রতিক্রিয়া সহ লিখুন, এবং AudioStatusPoint বৈশিষ্ট্য ব্যবহার করে একটি অতিরিক্ত স্থিতি বিজ্ঞপ্তি আশা করুন। | পেরিফেরালকে অডিও রেন্ডারিং বন্ধ করার নির্দেশ দেয়। আবার অডিও রেন্ডার করার জন্য এই স্টপের পরে একটি নতুন অডিও সেটআপ ক্রম শুরু করতে হবে৷ |
3 «Status» |
| প্রতিক্রিয়া ছাড়াই লিখুন | সংযুক্ত পেরিফেরালকে অবহিত করে যে অন্য পেরিফেরালটিতে একটি স্থিতি আপডেট রয়েছে৷ connected ক্ষেত্র আপডেটের ধরন নির্দেশ করে:
|
AudioStatusPoint
অডিও কন্ট্রোল পয়েন্টের জন্য স্ট্যাটাস রিপোর্ট ক্ষেত্র
অপকোডস | বর্ণনা |
---|---|
0 | স্ট্যাটাস ঠিক আছে |
-1 | অজানা আদেশ |
-2 | অবৈধ পরামিতি |
আশা GATT পরিষেবার বিজ্ঞাপন
পরিষেবা UUID অবশ্যই বিজ্ঞাপনের প্যাকেটে থাকতে হবে। বিজ্ঞাপন বা স্ক্যান প্রতিক্রিয়া ফ্রেমে, পেরিফেরালগুলির একটি পরিষেবা ডেটা টাইপ থাকতে হবে:
বাইট অফসেট | নাম | বর্ণনা |
---|---|---|
0 | AD দৈর্ঘ্য | >= 0x09 |
1 | AD প্রকার | 0x16 (পরিষেবা ডেটা - 16-বিট UUID) |
2-3 | পরিষেবা UUID | 0xFDF0 (লিটল-এন্ডিয়ান) দ্রষ্টব্য: এটি একটি অস্থায়ী আইডি। |
4 | প্রোটোকল সংস্করণ | 0x01 |
5 | সামর্থ্য |
|
6-9 | HiSyncId কাটা | HiSyncId এর চারটি সবচেয়ে উল্লেখযোগ্য বাইট। এই বাইটগুলি অবশ্যই আইডির সবচেয়ে র্যান্ডম অংশ হতে হবে। |
পেরিফেরালগুলিতে অবশ্যই একটি সম্পূর্ণ স্থানীয় নামের ডেটা টাইপ থাকতে হবে যা হিয়ারিং এইডের নাম নির্দেশ করে। এই নামটি মোবাইল ডিভাইসের ইউজার ইন্টারফেসে ব্যবহার করা হয় যাতে ব্যবহারকারী সঠিক ডিভাইসটি নির্বাচন করতে পারে। নামটি অবশ্যই বাম বা ডান চ্যানেল নির্দেশ করবে না কারণ এই তথ্যটি DeviceCapabilities
ক্যাপাবিলিটিসে প্রদান করা হয়েছে।
যদি পেরিফেরালগুলি নাম এবং আশা পরিষেবার ডেটা টাইপগুলিকে একই ফ্রেমের প্রকারে রাখে (ADV বা SCAN RESP), তাহলে দুটি ডেটা প্রকার ("সম্পূর্ণ স্থানীয় নাম" এবং "আশা পরিষেবার জন্য পরিষেবা ডেটা") একই ফ্রেমে উপস্থিত হওয়া আবশ্যক৷ এটি মোবাইল ডিভাইস স্ক্যানারকে একই স্ক্যান ফলাফলে উভয় ডেটা পেতে দেয়।
প্রাথমিক পেয়ারিংয়ের সময়, এটি গুরুত্বপূর্ণ যে পেরিফেরালগুলি যথেষ্ট দ্রুত গতিতে বিজ্ঞাপন দেয় যাতে মোবাইল ডিভাইসটি দ্রুত পেরিফেরিয়ালগুলি আবিষ্কার করে এবং তাদের সাথে বন্ধন করে।
বাম এবং ডান পেরিফেরাল ডিভাইস সিঙ্ক্রোনাইজ করুন
অ্যান্ড্রয়েড মোবাইল ডিভাইসে ব্লুটুথের সাথে কাজ করার জন্য, পেরিফেরাল ডিভাইসগুলি তাদের সিঙ্ক্রোনাইজ করা নিশ্চিত করার জন্য দায়ী৷ বাম এবং ডান পেরিফেরাল ডিভাইসে প্লেব্যাক সময়মতো সিঙ্ক্রোনাইজ করা প্রয়োজন। উভয় পেরিফেরাল ডিভাইস একই সময়ে উত্স থেকে অডিও নমুনা প্লে ব্যাক করা আবশ্যক.
পেরিফেরাল ডিভাইসগুলি অডিও পেলোডের প্রতিটি প্যাকেটে পূর্বে লেখা একটি সিকোয়েন্স নম্বর ব্যবহার করে তাদের সময় সিঙ্ক্রোনাইজ করতে পারে। কেন্দ্রীয় গ্যারান্টি দেয় যে প্রতিটি পেরিফেরালে একই সময়ে চালানো অডিও প্যাকেটগুলির একই ক্রম নম্বর রয়েছে৷ প্রতিটি অডিও প্যাকেটের পরে ক্রম সংখ্যা এক দ্বারা বৃদ্ধি পায়। প্রতিটি ক্রম সংখ্যা 8-বিট দীর্ঘ, তাই 256 টি অডিও প্যাকেটের পরে ক্রম সংখ্যা পুনরাবৃত্তি হয়। যেহেতু প্রতিটি সংযোগের জন্য প্রতিটি অডিও প্যাকেটের আকার এবং নমুনার হার স্থির করা হয়েছে, দুটি পেরিফেরাল আপেক্ষিক খেলার সময় বের করতে পারে। অডিও প্যাকেট সম্পর্কে আরও তথ্যের জন্য, অডিও প্যাকেট বিন্যাস এবং সময় দেখুন।
যখন সিঙ্ক্রোনাইজেশনের প্রয়োজন হতে পারে তখন বাইনোরাল ডিভাইসগুলিতে ট্রিগার প্রদান করে কেন্দ্রীয় সহায়তা করে। এই ট্রিগারগুলি প্রতিটি পেরিফেরালকে তার জোড়াযুক্ত পেরিফেরাল ডিভাইসের স্থিতি সম্পর্কে অবহিত করে যখনই কোনও অপারেশন হয় যা সিঙ্ক্রোনাইজেশনকে প্রভাবিত করতে পারে। ট্রিগারগুলি হল:
-
AudioControlPoint
«Start»
কমান্ডের অংশ হিসাবে, বাইনোরাল ডিভাইসগুলির অন্য দিকের বর্তমান সংযোগের অবস্থা দেওয়া হয়েছে। - যখনই একটি পেরিফেরালে একটি সংযোগ, সংযোগ বিচ্ছিন্ন, বা সংযোগ পরামিতি আপডেট অপারেশন হয়,
AudioControlPoint
«Status»
কমান্ডটি বাইনোরাল ডিভাইসগুলির অন্য দিকে পাঠানো হয়।
অডিও প্যাকেট বিন্যাস এবং সময়
প্যাকেটে অডিও ফ্রেম (নমুনার ব্লক) প্যাক করা শ্রবণ যন্ত্রটিকে লিঙ্ক লেয়ার টাইমিং অ্যাঙ্কর থেকে সময় বের করতে দেয়। বাস্তবায়ন সহজ করতে:
- একটি অডিও ফ্রেম সর্বদা সময়ের সাথে সংযোগের ব্যবধানের সাথে মেলে। উদাহরণস্বরূপ, যদি সংযোগের ব্যবধান 20 ms হয় এবং নমুনার হার 16 kHz হয়, তাহলে অডিও ফ্রেমে অবশ্যই 320টি নমুনা থাকতে হবে।
- ফ্রেমের সময় বা সংযোগের ব্যবধান নির্বিশেষে একটি ফ্রেমে সর্বদা একটি পূর্ণসংখ্যা নমুনা রাখার জন্য সিস্টেমে নমুনার হারগুলি 8 kHz এর গুণে সীমাবদ্ধ।
- একটি সিকোয়েন্স বাইট অবশ্যই অডিও ফ্রেমগুলিকে প্রিপেন্ড করতে হবে৷ সিকোয়েন্স বাইট অবশ্যই র্যাপ-এরাউন্ডের সাথে গণনা করতে হবে এবং পেরিফেরালকে বাফারের অমিল বা আন্ডারফ্লো সনাক্ত করতে দিতে হবে।
- একটি অডিও ফ্রেম সর্বদা একটি একক LE প্যাকেটে ফিট করা আবশ্যক৷ অডিও ফ্রেম একটি পৃথক L2CAP প্যাকেট হিসাবে পাঠাতে হবে। LE LL PDU এর আকার হতে হবে:
অডিও পেলোড সাইজ + 1 (সিকোয়েন্স কাউন্টার) + 6 (L2CAP হেডারের জন্য 4, SDU-এর জন্য 2) - একটি সংযোগ ইভেন্ট সর্বদা যথেষ্ট বড় হওয়া উচিত যাতে দুটি অডিও প্যাকেট এবং একটি ACK-এর জন্য দুটি খালি প্যাকেট পুনঃপ্রচারের জন্য ব্যান্ডউইথ সংরক্ষণ করা যায়। মনে রাখবেন অডিও প্যাকেট কেন্দ্রীয় ব্লুটুথ কন্ট্রোলার দ্বারা খণ্ডিত হতে পারে। পেরিফেরালটি প্রতি সংযোগ ইভেন্টে দুটির বেশি খণ্ডিত অডিও প্যাকেট গ্রহণ করতে সক্ষম হবে।
কেন্দ্রীয়কে কিছু নমনীয়তা দিতে, G.722 প্যাকেটের দৈর্ঘ্য নির্দিষ্ট করা নেই। G.722 প্যাকেটের দৈর্ঘ্য কেন্দ্রীয়ভাবে সেট করা সংযোগের ব্যবধানের উপর ভিত্তি করে পরিবর্তিত হতে পারে।
G.722 আউটপুট অক্টেট ফরম্যাট Rec-এর উল্লেখ করে। ITU-T G.722 (09/2012) বিভাগ 1.4.4 "মাল্টিপ্লেক্সার"।
একটি পেরিফেরাল সমর্থন করে এমন সমস্ত কোডেকগুলির জন্য, পেরিফেরালকে অবশ্যই নীচের সংযোগ পরামিতিগুলিকে সমর্থন করতে হবে৷ এটি কনফিগারেশনের একটি আংশিক তালিকা যা কেন্দ্রীয় প্রয়োগ করতে পারে।
কোডেক | বিটরেট | সংযোগের ব্যবধান | CE দৈর্ঘ্য (1M/2M PHY) | অডিও পেলোড আকার |
---|---|---|---|---|
G.722 @ 16 kHz | 64 kbit/s | 20 ms | 5000/3750 আমাদের | 160 বাইট |
একটি অডিও স্ট্রিম শুরু করুন এবং বন্ধ করুন
একটি অডিও স্ট্রিম শুরু করার আগে, কেন্দ্রীয় পেরিফেরালগুলি জিজ্ঞাসা করে এবং একটি সাধারণ হর কোডেক স্থাপন করে। তারপরে স্ট্রিম সেটআপ নিম্নলিখিত ক্রমটির মাধ্যমে এগিয়ে যায়:
- PSM, এবং ঐচ্ছিকভাবে,
RenderDelay
পড়া হয়। এই মানগুলি কেন্দ্রীয় দ্বারা ক্যাশে করা যেতে পারে। - CoC L2CAP চ্যানেল খোলা হয়েছে – পেরিফেরালকে অবশ্যই আটটি ক্রেডিট প্রাথমিকভাবে দিতে হবে।
- নির্বাচিত কোডেকের জন্য প্রয়োজনীয় প্যারামিটারগুলিতে লিঙ্কটি স্যুইচ করতে একটি সংযোগ আপডেট জারি করা হয়। কেন্দ্রীয় পূর্ববর্তী ধাপে CoC সংযোগের আগে এই সংযোগ আপডেট করতে পারে।
- কেন্দ্রীয় এবং পেরিফেরাল হোস্ট উভয়ই আপডেট সম্পূর্ণ ইভেন্টের জন্য অপেক্ষা করে।
- অডিও এনকোডার রিস্টার্ট করুন এবং প্যাকেট সিকোয়েন্স কাউন্ট রিসেট করুন 0। প্রাসঙ্গিক প্যারামিটার সহ একটি
«Start»
কমান্ডAudioControlPoint
এ জারি করা হয়। কেন্দ্রীয় স্ট্রিমিংয়ের আগে পেরিফেরাল থেকে পূর্বের«Start»
কমান্ডের একটি সফল স্থিতি বিজ্ঞপ্তির জন্য অপেক্ষা করে। এই অপেক্ষা তার অডিও প্লেব্যাক পাইপলাইন প্রস্তুত করার জন্য পেরিফেরাল সময় দেয়। অডিও স্ট্রিমিংয়ের সময়, প্রতিলিপিটি প্রতিটি সংযোগ ইভেন্টে উপলব্ধ হওয়া উচিত যদিও বর্তমান প্রতিরূপ লেটেন্সি অ-শূন্য হতে পারে। - পেরিফেরাল তার অভ্যন্তরীণ সারি (ক্রম নম্বর 0) থেকে প্রথম অডিও প্যাকেট নেয় এবং এটি চালায়।
কেন্দ্রীয় অডিও স্ট্রীম বন্ধ করতে «Stop» কমান্ড জারি করে। এই কমান্ডের পরে, প্রতিটি সংযোগ ইভেন্টে পেরিফেরাল উপলব্ধ হওয়ার প্রয়োজন নেই। অডিও স্ট্রিমিং পুনঃসূচনা করতে, উপরের ক্রমটি অনুসরণ করুন, ধাপ 5 থেকে শুরু করে। যখন কেন্দ্রীয় অডিও স্ট্রিমিং না করে, তখনও এটি GATT পরিষেবাগুলির জন্য একটি LE সংযোগ বজায় রাখা উচিত।
পেরিফেরাল অবশ্যই কেন্দ্রে একটি সংযোগ আপডেট জারি করবে না। শক্তি সঞ্চয় করতে, কেন্দ্রীয় পেরিফেরালের সাথে একটি সংযোগ আপডেট জারি করতে পারে যখন এটি অডিও স্ট্রিমিং না হয়।