সিঙ্ক্রোনাস কানেকশন-ওরিয়েন্টেড (SCO) কানেকশন ম্যানেজ করার জন্য কীভাবে অডিও ফ্রেমওয়ার্ক ও অডিও HAL (AHAL) চালু করতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে। এই প্রসেসকে অডিও ম্যানেজড SCO (AMSCO) হিসেবে শনাক্ত করা হয়।
Android 17 ও তার পরবর্তী যেকোনও ভার্সনে, SCO ম্যানেজমেন্ট ফিচার ব্যবহার করে SCO রাউটিং ম্যানেজ করার জন্য Android অডিও ফ্রেমওয়ার্ক ব্যবহার করা হয়, যা মূলত ব্লুটুথ (BT) ফ্রেমওয়ার্ক দ্বারা ম্যানেজ করা হয়। এই মাইগ্রেশন SCO কানেকশন স্ট্যাটাসকে BT ফ্রেমওয়ার্কের মালিকানাধীন স্টেট থেকে অডিও স্ট্রিমিং অ্যাক্টিভিটির ডাউনস্ট্রিম কনসিকোয়েন্সে সরিয়ে দেয়।
অডিও ফ্রেমওয়ার্কের মধ্যে অডিও রাউটিংয়ের মালিকানা সেন্ট্রালাইজ করার মাধ্যমে, এই ফিচারটি SCO-এর জন্য অডিও হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) ইমপ্লিমেন্টেশনকে অ্যাডভান্সড অডিও ডিস্ট্রিবিউশন প্রোফাইল (A2DP) ও LE অডিওর মতো অন্যান্য BT প্রোফাইলের সাথে অ্যালাইন করে। এই রিফ্যাক্টর টেলিকম ও BT স্ট্যাকের মধ্যে ইন্টার্যাকশনকে সহজ করে, যার ফলে আরও শক্তিশালী ও সেন্ট্রালাইজড অডিও রাউটিং আর্কিটেকচার চালু করা যায়।
আর্কিটেকচার ওভারভিউ
AMSCO আর্কিটেকচার, Android অডিও ফ্রেমওয়ার্কের মধ্যে SCO কানেকশন ম্যানেজমেন্টকে সেন্ট্রালাইজ করে, যা অডিও স্ট্রিমিং অ্যাক্টিভিটির উপর ভিত্তি করে রাউটিং সংক্রান্ত সিদ্ধান্ত নেয়। এই আর্কিটেকচার আগের মডেলের থেকে আলাদা যেখানে BT স্ট্যাক কানেকশন ম্যানেজ করত। এই আর্কিটেকচারে প্রতিটি কম্পোনেন্টের ভূমিকা নিচে উল্লেখ করা হল:
নিচের শর্তগুলি পূরণ হলেই AHAL, SCO সেশন শুরু ও সাসপেন্ড করে:
- একটি অ্যাক্টিভ স্ট্রিম SCO ডিভাইসে প্যাচ করা হয়।
- অডিও মোড সেট করা আছে এবং SCO ডিভাইসের জন্য একটি প্যাচ আছে।
এইসব নির্দিষ্ট মাপকাঠি পূরণ করা হলে, অডিও ফ্রেমওয়ার্ক A2DP ডিভাইসকে একই সাথে প্যাচ প্রয়োগ করতে দেয় না। অডিও ফ্রেমওয়ার্ক আর AHAL-এ SCO স্টেট পরিবর্তন বা A2DP সাসপেন্ড পাঠায় না।
অডিও ফ্রেমওয়ার্ক SCO ম্যানেজমেন্ট হ্যান্ডেল করে, তাই BT স্ট্যাক আর
অডিও কানেক্ট বা ডিসকানেক্ট করার জন্য কল করে না। আগে থেকে SCO
ডিসকানেক্ট করা বা কোনও সমস্যা হলে, BT স্ট্যাক অডিও
ফ্রেমওয়ার্ককে AudioManager#onHfpAudioDisconnected দিয়ে জানায়।
প্ল্যান
SCO ম্যানেজমেন্ট রিফ্যাক্টর প্রয়োগ করার আগে, নিম্নলিখিত কম্প্যাটিবিলিটি ও আর্কিটেকচার সংক্রান্ত প্রয়োজনীয়তা মূল্যায়ন করতে এই বিভাগের তথ্য ব্যবহার করুন।
পুরনো ভার্সনের সাথে মানানসই
AHAL বা BT AHAL আপডেট না করেই OS আপডেট পেতে পারে এমন ডিভাইসকে ফ্রেমওয়ার্কের মাধ্যমে সহায়তা প্রদান করা চালিয়ে যেতে, নতুন SCO ম্যানেজমেন্ট চালু করতে হবে তা বোঝাতে একটি সিস্টেম প্রপার্টি ব্যবহার করুন। সিস্টেম প্রপার্টি বন্ধ করা থাকলে অথবা HAL ভার্সন পুরনো হয়ে গেলে, লেগ্যাসি পাথ ছয় বছর পর্যন্ত সংরক্ষিত থাকে।
HFP সেশন সেট-আপ করা
অন্যান্য BT সেশন ধরনের মতো, প্লেব্যাক শুরু বা
সাসপেন্ড করার জন্য AHAL-কে অবশ্যই নতুন হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সেশন ধরন ব্যবহার করতে হবে। স্ট্রিম স্টেটকে
অবশেষে বিভিন্ন IBluetoothAudioProviders ব্যবহার করে ম্যানেজ করা হয়, যেগুলি
উপলভ্য পাথওয়ের উপর নির্ভর করে Factory ক্লাস দ্বারা গণনা ও তৈরি করা হয়।
BT স্ট্যাক যখনই সম্ভব হার্ডওয়্যার অফলোড পাথ ব্যবহার করে। নেগোসিয়েশনের সময় কোডেক সংক্রান্ত পছন্দ এই ক্রম অনুসরণ করে: LC3 সফ্টওয়্যারের চেয়ে LC3 হার্ডওয়্যারকে বেশি পছন্দ করা হয়, তারপরে mSBC হার্ডওয়্যার, তারপর mSBC সফ্টওয়্যার এবং শেষে CVSD সফ্টওয়্যারের চেয়ে CVSD হার্ডওয়্যারকে বেশি পছন্দ করা হয়।
স্ট্রিম স্টেট সেট-আপ করার জন্য AHAL এবং BT স্ট্যাকের মধ্যে ইন্টার্যাকশন সম্পর্কে নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামে বিস্তারিতভাবে বলা হয়েছে।
হার্ডওয়্যার অফলোড করার পদ্ধতি
SCO অডিওর জন্য কীভাবে AHAL ও BT স্ট্যাক কোঅর্ডিনেট করে ডাইরেক্ট হার্ডওয়্যার ডেটা পাথ তৈরি করে তা ছবি ১-এ দেখানো হয়েছে:
ছবি ১. হার্ডওয়্যার অফলোড করার পদ্ধতি।
সফ্টওয়্যার ডেটা পাথ প্রসিডিওর
সিস্টেম সফ্টওয়্যার প্রসেসিংয়ের প্রয়োজন এমন অডিও ডেটা হ্যান্ডেল করার প্রসেসটি ২ নম্বর চিত্রে দেখানো হয়েছে:
ছবি ২. সফ্টওয়্যার ডেটা পাথ পদ্ধতি।
কোডেক রিনেগোসিয়েশন প্রসিডিওর
অডিও গেটওয়ে (AG) নতুন BT উপলভ্য কোডেক (AT+BAC) কমান্ড পেলে, AG কোডেক নেগোসিয়েশন প্রসেস আবার শুরু করে। কোডেক রিনেগোসিয়েশন প্রসেস ফিগার ৩-এ দেখানো হয়েছে:
ছবি ৩. কোডেক রিনেগোসিয়েশন প্রসিডিওর।
HeadsetStateMachine-এর উপর প্রভাব
AUDIO_CONNECTED স্টেট ছাড়া, জাভা লেয়ার হেডসেট স্টেট মেশিন (HeadsetStateMachine
ক্লাস দ্বারা উপস্থাপিত) বেশিরভাগ ক্ষেত্রেই অপরিবর্তিত থাকে। এই স্টেটটি নেটিভ স্ট্যাক
ইভেন্ট দ্বারা পরিচালিত হয়।
Java লেয়ারের মধ্যে, সিস্টেম আর connectAudioNative বা disconnectAudioNative
শুরু করে না। এর পরিবর্তে, নেটিভ স্ট্যাক থেকে অডিও কানেকশন স্ট্যাটাসে হওয়া পরিবর্তন
সম্পর্কে সিস্টেম উত্তর দেয়। এইসব পরিবর্তন IBluetoothAudioProvider বা
IBluetoothAudioPort-এ AHAL-এর কমান্ডের মাধ্যমে
ট্রিগার করা হয়।
প্রয়োগ
SCO ম্যানেজমেন্ট রিফ্যাক্টর ইন্টিগ্রেট করতে, BT স্ট্যাক ও অডিও ফ্রেমওয়ার্কের মধ্যে যোগাযোগ আপডেট করুন।
এই ফিচার প্রয়োগ করতে এইসব ধাপ অনুসরণ করুন:
HFP ডিভাইস কানেকশন চলাকালীন SCO শুরু করা ও বন্ধ করা এবং অ্যাক্টিভ ডিভাইস পরিবর্তন করা হ্যান্ডেল করার জন্য, অ্যাক্টিভ BT-তে হওয়া পরিবর্তন সম্পর্কে অডিও ফ্রেমওয়ার্ককে জানান। অডিও ফ্রেমওয়ার্কে এই তথ্য প্রদান করতে
AudioManager.handleBluetoothActiveDeviceChanged(HfpInfo)ব্যবহার করুন।
ছবি ৪. HFP ডিভাইস কানেক্ট করুন।
অডিও ফ্রেমওয়ার্ক, অডিও ডিভাইসের স্ট্যাটাস দেখানোর জন্য লিগ্যাসি ব্রডকাস্টের পরিবর্তে
AudioManagerAudioDeviceCallback#onAudioDevicesAddedকলব্যাক ব্যবহার করে।SCO কানেকশন শুরু করার জন্য প্রাথমিক কন্ট্রোল পয়েন্ট হিসেবে
setCommunicationDevice(AudioDeviceInfodevice)ব্যবহার করে AHAL স্ট্রিম কন্ট্রোল প্রয়োগ করুন।HfpTransport::StartRequestBluetoothAudioCtrlAck::PENDING, রিটার্ন করলে, AHAL-কে অবশ্যই অনুরোধটি আবার করতে হবে কারণ HFP স্টেট মেশিন প্রতিষ্ঠিত হয়নি।
উদাহরণ
নিম্নলিখিত বিভাগে সাধারণ ক্রিটিক্যাল ইউজার জার্নি (CUJ) সম্পর্কে বলা হয়েছে।
টেলিকম কল ফ্লো
SCO ম্যানেজমেন্ট রিফ্যাক্টর phoneStateChanged-কে একটি ব্লকিং
ফাংশনে পরিবর্তন করে। এই পরিবর্তনের ফলে, SCO তৈরি শুরু করার জন্য অডিও ফ্রেমওয়ার্ক API চালু করার আগে,
BluetoothInCallService.onCallAdded পদ্ধতির মধ্যে phoneStateChanged এক্সিকিউশন সম্পূর্ণ হওয়ার জন্য
টেলিকম অপেক্ষা করে।

ছবি ৫. টেলিকমের মাধ্যমে কল রিসিভ করা বা শুরু করা।
VOIP কল ফ্লো
অডিও ফ্রেমওয়ার্ক
BluetoothHeadset.startScoUsingVirtualVoiceCall মেথড কল করে প্রসেস শুরু করে। BT স্ট্যাক
অডিও ফ্রেমওয়ার্কে ফলাফল দেওয়ার পরে, ফ্রেমওয়ার্ক AHAL-কে
startStream এক্সিকিউট করার নির্দেশ দেয়। নিচের ছবিতে এই ফ্লো দেখানো হয়েছে:

ছবি ৬. VOIP-এর মাধ্যমে কল রিসিভ বা শুরু করা।
ভয়েস শনাক্তকরণ
হ্যান্ডস-ফ্রি (HF) ও AG-এর মাধ্যমে শুরু করা ভয়েস রিকগনিশন, দুটির ক্ষেত্রেই BT স্ট্যাককে অবশ্যই
AudioManager.setCommunicationDevice ব্যবহার করে SCO খোলার জন্য অডিও ফ্রেমওয়ার্ককে
অনুরোধ করতে হবে। এটি নিম্নলিখিত
চিত্রে দেখানো হয়েছে:

ছবি ৭. ভয়েস শনাক্তকরণ SCO শুরু করা।
অডিও কানেকশন
ভয়েস শনাক্তকরণের সময় BT স্ট্যাক
AudioManager.setCommunicationDevice(AudioDeviceInfo)-এর সাথে অডিও ফ্রেমওয়ার্কের অনুরোধ করে SCO কানেকশন শুরু করে। কল চালু থাকলে, BT স্ট্যাক পরিবর্তে টেলিকম স্ট্যাক থেকে
BluetoothInCallService#requestBluetoothAudio-এর অনুরোধ করে।
নিচের ছবিতে এই প্রসেস দেখানো হয়েছে:

ছবি ৮. অডিও কানেকশন।
যাচাইকরণ ও টেস্টিং
ফিচারটি সঠিকভাবে ইন্টিগ্রেট করা হয়েছে এবং কোয়ালিটি স্ট্যান্ডার্ড মেনে চলছে কিনা তা যাচাই করতে, ডিভাইস প্রস্তুতকারকদের অবশ্যই নিম্নলিখিত পরীক্ষাগুলি চালাতে হবে:
- CTS Verifier: কল চলাকালীন অডিও রাউটিংয়ের ইন্টার্যাক্টিভ টেস্টিংয়ের জন্য CTS Verifier ব্যবহার করুন।
- ভেন্ডর টেস্ট স্যুট (VTS): VTS ব্যবহার করে AHAL এবং BT AHAL ইন্টার্যাকশন যাচাই করুন।
প্রয়োজনীয়তা
এই ফিচারের জন্য নিম্নলিখিত প্রয়োজনীয়তা পূরণ করতে হবে:
- AHAL: প্রয়োগ করার জন্য এমন মানানসই AHAL প্রয়োজন যা রিফ্যাক্টর করা SCO ম্যানেজমেন্ট পাথ সমর্থন করে।