Sesli yönetilen SCO'nun yeniden yapılandırılması

Bu sayfada, ses çerçevesinin ve ses HAL'sinin (AHAL) nasıl etkinleştirileceği açıklanmaktadır. Bu etkinleştirme, Audio Managed SCO (AMSCO) olarak tanımlanan bir süreç olan senkron bağlantı odaklı (SCO) bağlantıların yönetilmesi için gereklidir.

Android 17 ve sonraki sürümlerde Android ses çerçevesi, SCO yönlendirmesini yönetmek için SCO yönetim özelliğini kullanır. Bu özellik, başlangıçta Bluetooth (BT) çerçevesi tarafından işleniyordu. Bu taşıma işlemi, SCO bağlantı durumunu BT çerçevesine ait bir durumdan ses akışı etkinliğinin aşağı akış sonucuna taşır.

Bu özellik, ses yönlendirme sahipliğini ses çerçevesi içinde merkezileştirerek SCO için ses donanımı soyutlama katmanı (HAL) uygulamasını Gelişmiş Ses Dağıtım Profili (A2DP) ve LE Audio gibi diğer BT profilleriyle uyumlu hale getirir. Bu yeniden düzenleme, telekom ve BT yığınları arasındaki etkileşimi basitleştirerek daha sağlam ve merkezi bir ses yönlendirme mimarisi sağlar.

Mimariye genel bakış

AMSCO mimarisi, SCO bağlantı yönetimini Android ses çerçevesinde merkezileştirir. Bu çerçeve, yönlendirme kararlarını ses akışı etkinliğine göre verir. Bu mimari, BT yığınının bağlantıları yönettiği önceki modelle çelişir. Bu mimarideki her bileşenin rolleri aşağıdaki gibidir:

AHAL, SCO oturumunu yalnızca aşağıdaki koşullar karşılandığında başlatır ve askıya alır:

  • Etkin bir akış, SCO cihazına yönlendirilir.
  • Ses modu ayarlanmış ve SCO cihazı için yama mevcut.

Ses çerçevesi, belirli ölçütler karşılandığında A2DP cihazının eşzamanlı yama almasını engeller. Ses çerçevesi artık AHAL'ye SCO durum değişiklikleri veya A2DP askıya alma işlemleri göndermiyor.

Ses çerçevesi SCO yönetimini ele aldığından BT yığını artık ses bağlantısı kurma veya bağlantısını kesme işlemlerini çağırmıyor. Önleyici SCO bağlantısı kesilmesi veya hata durumlarında BT yığını, ses çerçevesini AudioManager#onHfpAudioDisconnected ile bilgilendirir.

Planlama

SCO yönetimini yeniden düzenleme işlemini uygulamadan önce aşağıdaki uyumluluk ve mimari koşulları değerlendirmek için bu bölümdeki bilgileri kullanın.

Geriye dönük uyumluluk

Çerçevenin, OGSS'lerini veya BT OGSS'lerini güncellemeden işletim sistemi güncellemeleri alabilecek cihazları desteklemeye devam etmesini sağlamak için yeni SCO yönetiminin etkinleştirilmesi gerektiğini belirten bir sistem özelliği kullanın. Sistem özelliği devre dışı bırakıldığında veya HAL sürümü güncel olmadığında eski yol altı yıla kadar korunur.

HFP oturumunu ayarlama

AHAL, diğer BT oturum türlerine benzer şekilde, oynatmayı başlatmak veya duraklatmak için yeni eller serbest profili (HFP) oturum türünü kullanmalıdır. Yayın durumu, sonuç olarak farklı IBluetoothAudioProviders kullanılarak yönetilir. Bu IBluetoothAudioProviders, mevcut yollara bağlı olarak bir Factory sınıfı tarafından numaralandırılır ve oluşturulur.

BT yığını, mümkün olduğunda her zaman donanım boşaltma yolunu kullanır. Görüşme sırasında codec'ler için tercih sırası şu şekildedir: LC3 yazılıma kıyasla LC3 donanımı, ardından mSBC yazılımına kıyasla mSBC donanımı ve son olarak CVSD yazılıma kıyasla CVSD donanımı tercih edilir.

Aşağıdaki sıra diyagramlarında, akış durumunu oluşturmak için AHAL ile BT yığını arasındaki etkileşimler ayrıntılı olarak açıklanmaktadır.

Donanım boşaltma prosedürü

Şekil 1'de, AHAL ve BT yığınının SCO ses için doğrudan donanım veri yolu oluşturmak üzere nasıl koordineli çalıştığı gösterilmektedir:

hw-offload-procedure

Şekil 1. Donanım boşaltma prosedürü.

Yazılım veri yolu prosedürü

Şekil 2'de, sistem yazılımı işleme gerektiren ses verilerinin işlenme süreci gösterilmektedir:

sw-data-path

Şekil 2. Yazılım veri yolu prosedürü.

Codec yeniden pazarlık prosedürü

Ses ağ geçidi (AG), yeni bir BT kullanılabilir codec (AT+BAC) komutu aldığında AG, codec anlaşması prosedürünü yeniden başlatır. Şekil 3'te codec yeniden anlaşma prosedürü gösterilmektedir:

codec-renego-process

Şekil 3. Codec yeniden pazarlık prosedürü.

HeadsetStateMachine üzerindeki etkisi

Java katmanı kulaklık durum makinesi (HeadsetStateMachine sınıfıyla gösterilir), yerel yığın etkinlikleriyle yönlendirilen AUDIO_CONNECTED durumu dışında büyük ölçüde değişmeden kalır. Sistem, Java katmanında artık connectAudioNative veya disconnectAudioNative başlatmıyor. Bunun yerine sistem, yerel yığındaki ses bağlantısı durumu değişikliklerine yanıt verir. Bu değişiklikler, IBluetoothAudioProvider veya IBluetoothAudioPort üzerindeki AHAL komutlarıyla tetiklenir.

Uygulama

SCO yönetimi yeniden düzenlemesini entegre etmek için BT yığını ile ses çerçevesi arasındaki iletişimi güncelleyin.

Özelliği uygulamak için aşağıdaki adımları uygulayın:

  1. HFP cihaz bağlantıları sırasında SCO başlatma ve kapatma işlemlerinin düzgün şekilde yönetilmesine yardımcı olmak ve etkin cihaz değişikliklerini işlemek için etkin BT'deki değişiklikler hakkında ses çerçevesini bilgilendirin. Bu bilgileri ses çerçevesine sağlamak için AudioManager.handleBluetoothActiveDeviceChanged(HfpInfo) kullanın.

    conn-hfp

    Şekil 4. HFP cihazını bağlayın.

    Ses çerçevesi, ses cihazı durumunu belirtmek için eski yayınlar yerine AudioManagerAudioDeviceCallback#onAudioDevicesAdded geri çağırmasını kullanır.

  2. SCO bağlantısını başlatmak için birincil kontrol noktası olarak setCommunicationDevice(AudioDeviceInfodevice) kullanarak AHAL akış kontrolünü uygulayın.

    HfpTransport::StartRequest, BluetoothAudioCtrlAck::PENDING değerini döndürürse HFP durum makinesi oluşturulmadığı için AHAL isteği tekrar denemelidir.

Kullanım alanları

Aşağıdaki bölümlerde, tipik kritik kullanıcı yolculukları (CUJ'ler) özetlenmiştir.

Telekom görüşmesi akışı

SCO yönetimi yeniden düzenleme değişiklikleri phoneStateChanged işlevini engelleyici bir işlev haline getirir. Bu değişiklik, SCO oluşturma işlemini başlatmak için ses çerçevesi API'sini çağırmadan önce telekomünikasyonun BluetoothInCallService.onCallAdded() yönteminde phoneStateChanged yürütülmesinin tamamlanmasını beklemesine neden olur.

call-telecom

Şekil 5. Telekom aracılığıyla aramaları yanıtlama veya başlatma

VOIP görüşmesi akışı

Ses çerçevesi, BluetoothHeadset.startScoUsingVirtualVoiceCall yöntemini çağırarak süreci başlatır. BT yığını, ses çerçevesine bir sonuç sağladıktan sonra çerçeve, AHAL'yi startStream yürütmeye yönlendirir. Aşağıdaki şekilde bu akış gösterilmektedir:

call-voip

Şekil 6. VOIP üzerinden aramaları yanıtlama veya başlatma

Ses tanıma

Hem eller serbest (HF) hem de AG tarafından başlatılan ses tanıma için BT yığını, AudioManager.setCommunicationDevice() kullanarak ses çerçevesinden SCO açmasını istemelidir. Bu durum aşağıdaki şekilde gösterilmektedir:

voice-recog

Şekil 7. Ses tanıma SCO başlatma.

Ses bağlantısı

BT yığını, ses tanıma sırasında AudioManager.setCommunicationDevice(AudioDeviceInfo) ile ses çerçevesini isteyerek bir SCO bağlantısı başlatır. Etkin bir görüşme varsa BT yığını, telekom yığınından BluetoothInCallService#requestBluetoothAudio isteğinde bulunur.

Bu işlem aşağıdaki şekilde gösterilmektedir:

audio-conn

Şekil 8. Ses bağlantısı.

Doğrulama ve test

Özelliğin doğru şekilde entegre edildiğini ve kalite standartlarını karşıladığını doğrulamak için cihaz üreticilerinin aşağıdaki testleri yapması gerekir:

  • CTS Verifier: CTS Verifier'ı, aramalar sırasında ses yönlendirmesinin etkileşimli testi için kullanın.
  • Vendor Test Suite (VTS): VTS'yi kullanarak AHAL ve BT AHAL etkileşimlerini doğrulayın.

Şartlar

Bu özellik aşağıdaki koşullara tabidir:

  • AHAL: Uygulama için yeniden düzenlenmiş SCO yönetim yolunu destekleyen uyumlu bir AHAL gerekir.