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

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

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

एंड्रॉइड 14 से शुरू होकर, यूएसबी फ्रेमवर्क कई यूएसबी डिवाइसों के लिए रूटिंग का समर्थन करता है, बशर्ते यूएसबी डिवाइस अलग-अलग ऑडियो डिवाइस प्रकार के हों और, एक साथ कई यूएसबी डिवाइसों को कनेक्ट करने के लिए कर्नेल और विक्रेता समर्थन हो।

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

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

एंड्रॉइड 12 में एपीआई के दो सेट हैं जो इस सुविधा का समर्थन करते हैं:

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

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

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

ऑडियो पॉलिसी मैनेजर एक साथ कई ऑडियो डिवाइस पर स्ट्रीमिंग ऑडियो को बेहतर समर्थन देने के लिए सिस्टम एपीआई प्रदान करता है। ये सिस्टम एपीआई किसी दी गई रणनीति के लिए कई पसंदीदा डिवाइसों को सेट करने, प्राप्त करने और हटाने में सक्षम बनाते हैं। 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;
};

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

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

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

  • 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);

लीगेसी एपीआई में परिवर्तन

एकाधिक ऑडियो प्रोफाइल का समर्थन करने के लिए, लीगेसी एपीआई का संस्करण 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);

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

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

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

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

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

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

मान्यकरण

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

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

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

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

  • AudioManagerTest#testGetDevices

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

  • AudioManagerTest#testPreferredDevicesForStrategy और AudioManagerTest#testPreferredDeviceForCapturePreset

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

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

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

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