এই পৃষ্ঠায় বর্ণনা করা হয়েছে কীভাবে সিনক্রোনাস কানেকশন-ওরিয়েন্টেড (SCO) কানেকশনগুলি পরিচালনা করার জন্য অডিও ফ্রেমওয়ার্ক এবং অডিও HAL (AHAL) সক্রিয় করতে হয়, যা অডিও ম্যানেজড SCO (AMSCO) নামে পরিচিত একটি প্রক্রিয়া।
অ্যান্ড্রয়েড ১৭ এবং এর পরবর্তী সংস্করণগুলিতে, অ্যান্ড্রয়েড অডিও ফ্রেমওয়ার্ক SCO রাউটিং পরিচালনা করার জন্য SCO ম্যানেজমেন্ট ফিচারটি ব্যবহার করে, যা মূলত ব্লুটুথ (BT) ফ্রেমওয়ার্ক দ্বারা পরিচালিত হতো। এই স্থানান্তরের ফলে SCO সংযোগের অবস্থাটি BT ফ্রেমওয়ার্কের নিয়ন্ত্রণাধীন অবস্থা থেকে অডিও স্ট্রিমিং কার্যক্রমের একটি পরবর্তী ফলাফলে পরিণত হয়।
অডিও ফ্রেমওয়ার্কের মধ্যে অডিও রাউটিংয়ের মালিকানা কেন্দ্রীভূত করার মাধ্যমে, এই ফিচারটি SCO-এর জন্য অডিও হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) ইমপ্লিমেন্টেশনকে অ্যাডভান্সড অডিও ডিস্ট্রিবিউশন প্রোফাইল (A2DP) এবং LE অডিও-এর মতো অন্যান্য BT প্রোফাইলের সাথে সামঞ্জস্যপূর্ণ করে। এই রিফ্যাক্টরটি টেলিকম এবং BT স্ট্যাকের মধ্যেকার মিথস্ক্রিয়াকে সহজ করে, যা আরও শক্তিশালী এবং কেন্দ্রীভূত একটি অডিও রাউটিং আর্কিটেকচারকে সক্ষম করে।
স্থাপত্যের সংক্ষিপ্ত বিবরণ
AMSCO আর্কিটেকচারটি অ্যান্ড্রয়েড অডিও ফ্রেমওয়ার্কের মধ্যে SCO সংযোগ ব্যবস্থাপনাকে কেন্দ্রীভূত করে, যা অডিও স্ট্রিমিং কার্যকলাপের উপর ভিত্তি করে রাউটিংয়ের সিদ্ধান্ত নেয়। এই আর্কিটেকচারটি পূর্ববর্তী মডেল থেকে ভিন্ন, যেখানে BT স্ট্যাক সংযোগগুলি পরিচালনা করত। এই আর্কিটেকচারে প্রতিটি উপাদানের ভূমিকা নিম্নরূপ:
AHAL শুধুমাত্র নিম্নলিখিত শর্তগুলো পূরণ হলেই SCO অধিবেশন শুরু ও স্থগিত করে:
- একটি সক্রিয় স্ট্রিম একটি SCO ডিভাইসের সাথে সংযুক্ত করা হয়েছে।
- অডিও মোড সেট করা আছে এবং একটি SCO ডিভাইসের জন্য একটি প্যাচ বিদ্যমান।
যখন এই নির্দিষ্ট শর্তগুলো পূরণ হয়, তখন অডিও ফ্রেমওয়ার্ক একটি A2DP ডিভাইসকে যুগপৎ প্যাচ গ্রহণ করা থেকে বিরত রাখে। অডিও ফ্রেমওয়ার্কটি আর AHAL-এ SCO অবস্থার পরিবর্তন বা A2DP সাসপেন্ড পাঠায় না।
অডিও ফ্রেমওয়ার্ক SCO ম্যানেজমেন্ট পরিচালনা করে, তাই BT স্ট্যাক আর কানেক্ট বা ডিসকানেক্ট অডিও কল করে না। পূর্বপ্রস্তুতিমূলক SCO সংযোগ বিচ্ছিন্নকরণ বা ত্রুটির ক্ষেত্রে, BT স্ট্যাক AudioManager#onHfpAudioDisconnected এর মাধ্যমে অডিও ফ্রেমওয়ার্ককে অবহিত করে।
পরিকল্পনা
SCO ম্যানেজমেন্ট রিফ্যাক্টর বাস্তবায়নের আগে নিম্নলিখিত সামঞ্জস্যতা এবং স্থাপত্যগত প্রয়োজনীয়তাগুলো মূল্যায়ন করতে এই বিভাগের তথ্য ব্যবহার করুন।
পশ্চাৎ সামঞ্জস্যতা
যেসব ডিভাইস তাদের AHAL বা BT AHAL আপডেট না করেই OS আপডেট পেতে পারে, সেগুলোকে ফ্রেমওয়ার্কের মাধ্যমে সাপোর্ট দেওয়া চালিয়ে যাওয়ার জন্য, একটি সিস্টেম প্রপার্টি ব্যবহার করে নির্দেশ করুন যে নতুন SCO ম্যানেজমেন্ট অবশ্যই সক্রিয় করতে হবে। সিস্টেম প্রপার্টিটি নিষ্ক্রিয় থাকলে বা HAL ভার্সনটি পুরোনো হয়ে গেলে, লিগ্যাসি পাথটি ছয় বছর পর্যন্ত সংরক্ষিত থাকে।
HFP সেশন সেট আপ করুন
অন্যান্য বিটি সেশন টাইপের মতোই, প্লেব্যাক শুরু বা স্থগিত করার জন্য AHAL-কে অবশ্যই নতুন হ্যান্ডস-ফ্রি প্রোফাইল (HFP) সেশন টাইপ ব্যবহার করতে হবে। স্ট্রিমের অবস্থা চূড়ান্তভাবে বিভিন্ন IBluetoothAudioProviders ব্যবহার করে পরিচালিত হয়, যেগুলোকে উপলব্ধ পাথওয়ের উপর নির্ভর করে একটি Factory ক্লাস দ্বারা গণনা ও নির্মাণ করা হয়।
বিটি স্ট্যাক যথাসম্ভব একটি হার্ডওয়্যার অফলোড পাথ ব্যবহার করে। নেগোসিয়েশনের সময় কোডেক পছন্দের ক্রমটি নিম্নরূপ: LC3 সফটওয়্যারের চেয়ে LC3 হার্ডওয়্যারকে অগ্রাধিকার দেওয়া হয়, এরপরে mSBC হার্ডওয়্যার, তারপর mSBC সফটওয়্যার, এবং সবশেষে CVSD সফটওয়্যারের চেয়ে CVSD হার্ডওয়্যারকে অগ্রাধিকার দেওয়া হয়।
নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামগুলিতে স্ট্রিম স্টেট প্রতিষ্ঠার জন্য প্রয়োজনীয় AHAL এবং BT স্ট্যাকের মধ্যকার মিথস্ক্রিয়া বিশদভাবে বর্ণনা করা হয়েছে।
হার্ডওয়্যার অফলোড পদ্ধতি
চিত্র ১-এ দেখানো হয়েছে কিভাবে AHAL এবং BT স্ট্যাক সমন্বয় করে SCO অডিওর জন্য একটি সরাসরি হার্ডওয়্যার ডেটা পাথ স্থাপন করে:

চিত্র ১. হার্ডওয়্যার অফলোড পদ্ধতি।
সফটওয়্যার ডেটা পাথ পদ্ধতি
চিত্র ২-এ এমন অডিও ডেটা পরিচালনার প্রক্রিয়া দেখানো হয়েছে যার জন্য সিস্টেম সফটওয়্যার প্রক্রিয়াকরণের প্রয়োজন হয়:

চিত্র ২. সফটওয়্যার ডেটা পাথ পদ্ধতি।
কোডেক পুনঃআলোচনা পদ্ধতি
যখন অডিও গেটওয়ে (AG) একটি নতুন উপলব্ধ BT কোডেক (AT+BAC) কমান্ড গ্রহণ করে, তখন AG কোডেক নেগোসিয়েশন প্রক্রিয়াটি পুনরায় শুরু করে। চিত্র ৩-এ কোডেক পুনঃনেগোসিয়েশন প্রক্রিয়াটি দেখানো হয়েছে:

চিত্র ৩। কোডেক পুনঃআলোচনা পদ্ধতি।
হেডসেটস্টেটমেশিনের উপর প্রভাব
জাভা লেয়ারের হেডসেট স্টেট মেশিন (যা HeadsetStateMachine ক্লাস দ্বারা উপস্থাপিত) মূলত অপরিবর্তিত থাকে, শুধুমাত্র AUDIO_CONNECTED স্টেটটি ছাড়া, যা নেটিভ স্ট্যাক ইভেন্ট দ্বারা চালিত হয়। জাভা লেয়ারের মধ্যে, সিস্টেম আর connectAudioNative বা disconnectAudioNative শুরু করে না। এর পরিবর্তে, সিস্টেম নেটিভ স্ট্যাক থেকে অডিও সংযোগ অবস্থার পরিবর্তনে সাড়া দেয়। এই পরিবর্তনগুলি IBluetoothAudioProvider বা IBluetoothAudioPort এ AHAL-এর কমান্ড দ্বারা ট্রিগার করা হয়।
বাস্তবায়ন
SCO ম্যানেজমেন্ট রিফ্যাক্টরকে একীভূত করতে, BT স্ট্যাক এবং অডিও ফ্রেমওয়ার্কের মধ্যেকার যোগাযোগ আপডেট করুন।
ফিচারটি চালু করতে এই ধাপগুলো অনুসরণ করুন:
HFP ডিভাইস সংযোগের সময় SCO শুরু ও বন্ধ করার সঠিক ব্যবস্থাপনায় সাহায্য করতে এবং সক্রিয় ডিভাইসের পরিবর্তনগুলি পরিচালনা করতে, সক্রিয় BT-এর পরিবর্তন সম্পর্কে অডিও ফ্রেমওয়ার্ককে অবহিত করুন। এই তথ্য অডিও ফ্রেমওয়ার্ককে সরবরাহ করতে
AudioManager.handleBluetoothActiveDeviceChanged(HfpInfo)ব্যবহার করুন।
চিত্র ৪। এইচএফপি ডিভাইসটি সংযুক্ত করুন।
অডিও ফ্রেমওয়ার্কটি অডিও ডিভাইসের অবস্থা নির্দেশ করার জন্য প্রচলিত ব্রডকাস্টের পরিবর্তে
AudioManagerAudioDeviceCallback#onAudioDevicesAddedকলব্যাকটি ব্যবহার করে।SCO সংযোগ শুরু করার জন্য প্রাথমিক নিয়ন্ত্রণ বিন্দু হিসেবে
setCommunicationDevice(AudioDeviceInfodevice)ব্যবহার করে AHAL স্ট্রিম নিয়ন্ত্রণ বাস্তবায়ন করুন।যদি
HfpTransport::StartRequestরিটার্ন ভ্যালুBluetoothAudioCtrlAck::PENDING, তাহলে AHAL-কে অনুরোধটি পুনরায় চেষ্টা করতে হবে, কারণ HFP স্টেট মেশিনটি প্রতিষ্ঠিত হয়নি।
ব্যবহারের ক্ষেত্র
নিম্নলিখিত বিভাগগুলিতে সাধারণ গুরুত্বপূর্ণ ব্যবহারকারী যাত্রাপথ (CUJ) রূপরেখা দেওয়া হয়েছে।
টেলিকম কল প্রবাহ
SCO ম্যানেজমেন্ট রিফ্যাক্টর phoneStateChanged একটি ব্লকিং ফাংশনে পরিবর্তন করে। এই পরিবর্তনের ফলে, SCO তৈরি শুরু করার জন্য অডিও ফ্রেমওয়ার্ক API কল করার আগে, টেলিকম BluetoothInCallService.onCallAdded() মেথডের মধ্যে phoneStateChanged এক্সিকিউশন সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে।

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

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

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

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