संयुक्त ऑडियो डिवाइस रूटिंग

संयुक्त ऑडियो डिवाइस रूटिंग सुविधा एक साथ कई ऑडियो उपकरणों के लिए ऑडियो स्ट्रीमिंग के लिए समर्थन जोड़ती है। इस सुविधा का उपयोग करते हुए, विशेषाधिकार प्राप्त ऐप्स सिस्टम एपीआई के माध्यम से किसी विशेष रणनीति के लिए कई पसंदीदा उपकरणों का चयन कर सकते हैं। ऐप्स इस सुविधा द्वारा प्रदान किए गए सार्वजनिक API का उपयोग करके ऑडियो उपकरणों की क्षमताओं को अधिक सटीक रूप से खोज सकते हैं। Android संस्करण 11 और उससे नीचे के संस्करणों के लिए, ऑडियो फ्रेमवर्क कार्यान्वयन में एक साथ जुड़े एक ही प्रकार के कई ऑडियो उपकरणों (उदाहरण के लिए, 2 ब्लूटूथ A2DP हेडसेट) के लिए सीमित समर्थन है। डिफ़ॉल्ट ऑडियो रूटिंग नियम भी उपयोगकर्ताओं को किसी दिए गए उपयोग के मामले के लिए एक ही प्रकार के कई उपकरणों का चयन करने की अनुमति नहीं देते हैं।

एंड्रॉइड 12 से शुरू होकर, ऑडियो प्रसारण, बीएलई ऑडियो हेडफ़ोन के समूह में मल्टीकास्टिंग या एक साथ कई यूएसबी साउंड कार्ड का उपयोग करने जैसे नए उपयोग के मामलों की अनुमति देने के लिए इन सीमाओं को हटा दिया जाता है।

यह पृष्ठ एकाधिक ऑडियो उपकरणों के लिए ऑडियो स्ट्रीमिंग के लिए समर्थन को कार्यान्वित करने और इस सुविधा के अपने कार्यान्वयन को मान्य करने के तरीके को कवर करता है।

एकाधिक ऑडियो उपकरणों के लिए स्ट्रीमिंग ऑडियो का समर्थन

Android 12 में API के दो सेट हैं जो इस सुविधा का समर्थन करते हैं:

  • सिस्टम एपीआई एक रणनीति के लिए कई पसंदीदा उपकरणों को संभालते हैं।
  • ऑडियो एचएएल के हिस्से के रूप में विक्रेता द्वारा कार्यान्वित एचआईडीएल इंटरफ़ेस, डिवाइस क्षमताओं की रिपोर्ट करता है।

निम्नलिखित अनुभाग इनमें से प्रत्येक एपीआई पर अधिक विस्तार से चर्चा करते हैं।

एक रणनीति के लिए कई पसंदीदा उपकरणों को संभालना

ऑडियो पॉलिसी मैनेजर एक साथ कई ऑडियो डिवाइस पर ऑडियो स्ट्रीमिंग का बेहतर समर्थन करने के लिए सिस्टम एपीआई प्रदान करता है। ये सिस्टम एपीआई किसी दी गई रणनीति के लिए कई पसंदीदा उपकरणों को सेट करने, प्राप्त करने और निकालने में सक्षम बनाते हैं। Android 12 तक यह फीचर केवल एक डिवाइस के लिए ही सपोर्ट करता था।

ऑडियो नीति प्रबंधक उन उपकरणों का वर्णन करने के लिए सक्रिय मीडिया उपकरणों की अवधारणा का परिचय देता है जिन्हें मीडिया प्लेबैक के लिए चुने जाने की सबसे अधिक संभावना है। जब एक वियोज्य डिवाइस कनेक्ट होता है, तो ऑडियो एचएएल आउटपुट स्ट्रीम जिसे इस डिवाइस पर रूट किया जा सकता है, को खोलना और समर्थित विशेषताओं के लिए जांचना पड़ सकता है।

आउटपुट स्ट्रीम खोलते समय एक ऑडियो डिवाइस निर्दिष्ट किया जाना चाहिए। सक्रिय मीडिया डिवाइस वह उपकरण है जिसका उपयोग इस संदर्भ में आउटपुट स्ट्रीम खोलने पर किया जाता है।

सक्रिय मीडिया डिवाइस चयन वास्तविक कनेक्टेड या डिस्कनेक्ट किए गए डिवाइस के आधार पर बदल सकता है। ऑडियो नीति प्रबंधक सक्रिय मीडिया उपकरणों को चुनने के लिए नियमों की निम्नलिखित श्रृंखला का उपयोग करता है:

  1. यदि मीडिया के लिए सभी पसंदीदा डिवाइस उपलब्ध हैं, तो वे सभी सक्रिय डिवाइस के रूप में चुने जाते हैं।
  2. अन्यथा, अंतिम कनेक्टेड रिमूवेबल डिवाइस को चुना जाता है।
  3. यदि कोई हटाने योग्य डिवाइस कनेक्ट नहीं हैं, तो आउटपुट डिवाइस चुनने के लिए डिफ़ॉल्ट ऑडियो नीति नियम सक्रिय डिवाइस चुनने के लिए लागू होते हैं।

एक आउटपुट स्ट्रीम को फिर से खोलने और सक्रिय डिवाइस पर रूट करने के लिए निम्नलिखित मानदंडों को पूरा करना चाहिए ताकि प्लेबैक के लिए सबसे अच्छा कॉन्फ़िगरेशन चुना जा सके:

  • आउटपुट स्ट्रीम को सक्रिय उपकरणों का समर्थन करना चाहिए।
  • आउटपुट स्ट्रीम को डायनेमिक प्रोफाइल का समर्थन करना चाहिए।
  • आउटपुट स्ट्रीम को वर्तमान में सक्रिय डिवाइस पर रूट नहीं किया जाना चाहिए।

एक नया डिवाइस चयन लागू करने के लिए, ऑडियो पॉलिसी मैनेजर डिवाइस कनेक्शन पर आउटपुट स्ट्रीम को बंद और फिर से खोलता है यदि आउटपुट स्ट्रीम निष्क्रिय है, या आउटपुट स्ट्रीम को स्टैंडबाय में रखे जाने पर इसे स्थगित कर देता है।

ऑडियो नीति प्रबंधक सिस्टम एपीआई की निम्नलिखित सूची प्रदान करता है (जैसा कि AudioManager.java में परिभाषित किया गया है):

  • setPreferredDeviceForStrategy

    किसी दी गई रणनीति के लिए ऑडियो रूटिंग के लिए पसंदीदा डिवाइस सेट करता है। ध्यान दें कि पसंदीदा डिवाइस सेट होने के समय डिवाइस उपलब्ध नहीं हो सकता है, लेकिन एक बार उपलब्ध होने के बाद इसका उपयोग किया जाता है।

  • removePreferredDeviceForStrategy

    पहले setPreferredDeviceForStrategy या setPreferredDevicesForStrategy के साथ सेट किए गए पसंदीदा ऑडियो डिवाइस को हटा देता है।

  • getPreferredDeviceForStrategy

    एक ऑडियो रणनीति के लिए पसंदीदा डिवाइस लौटाता है जिसे पहले setPreferredDeviceForStrategy या setPreferredDevicesForStrategy के साथ सेट किया गया था।

  • setPreferredDevicesForStrategy

    किसी दी गई रणनीति के लिए पसंदीदा डिवाइस सेट करता है।

  • getPreferredDevicesForStrategy

    एक ऑडियो रणनीति के लिए पसंदीदा डिवाइस लौटाता है जिसे पहले setPreferredDeviceForStrategy या setPreferredDevicesForStrategy के साथ सेट किया गया था।

  • OnPreferredDevicesForStrategyChangedListener

    किसी दिए गए ऑडियो रणनीति के लिए निर्धारित पसंदीदा ऑडियो उपकरणों में परिवर्तनों की सूचना के लिए एक इंटरफ़ेस को परिभाषित करता है।

  • addOnPreferredDevicesForStrategyChangedListener

    रणनीति-पसंदीदा ऑडियो डिवाइस में परिवर्तनों की सूचना प्राप्त करने के लिए श्रोता जोड़ता है।

  • removeOnPreferredDevicesForStrategyChangedListener

    रणनीति-पसंदीदा ऑडियो डिवाइस में परिवर्तनों के पहले जोड़े गए श्रोता को हटा देता है।

डिवाइस क्षमताओं की रिपोर्टिंग

ऑडियो एचएएल कार्यान्वयन के हिस्से के रूप में, विक्रेता उन एपीआई को लागू करते हैं जो रिपोर्टिंग डिवाइस क्षमताओं का समर्थन करते हैं। यह खंड डिवाइस क्षमताओं की रिपोर्ट करने के लिए उपयोग किए जाने वाले डेटा प्रकारों और विधियों की व्याख्या करता है और कई उपकरणों का समर्थन करने के लिए ऑडियो HIDL HAL V7 में किए गए कुछ परिवर्तनों को सूचीबद्ध करता है।

डेटा के प्रकार

ऑडियो HIDL HAL V7 में, AudioProfile और AudioTransport संरचनाओं का उपयोग करके डिवाइस क्षमताओं की सूचना दी जाती है। AudioTransport संरचना ज्ञात ऑडियो प्रारूपों के लिए AudioProfile के साथ एक ऑडियो पोर्ट की क्षमता का वर्णन करती है, या ऐसे प्रारूपों के लिए कच्चे हार्डवेयर डिस्क्रिप्टर के साथ जो प्लेटफॉर्म द्वारा ज्ञात नहीं हैं। AudioProfile संरचना में ऑडियो प्रारूप, प्रोफ़ाइल द्वारा समर्थित नमूना दर और चैनल मास्क की सूची शामिल है, जैसा कि types.hal से निम्नलिखित कोड ब्लॉक में दिखाया गया है:

/**
* Configurations supported for a certain audio format.
*/
struct AudioProfile {
   AudioFormat format;
   /** List of the sample rates (in Hz) supported by the profile. */
   vec<uint32_t> sampleRates;
   /** List of channel masks supported by the profile. */
   vec<AudioChannelMask> channelMasks;
};

ऑडियो एचआईडीएल एचएएल वी7 में, AudioPort डेटा प्रकार को डिवाइस की क्षमताओं का वर्णन करने के लिए AudioProfile AudioTransport के साथ परिभाषित किया गया है।

ऑडियो एचएएल तरीके

ऑडियो नीति प्रबंधक डिवाइस की क्षमताओं को क्वेरी करने के लिए निम्न विधियों का उपयोग करता है:

  • getParameters: समर्थित ऑडियो प्रारूपों और उनके संबंधित नमूना दरों जैसे विक्रेता-विशिष्ट पैरामीटर मानों को पुनर्प्राप्त करने के लिए एक सामान्य विधि।
  • getAudioPort: किसी दिए गए ऑडियो पोर्ट के लिए समर्थित विशेषताओं (जैसे नमूना दर, प्रारूप, चैनल मास्क, लाभ नियंत्रक) की सूची देता है।

IDevice.hal से निम्न कोड getAudioPort विधि के लिए इंटरफ़ेस दिखाता है:

   /**
    * Returns the list of supported attributes for a given audio port.
    *
    * As input, 'port' contains the information (type, role, address etc...)
    * needed by the HAL to identify the port.
    *
    * As output, 'resultPort' contains possible attributes (sampling rates,
    * formats, channel masks, gain controllers...) for this port.
    *
    * @param port port identifier.
    * @return retval operation completion status.
    * @return resultPort port descriptor with all parameters filled up.
    */
   getAudioPort(AudioPort port)
           generates (Result retval, AudioPort resultPort);

लीगेसी API में परिवर्तन

एकाधिक ऑडियो प्रोफ़ाइल का समर्थन करने के लिए, लीगेसी API का संस्करण 3.2 audio_port_v7 नामक एक नई संरचना जोड़ता है। अधिक जानकारी के लिए स्रोत कोड देखें।

audio_port_v7 को जोड़ने के कारण, लीगेसी API का संस्करण 3.2, audio_port_v7 संरचना का उपयोग करके डिवाइस की क्षमताओं को क्वेरी करने के लिए get_audio_port_v7 नामक एक नया API जोड़ता है।

audio.h से निम्न कोड get_audio_port_v7 API की परिभाषा दिखाता है:

/**
 * Fills the list of supported attributes for a given audio port.
 * As input, "port" contains the information (type, role, address etc...)
 * needed by the HAL to identify the port.
 * As output, "port" contains possible attributes (sampling rates,
 * formats, channel masks, gain controllers...) for this port. The
 * possible attributes are saved as audio profiles, which contains audio
 * format and the supported sampling rates and channel masks.
 */
 int (*get_audio_port_v7)(struct audio_hw_device *dev,
                          struct audio_port_v7 *port);

लीगेसी get_audio_port API के डेटा को नए AudioPort प्रारूप में पॉप्युलेट किया जाना चाहिए, जब लीगेसी API संस्करण 3.2 से नीचे हो और HIDL HAL संस्करण 7 या उससे ऊपर हो। इस मामले में, get_audio_port से सभी रिपोर्ट किए गए नमूना दरों और चैनल मास्क को सभी लौटाए गए प्रारूपों के लिए समर्थित माना जाता है, जिससे get_audio_port मानों से नई AudioPort संरचना में सीधी मैपिंग सक्षम हो जाती है।

उदाहरण एपीआई कार्यान्वयन

यह खंड कई परीक्षण सूटों का वर्णन करता है जिनमें पिछले अनुभागों में शामिल एपीआई का उपयोग करने वाली विधियां शामिल हैं। इन एपीआई को कैसे कार्यान्वित और उपयोग किया जाता है, इसके कुछ उदाहरणों के लिए इन विधियों का संदर्भ लें।

setPreferredDevicesForStrategy , getPreferredDevicesForStrategy , removePreferredDeviceForStrategy और OnPreferredDevicesForStrategyChangedListener सिस्टम API के उपयोग का एक उदाहरण PreferredDeviceRoutingTest पद्धति में है, जो GTS में स्थित है।

AudioDeviceInfo में उपयोग में आने वाली नई संरचना का एक उदाहरण देखने के लिए, AudioManagerTest#testGetDevices विधि देखें जो CTS में स्थित है।

audio_hal.c के कार्यान्वयन का एक उदाहरण get_audio_port_v7 में स्थित है और यह दिखाता है कि कैसे कई उपकरणों के लिए क्षमताओं की पूछताछ की जाती है।

मान्यकरण

यह खंड ऑडियो मैनेजर के सीटीएस और जीटीएस (गूगल मोबाइल सर्विसेज टेस्ट सूट) के सत्यापन के बारे में जानकारी देता है।

सीटीएस परीक्षण

सीटीएस परीक्षण android.media.cts.AudioManagerTest में स्थित हैं।

उपलब्ध ऑडियो प्रबंधक परीक्षणों की सूची निम्नलिखित है:

  • AudioManagerTest#testGetDevices

    ऑडियो डिवाइस की सटीक क्षमताओं की पुष्टि करता है। यह भी सत्यापित करता है कि AudioDeviceInfo संरचना में लौटाए गए ऑडियो प्रोफाइल पुराने, चपटे सरणी प्रारूप से सामग्री को सुरक्षित रखते हैं, लेकिन नए AudioProfile प्रारूप में हैं।

  • AudioManagerTest#testPreferredDevicesForStrategy और AudioManagerTest#testPreferredDeviceForCapturePreset

    सत्यापित करें कि रणनीति के लिए पसंदीदा उपकरण और प्रीसेट संबंधित एपीआई परीक्षण सफलतापूर्वक पूरा करें।

जीटीएस परीक्षण

GTS परीक्षण com.google.android.gts.audioservice.AudioServiceHostTest में स्थित हैं।

यह सत्यापित करने के लिए कि रणनीति और कैप्चर प्रीसेट के लिए पसंदीदा डिवाइस के एपीआई सही तरीके से काम करते हैं, AudioServiceHostTest#testPreferredDeviceRouting और AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset परीक्षण चलाएँ।