این صفحه نحوه فعال کردن چارچوب صوتی و HAL صوتی (AHAL) را برای مدیریت اتصالات اتصالگرای همزمان (SCO) شرح میدهد، فرآیندی که با عنوان Audio Managed SCO (AMSCO) شناخته میشود.
در اندروید ۱۷ و بالاتر، چارچوب صوتی اندروید از ویژگی مدیریت SCO برای مدیریت مسیریابی SCO استفاده میکند، که در ابتدا توسط چارچوب بلوتوث (BT) مدیریت میشد. این مهاجرت، وضعیت اتصال SCO را از حالتی که متعلق به چارچوب بلوتوث است، به پیامد پاییندستی فعالیت پخش صوتی منتقل میکند.
با متمرکز کردن مالکیت مسیریابی صوتی در چارچوب صوتی، این ویژگی، پیادهسازی لایه انتزاعی سختافزار صوتی (HAL) را برای SCO با سایر پروفایلهای BT مانند پروفایل توزیع صوتی پیشرفته (A2DP) و LE Audio همسو میکند. این بازسازی، تعامل بین پشتههای مخابراتی و BT را ساده میکند و معماری مسیریابی صوتی قویتر و متمرکزتری را امکانپذیر میسازد.
نمای کلی معماری
معماری AMSCO مدیریت اتصال SCO را در چارچوب صوتی اندروید متمرکز میکند، که تصمیمات مسیریابی را بر اساس فعالیت پخش صوتی بنا میکند. این معماری با مدل قبلی که در آن پشته BT اتصالات را مدیریت میکرد، در تضاد است. نقشهای هر مؤلفه در این معماری به شرح زیر است:
AHAL فقط در صورت برآورده شدن شرایط زیر، جلسه SCO را آغاز و به حالت تعلیق در میآورد:
- یک جریان فعال به یک دستگاه SCO وصله میشود.
- حالت صوتی تنظیم شده است و یک وصله برای دستگاه SCO وجود دارد.
چارچوب صوتی از داشتن وصله همزمان برای دستگاه A2DP در صورت برآورده شدن این معیارهای خاص جلوگیری میکند. چارچوب صوتی دیگر تغییرات وضعیت SCO یا تعلیق A2DP را به AHAL ارسال نمیکند.
چارچوب صوتی مدیریت SCO را بر عهده دارد، بنابراین پشته BT دیگر فراخوانیهای connect یا disconnect audio را انجام نمیدهد. در موارد قطع یا خطای SCO پیشگیرانه، پشته BT با AudioManager#onHfpAudioDisconnected به چارچوب صوتی اطلاع میدهد.
طرح
قبل از پیادهسازی اصلاح مدیریت SCO، از اطلاعات این بخش برای ارزیابی سازگاری و الزامات معماری زیر استفاده کنید.
سازگاری با نسخههای قبلی
برای اینکه این چارچوب بتواند به پشتیبانی از دستگاههایی که ممکن است بهروزرسانیهای سیستم عامل را بدون بهروزرسانی AHALها یا BT AHALهای خود دریافت کنند، ادامه دهد، از یک ویژگی سیستمی استفاده کنید تا نشان دهد که مدیریت SCO جدید باید فعال شود. مسیر قدیمی در مواردی که ویژگی سیستم غیرفعال است یا نسخه HAL قدیمی است، تا شش سال حفظ میشود.
جلسه HFP را تنظیم کنید
AHAL باید از نوع جلسه جدید پروفایل هندزفری (HFP) برای شروع یا تعلیق پخش، مشابه سایر انواع جلسه BT، استفاده کند. وضعیت جریان در نهایت با استفاده از IBluetoothAudioProviders مختلف مدیریت میشود که بسته به مسیرهای موجود، توسط یک کلاس Factory شمارش و ساخته میشوند.
پشته BT در صورت امکان از یک مسیر تخلیه سختافزاری استفاده میکند. اولویت کدکها در طول مذاکره از این ترتیب پیروی میکند: سختافزار LC3 بر نرمافزار LC3 ترجیح داده میشود، پس از آن سختافزار mSBC، سپس نرمافزار mSBC و در نهایت سختافزار CVSD بر نرمافزار CVSD ترجیح داده میشود.
نمودارهای توالی زیر، تعاملات بین AHAL و پشته BT مورد نیاز برای ایجاد وضعیت جریان را به تفصیل نشان میدهند.
روش تخلیه سختافزار
شکل ۱ نشان میدهد که چگونه پشته AHAL و BT برای ایجاد یک مسیر داده سختافزاری مستقیم برای صدای SCO با هم هماهنگ میشوند:

شکل ۱. رویه تخلیه سختافزار.
رویه مسیر داده نرمافزار
شکل ۲ فرآیند مدیریت دادههای صوتی که نیاز به پردازش نرمافزار سیستمی دارند را نشان میدهد:

شکل ۲. رویه مسیر داده نرمافزار.
رویه مذاکره مجدد کدک
وقتی دروازه صوتی (AG) یک دستور کدک BT جدید (AT+BAC) دریافت میکند، AG روند مذاکره کدک را مجدداً آغاز میکند. شکل 3 روند مذاکره مجدد کدک را نشان میدهد:

شکل 3. رویه مذاکره مجدد کدک.
تأثیر بر HeadsetStateMachine
ماشین حالت هدست لایه جاوا (که توسط کلاس HeadsetStateMachine نمایش داده میشود) تا حد زیادی بدون تغییر باقی مانده است، به جز حالت AUDIO_CONNECTED که توسط رویدادهای پشته بومی هدایت میشود. در لایه جاوا، سیستم دیگر connectAudioNative یا disconnectAudioNative را آغاز نمیکند. در عوض، سیستم به تغییرات حالت اتصال صوتی از پشته بومی پاسخ میدهد. این تغییرات توسط دستورات AHAL در IBluetoothAudioProvider یا IBluetoothAudioPort آغاز میشوند.
پیادهسازی
برای ادغام اصلاحکننده مدیریت SCO، ارتباط بین پشته BT و چارچوب صوتی را بهروزرسانی کنید.
برای پیادهسازی این ویژگی، مراحل زیر را دنبال کنید:
به چارچوب صوتی در مورد تغییرات در BT فعال اطلاع دهید تا به مدیریت صحیح شروع و از کار افتادن SCO در طول اتصالات دستگاه HFP و رسیدگی به تغییرات دستگاه فعال کمک کند. از
AudioManager.handleBluetoothActiveDeviceChanged(HfpInfo)برای ارائه این اطلاعات به چارچوب صوتی استفاده کنید.
شکل ۴. دستگاه HFP را وصل کنید.
چارچوب صوتی به جای پخشهای قدیمی، از فراخوانی
AudioManagerAudioDeviceCallback#onAudioDevicesAddedبرای نشان دادن وضعیت دستگاه صوتی استفاده میکند.کنترل جریان AHAL را با استفاده از
setCommunicationDevice(AudioDeviceInfodevice)به عنوان نقطه کنترل اصلی برای شروع اتصال SCO پیادهسازی کنید.اگر
HfpTransport::StartRequestBluetoothAudioCtrlAck::PENDINGرا برگرداند، AHAL باید درخواست را دوباره امتحان کند زیرا ماشین وضعیت HFP برقرار نشده است.
موارد استفاده
بخشهای زیر، مراحل معمول سفر حیاتی کاربر (CUJ) را شرح میدهند.
جریان تماسهای مخابراتی
اصلاح مدیریت SCO، تابع phoneStateChanged به یک تابع مسدودکننده تبدیل میکند. این تغییر باعث میشود که مخابرات قبل از فراخوانی API چارچوب صوتی برای شروع ایجاد SCO، منتظر بماند تا اجرای phoneStateChanged در متد BluetoothInCallService.onCallAdded() کامل شود.

شکل ۵. پاسخ دادن یا شروع تماس از طریق مخابرات.
جریان تماس VOIP
چارچوب صوتی این فرآیند را با فراخوانی متد BluetoothHeadset.startScoUsingVirtualVoiceCall آغاز میکند. پس از اینکه پشته BT نتیجهای را به چارچوب صوتی ارائه داد، چارچوب AHAL را برای اجرای startStream هدایت میکند. شکل زیر این جریان را نشان میدهد:

شکل ۶. پاسخ دادن یا شروع تماس از طریق VOIP
تشخیص صدا
برای تشخیص صدای آغاز شده توسط هندزفری (HF) و AG، پشته BT باید با استفاده از AudioManager.setCommunicationDevice() از چارچوب صوتی درخواست باز کردن SCO را داشته باشد. این موضوع در شکل زیر نشان داده شده است:

شکل ۷. شروع SCO تشخیص صدا.
اتصال صوتی
پشته BT با درخواست چارچوب صوتی با AudioManager.setCommunicationDevice(AudioDeviceInfo) در حین تشخیص صدا، یک اتصال SCO را آغاز میکند. اگر تماسی فعال باشد، پشته BT به جای آن BluetoothInCallService#requestBluetoothAudio از پشته مخابرات درخواست میکند.
این فرآیند در شکل زیر نشان داده شده است:

شکل ۸. اتصال صوتی.
اعتبارسنجی و آزمایش
برای تأیید اینکه این ویژگی به درستی یکپارچه شده و مطابق با استانداردهای کیفیت است، تولیدکنندگان دستگاه باید آزمایشهای زیر را انجام دهند:
- تأییدکننده CTS: از تأییدکننده CTS برای آزمایش تعاملی مسیریابی صوتی در طول تماسها استفاده کنید.
- مجموعه تست فروشنده (VTS): تعاملات AHAL و BT AHAL را با استفاده از VTS اعتبارسنجی کنید.
الزامات
این ویژگی منوط به الزامات زیر است:
- AHAL: پیادهسازی نیازمند یک AHAL سازگار است که از مسیر مدیریت SCO اصلاحشده پشتیبانی کند.