সম্মিলিত অডিও ডিভাইস রাউটিং

সম্মিলিত অডিও ডিভাইস রাউটিং বৈশিষ্ট্যটি একই সাথে একাধিক অডিও ডিভাইসে অডিও স্ট্রিম করার জন্য সমর্থন যোগ করে। এই বৈশিষ্ট্যটি ব্যবহার করে, সুবিধাপ্রাপ্ত অ্যাপগুলি সিস্টেম API-এর মাধ্যমে একটি নির্দিষ্ট কৌশলের জন্য একাধিক পছন্দের ডিভাইস নির্বাচন করতে পারে। অ্যাপগুলি এই বৈশিষ্ট্য দ্বারা প্রদত্ত পাবলিক API ব্যবহার করে অডিও ডিভাইসের ক্ষমতা আরও সুনির্দিষ্টভাবে আবিষ্কার করতে পারে। অ্যান্ড্রয়েড সংস্করণ 11 এবং নীচের জন্য, অডিও ফ্রেমওয়ার্ক বাস্তবায়নে একই ধরনের একাধিক অডিও ডিভাইসের জন্য সীমিত সমর্থন রয়েছে (উদাহরণস্বরূপ, 2টি ব্লুটুথ A2DP হেডসেট) একই সাথে সংযুক্ত। ডিফল্ট অডিও রাউটিং নিয়মগুলি ব্যবহারকারীদের প্রদত্ত ব্যবহারের ক্ষেত্রে একই ধরণের একাধিক ডিভাইস নির্বাচন করার অনুমতি দেয় না।

অ্যান্ড্রয়েড 12 দিয়ে শুরু করে, অডিও সম্প্রচার, বিএলই অডিও হেডফোনের একটি গ্রুপে মাল্টিকাস্টিং বা একই সাথে একাধিক ইউএসবি সাউন্ড কার্ড নির্বাচন করার মতো নতুন ব্যবহারের ক্ষেত্রে অনুমতি দেওয়ার জন্য এই সীমাবদ্ধতাগুলি সরিয়ে দেওয়া হয়েছে। একই সাথে একাধিক USB ডিভাইসে রাউটিং সমর্থিত নয়।

অ্যান্ড্রয়েড 14 দিয়ে শুরু করে, ইউএসবি ফ্রেমওয়ার্ক একাধিক ইউএসবি ডিভাইসে রাউটিং সমর্থন করে তবে ইউএসবি ডিভাইসগুলি বিভিন্ন ধরনের অডিও ডিভাইসের হয় এবং একই সাথে একাধিক ইউএসবি ডিভাইস সংযোগ করার জন্য কার্নেল এবং বিক্রেতা সমর্থন রয়েছে।

এই পৃষ্ঠাটি কভার করে যে কীভাবে একাধিক অডিও ডিভাইসে অডিও স্ট্রিম করার জন্য সমর্থন প্রয়োগ করতে হয় এবং কীভাবে আপনার এই বৈশিষ্ট্যটির বাস্তবায়নকে যাচাই করতে হয়।

একাধিক অডিও ডিভাইসে অডিও স্ট্রিমিং সমর্থন করে

অ্যান্ড্রয়েড 12-এ API-এর দুটি সেট রয়েছে যা এই বৈশিষ্ট্যটিকে সমর্থন করে:

  • সিস্টেম APIগুলি একটি কৌশলের জন্য একাধিক পছন্দের ডিভাইস পরিচালনা করে।
  • HIDL ইন্টারফেস, অডিও HAL-এর অংশ হিসাবে বিক্রেতা দ্বারা প্রয়োগ করা হয়েছে, ডিভাইসের ক্ষমতা রিপোর্ট করে।

নিম্নলিখিত বিভাগগুলি এই APIগুলির প্রতিটিকে আরও বিশদে আলোচনা করে৷

একটি কৌশলের জন্য একাধিক পছন্দের ডিভাইস পরিচালনা করুন

অডিও পলিসি ম্যানেজার একই সাথে একাধিক অডিও ডিভাইসে স্ট্রিমিং অডিওকে আরও ভালোভাবে সমর্থন করার জন্য সিস্টেম এপিআই অফার করে। এই সিস্টেম APIগুলি একটি প্রদত্ত কৌশলের জন্য একাধিক পছন্দের ডিভাইস সেটিং, পাওয়ার এবং অপসারণ সক্ষম করে৷ Android 12 পর্যন্ত, এই বৈশিষ্ট্যটি শুধুমাত্র একটি ডিভাইসের জন্য সমর্থিত ছিল।

অডিও পলিসি ম্যানেজার মিডিয়া প্লেব্যাকের জন্য সবচেয়ে বেশি বাছাই করা ডিভাইসগুলিকে বর্ণনা করতে সক্রিয় মিডিয়া ডিভাইসের ধারণাটি উপস্থাপন করে। যখন একটি বিচ্ছিন্নযোগ্য ডিভাইস সংযুক্ত থাকে, তখন অডিও HAL আউটপুট স্ট্রীমগুলি যা এই ডিভাইসে রাউট করা যেতে পারে সেগুলি খুলতে হবে এবং সমর্থিত বৈশিষ্ট্যগুলির জন্য অনুসন্ধান করতে হবে।

একটি আউটপুট স্ট্রীম খোলার সময় একটি অডিও ডিভাইস নির্দিষ্ট করা আবশ্যক৷ এই প্রেক্ষাপটে আউটপুট স্ট্রীম খোলার সময় ব্যবহৃত ডিভাইসটি সক্রিয় মিডিয়া ডিভাইস।

সক্রিয় মিডিয়া ডিভাইস নির্বাচন প্রকৃত ডিভাইস সংযুক্ত বা সংযোগ বিচ্ছিন্ন উপর নির্ভর করে পরিবর্তন হতে পারে. অডিও পলিসি ম্যানেজার সক্রিয় মিডিয়া ডিভাইসগুলি বেছে নিতে নিম্নলিখিত সিরিজের নিয়মগুলি ব্যবহার করে:

  1. মিডিয়ার জন্য সমস্ত পছন্দের ডিভাইস উপলব্ধ থাকলে, সেগুলিকে সক্রিয় ডিভাইস হিসাবে বেছে নেওয়া হয়।
  2. অন্যথায়, সর্বশেষ সংযুক্ত অপসারণযোগ্য ডিভাইসটি বেছে নেওয়া হয়েছে।
  3. যদি কোনো অপসারণযোগ্য ডিভাইস সংযুক্ত না থাকে, তাহলে আউটপুট ডিভাইসগুলি বেছে নেওয়ার জন্য ডিফল্ট অডিও নীতি নিয়ম সক্রিয় ডিভাইসগুলি বেছে নিতে প্রয়োগ করা হয়।

একটি আউটপুট স্ট্রীমকে অবশ্যই সক্রিয় ডিভাইসগুলিতে পুনরায় খোলা এবং রাউট করার জন্য নিম্নলিখিত মানদণ্ডগুলি পূরণ করতে হবে যাতে প্লেব্যাকের জন্য সেরা কনফিগারেশন বাছাই করা হয়:

  • আউটপুট স্ট্রীম সক্রিয় ডিভাইস সমর্থন করা আবশ্যক.
  • আউটপুট স্ট্রীম অবশ্যই গতিশীল প্রোফাইল সমর্থন করবে।
  • আউটপুট স্ট্রীম বর্তমানে সক্রিয় ডিভাইসে রুট করা উচিত নয়৷

একটি নতুন ডিভাইস নির্বাচন প্রয়োগ করার জন্য, আউটপুট স্ট্রীম নিষ্ক্রিয় থাকলে অডিও নীতি ম্যানেজার ডিভাইস সংযোগের উপর একটি আউটপুট স্ট্রীম বন্ধ করে এবং পুনরায় খোলে, বা যখন আউটপুট স্ট্রীম স্ট্যান্ডবাইতে রাখা হয় তখন এটিকে স্থগিত করে।

অডিও পলিসি ম্যানেজার নিম্নলিখিত সিস্টেম API-এর তালিকা অফার করে (যেমন AudioManager.java এ সংজ্ঞায়িত করা হয়েছে):

  • setPreferredDeviceForStrategy

    একটি প্রদত্ত কৌশলের জন্য অডিও রাউটিংয়ের জন্য পছন্দের ডিভাইস সেট করে। মনে রাখবেন যে পছন্দের ডিভাইসটি সেট করার সময় ডিভাইসটি উপলব্ধ নাও হতে পারে, কিন্তু একবার উপলব্ধ করা হলে ব্যবহার করা হয়।

  • removePreferredDeviceForStrategy

    setPreferredDeviceForStrategy বা setPreferredDevicesForStrategy এর সাথে পূর্বে সেট করা পছন্দের অডিও ডিভাইস(গুলি) সরিয়ে দেয়।

  • getPreferredDeviceForStrategy

    setPreferredDeviceForStrategy বা setPreferredDevicesForStrategy এর সাথে পূর্বে সেট করা একটি অডিও কৌশলের জন্য পছন্দের ডিভাইসটি ফেরত দেয়।

  • setPreferredDevicesForStrategy

    একটি প্রদত্ত কৌশলের জন্য পছন্দের ডিভাইস সেট করে।

  • getPreferredDevicesForStrategy

    setPreferredDeviceForStrategy বা setPreferredDevicesForStrategy এর সাথে পূর্বে সেট করা একটি অডিও কৌশলের জন্য পছন্দের ডিভাইসগুলি ফেরত দেয়।

  • OnPreferredDevicesForStrategyChangedListener

    একটি প্রদত্ত অডিও কৌশলের জন্য সেট করা পছন্দের অডিও ডিভাইসে পরিবর্তনের বিজ্ঞপ্তির জন্য একটি ইন্টারফেস সংজ্ঞায়িত করে।

  • addOnPreferredDevicesForStrategyChangedListener

    কৌশল-পছন্দের অডিও ডিভাইসে পরিবর্তনের বিজ্ঞপ্তি পেতে একজন শ্রোতাকে যোগ করে।

  • removeOnPreferredDevicesForStrategyChangedListener

    কৌশল-পছন্দের অডিও ডিভাইসে পরিবর্তনের পূর্বে যোগ করা শ্রোতাকে সরিয়ে দেয়।

ডিভাইস ক্ষমতা রিপোর্ট

অডিও এইচএএল বাস্তবায়নের অংশ হিসাবে, বিক্রেতারা এমন API প্রয়োগ করে যা রিপোর্টিং ডিভাইসের ক্ষমতা সমর্থন করে। এই বিভাগটি ডিভাইসের ক্ষমতা রিপোর্ট করতে ব্যবহৃত ডেটা প্রকার এবং পদ্ধতিগুলি ব্যাখ্যা করে এবং একাধিক ডিভাইস সমর্থন করার জন্য অডিও 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 কাঠামোর সাথে ডিভাইসের ক্ষমতা বর্ণনা করার জন্য সংজ্ঞায়িত করা হয়।

অডিও HAL পদ্ধতি

অডিও পলিসি ম্যানেজার ডিভাইসের ক্ষমতাগুলি অনুসন্ধান করতে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করে:

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

উত্তরাধিকার API সংস্করণ 3.2 এর নিচে এবং HIDL HAL সংস্করণ 7 বা তার বেশি হলে লিগ্যাসি get_audio_port API থেকে ডেটা নতুন AudioPort ফর্ম্যাটে জমা করতে হবে। এই ক্ষেত্রে, get_audio_port থেকে রিপোর্ট করা সমস্ত নমুনা হার এবং চ্যানেল মাস্কগুলি ফেরত দেওয়া সমস্ত ফর্ম্যাটের জন্য সমর্থিত বলে ধরে নেওয়া হয়, get_audio_port মান থেকে নতুন AudioPort কাঠামোতে একটি সরল ম্যাপিং সক্ষম করে৷

উদাহরণ API বাস্তবায়ন

এই বিভাগটি পূর্ববর্তী বিভাগে আচ্ছাদিত API ব্যবহার করে এমন পদ্ধতি সম্বলিত বেশ কয়েকটি পরীক্ষা স্যুট বর্ণনা করে। এই APIগুলি কীভাবে প্রয়োগ করা হয় এবং ব্যবহার করা হয় তার কিছু উদাহরণের জন্য এই পদ্ধতিগুলি পড়ুন।

setPreferredDevicesForStrategy , getPreferredDevicesForStrategy , removePreferredDeviceForStrategy এবং OnPreferredDevicesForStrategyChangedListener সিস্টেম API-এর ব্যবহারের একটি উদাহরণ হল PreferredDeviceRoutingTest পদ্ধতিতে, যা GTS-এ অবস্থিত।

AudioDeviceInfo ব্যবহারে নতুন কাঠামোর উদাহরণ দেখতে, CTS-এ অবস্থিত AudioManagerTest#testGetDevices পদ্ধতি দেখুন।

get_audio_port_v7 এর বাস্তবায়নের একটি উদাহরণ audio_hal.c এ অবস্থিত এবং এটি দেখায় কিভাবে একাধিক ডিভাইসের জন্য সক্ষমতা জিজ্ঞাসা করা হয়।

বৈধতা

এই বিভাগটি CTS এবং GTS (Google Mobile Services Test Suite) অডিও ম্যানেজারের বৈধতা সম্পর্কে তথ্য দেয়।

CTS পরীক্ষা

CTS পরীক্ষাগুলি android.media.cts.AudioManagerTest এ অবস্থিত।

নীচে উপলব্ধ অডিও ম্যানেজার পরীক্ষার তালিকা রয়েছে:

  • AudioManagerTest#testGetDevices

    অডিও ডিভাইসের সুনির্দিষ্ট ক্ষমতা যাচাই করে। এটি আরও যাচাই করে যে AudioDeviceInfo কাঠামোতে ফিরে আসা অডিও প্রোফাইলগুলি পুরানো, সমতল অ্যারে বিন্যাস থেকে সামগ্রী সংরক্ষণ করে, কিন্তু নতুন AudioProfile বিন্যাসে রয়েছে।

  • AudioManagerTest#testPreferredDevicesForStrategy and AudioManagerTest#testPreferredDeviceForCapturePreset

    যাচাই করুন যে কৌশলের জন্য পছন্দের ডিভাইস এবং ক্যাপচার প্রিসেট সম্পর্কিত API পরীক্ষা সফলভাবে সম্পন্ন হয়েছে।

জিটিএস পরীক্ষা

GTS পরীক্ষা com.google.android.gts.audioservice.AudioServiceHostTest এ অবস্থিত।

কৌশল এবং ক্যাপচার প্রিসেটের জন্য পছন্দের ডিভাইসগুলির APIগুলি সঠিকভাবে কাজ করে কিনা তা যাচাই করতে, AudioServiceHostTest#testPreferredDeviceRouting এবং AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset পরীক্ষা চালান।