ऑडियो डिवाइस को एक साथ रूट करने की सुविधा

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

Android 12 और उसके बाद के वर्शन में, ये पाबंदियां हटा दी जाएंगी Google Voice का इस्तेमाल करने, जैसे कि ऑडियो ब्रॉडकास्ट करने, ग्रुप में मल्टीकास्ट करने की सुविधा बनाने या एक साथ कई यूएसबी साउंड कार्ड चुनने का विकल्प होता है. एक साथ कई यूएसबी डिवाइसों पर रूट करने की सुविधा काम नहीं करती.

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

इस पेज में बताया गया है कि कई ऑडियो डिवाइस और अपनी सुविधा के लागू होने की पुष्टि का तरीका इस सुविधा के बारे में बात करते हैं.

ऑडियो को कई ऑडियो डिवाइसों पर स्ट्रीम करने की सुविधा उपलब्ध है

इस सुविधा के साथ काम करने वाले Android 12 में, एपीआई के दो सेट उपलब्ध हैं:

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

यहां दिए गए सेक्शन में, इनमें से हर एपीआई के बारे में ज़्यादा जानकारी दी गई है.

रणनीति बनाने के लिए, एक से ज़्यादा पसंदीदा डिवाइसों को मैनेज करना

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

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

आउटपुट स्ट्रीम खोलते समय, ऑडियो डिवाइस के बारे में बताना ज़रूरी है. ऐक्टिव मीडिया डिवाइस वह डिवाइस है जिसका इस्तेमाल इस कॉन्टेक्स्ट में आउटपुट स्ट्रीम खोलने पर किया जाता है.

मीडिया के लिए चुने गए डिवाइस की सेटिंग, आपके डिवाइस के हिसाब से बदल सकती है कनेक्ट या डिसकनेक्ट किया गया. ऑडियो नीति मैनेजर इन सीरीज़ का इस्तेमाल करता है ऐक्टिव मीडिया डिवाइसों को चुनने के लिए नियमों की संख्या:

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

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

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

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

ऑडियो पॉलिसी मैनेजर, सिस्टम एपीआई की यह सूची देता है(जैसा कि AudioManager.java):

  • setPreferredDeviceForStrategy

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

  • removePreferredDeviceForStrategy

    इससे उन पसंदीदा ऑडियो डिवाइसों को हटा दिया जाता है जिन्हें पहले सेट किया गया था setPreferredDeviceForStrategy या setPreferredDevicesForStrategy.

  • getPreferredDeviceForStrategy

    इस पर पहले से सेट की गई ऑडियो रणनीति के लिए, पसंदीदा डिवाइस दिखाता है setPreferredDeviceForStrategy या setPreferredDevicesForStrategy.

  • setPreferredDevicesForStrategy

    किसी खास रणनीति के लिए, पसंदीदा डिवाइस सेट करता है.

  • getPreferredDevicesForStrategy

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

  • OnPreferredDevicesForStrategyChangedListener

    पसंदीदा ऑडियो में बदलाव की सूचना देने के लिए इंटरफ़ेस तय करता है जो ऑडियो की किसी रणनीति के लिए सेट किए गए हैं.

  • addOnPreferredDevicesForStrategyChangedListener

    रणनीति के हिसाब से पसंदीदा ऑडियो में हुए बदलावों की सूचना पाने के लिए, लिसनर जोड़ता है डिवाइस.

  • removeOnPreferredDevicesForStrategyChangedListener

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

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

ऑडियो एचएएल लागू करने के हिस्से के तौर पर, वेंडर ऐसे एपीआई लागू करते हैं जो रिपोर्टिंग डिवाइस की क्षमताएं इस सेक्शन में, डेटा टाइप और तरीकों के बारे में बताया गया है इसका इस्तेमाल डिवाइस की क्षमताओं की रिपोर्ट करने और ऑडियो HIDL HAL में किए गए कुछ बदलावों की सूची बनाने के लिए किया जाता है वर्शन 7. इसे कई डिवाइसों पर इस्तेमाल किया जा सकता है.

डेटा टाइप

ऑडियो 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 के शामिल होने की वजह से, लेगसी एपीआई के वर्शन 3.2 में get_audio_port_v7 नाम का नया एपीआई, जिसका इस्तेमाल करके डिवाइस की क्षमता का पता लगाने के लिए audio_port_v7 स्ट्रक्चर.

audio.h से मिला कोड get_audio_port_v7 एपीआई की परिभाषा दिखाता है:

/**
 * 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 के डेटा को नए एपीआई में पॉप्युलेट करना होगा लेगसी एपीआई वर्शन 3.2 और HIDL HAL से नीचे होने पर, AudioPort फ़ॉर्मैट वर्शन 7 या उसके बाद का है. इस मामले में, रिपोर्ट की गई सभी सैंपल रेट और चैनल माना जाता है कि get_audio_port के मास्क, लौटाए गए सभी उपयोगकर्ताओं के लिए काम करेंगे फ़ॉर्मैट की मदद से, get_audio_port वैल्यू से लेकर AudioPort का नया स्ट्रक्चर.

एपीआई लागू करने का उदाहरण

इस सेक्शन में, ऐसे कई टेस्ट सुइट के बारे में बताया गया है जिनमें एपीआई का इस्तेमाल करने के तरीके मौजूद हैं ऊपर दिए गए सेक्शन में शामिल हैं. के कुछ उदाहरणों के लिए इन तरीकों का इस्तेमाल करें और इन एपीआई को कैसे लागू और इस्तेमाल किया जाता है.

setPreferredDevicesForStrategy के इस्तेमाल का एक उदाहरण, getPreferredDevicesForStrategy, removePreferredDeviceForStrategy, और OnPreferredDevicesForStrategyChangedListener सिस्टम एपीआई, PreferredDeviceRoutingTest तरीका इस्तेमाल किया है, जो GTS में मौजूद है.

AudioDeviceInfo में नई संरचना का उदाहरण देखने के लिए, यहां देखें सीटीएस में मौजूद AudioManagerTest#testGetDevices तरीका.

get_audio_port_v7 को लागू करने का एक उदाहरण audio_hal.c साथ ही, यह दिखाया जाता है कि अलग-अलग डिवाइसों के लिए क्षमताओं के बारे में कैसे पूछा जाता है.

पुष्टि करें

इस सेक्शन में CTS के बारे में जानकारी दी गई है और GTS (Google मोबाइल सेवाएं टेस्ट सुइट) की पुष्टि कर ली है.

सीटीएस टेस्ट

सीटीएस टेस्ट android.media.cts.AudioManagerTest में होते हैं.

उपलब्ध ऑडियो मैनेजर परीक्षणों की सूची नीचे दी गई है:

  • AudioManagerTest#testGetDevices

    ऑडियो डिवाइस की सटीक क्षमताओं की पुष्टि करता है. इससे यह भी पुष्टि की जाती है कि AudioDeviceInfo स्ट्रक्चर में लौटाए गए ऑडियो प्रोफ़ाइल से पुराने, चपटे आकार वाले अरे फ़ॉर्मैट से है, लेकिन नए फ़ॉर्मैट में है AudioProfile फ़ॉर्मैट.

  • AudioManagerTest#testPreferredDevicesForStrategy और AudioManagerTest#testPreferredDeviceForCapturePreset

    पुष्टि करें कि स्ट्रेटजी और प्रीसेट को कैप्चर करने के लिए, इस्तेमाल होने वाले डिवाइसों का इस्तेमाल किया जा रहा है एपीआई की जांच पूरी हो गई है.

GTS परीक्षण

GTS टेस्ट com.google.android.gts.audioservice.AudioServiceHostTest में मौजूद हैं.

यह पुष्टि करने के लिए कि पसंदीदा डिवाइसों के लिए, स्ट्रेटजी और प्रीसेट कैप्चर के लिए एपीआई उपलब्ध हैं या नहीं सही तरीके से काम कर सके, AudioServiceHostTest#testPreferredDeviceRouting और AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset टेस्ट चलाएं.