ניתוב מכשיר שמע משולב

תכונת ניתוב מכשיר האודיו המשולבת מוסיפה תמיכה בהזרמת אודיו למספר התקני שמע בו זמנית. באמצעות תכונה זו, אפליקציות מועדפות יכולות לבחור מספר מכשירים מועדפים עבור אסטרטגיה מסוימת באמצעות ממשקי API של המערכת. אפליקציות יכולות לגלות את היכולות של התקני שמע בצורה מדויקת יותר על ידי שימוש בממשקי ה-API הציבוריים המסופקים על ידי תכונה זו. עבור גרסאות אנדרואיד 11 ומטה, ליישום מסגרת האודיו יש תמיכה מוגבלת במספר התקני שמע מאותו סוג (לדוגמה, 2 אוזניות Bluetooth A2DP) המחוברות בו זמנית. כללי ניתוב האודיו המוגדרים כברירת מחדל אינם מאפשרים למשתמשים לבחור מספר מכשירים מאותו סוג עבור מקרה שימוש נתון.

החל מאנדרואיד 12, מגבלות אלו מוסרות על מנת לאפשר מקרי שימוש חדשים כמו שידור אודיו, שידור ריבוי לקבוצה של אוזניות שמע BLE או בחירת מספר כרטיסי קול USB בו זמנית. ניתוב למספר התקני USB בו זמנית אינו נתמך.

החל מ-Android 14, מסגרת ה-USB תומכת בניתוב למספר התקני USB בתנאי שהתקני ה-USB הם מסוגים שונים של התקני שמע, ויש תמיכה בליבה ויצרנים לחיבור מספר התקני USB בו-זמנית.

דף זה מכסה כיצד ליישם תמיכה בהזרמת אודיו למספר התקני שמע, וכיצד לאמת את היישום של תכונה זו.

תמיכה בהזרמת אודיו למספר התקני שמע

ישנן שתי קבוצות של ממשקי API באנדרואיד 12 התומכות בתכונה זו:

  • ממשקי API של המערכת מטפלים במספר מכשירים מועדפים עבור אסטרטגיה.
  • ממשק HIDL, המיושם על ידי הספק כחלק מ-HAL האודיו, מדווח על יכולות המכשיר.

הסעיפים הבאים דנים בכל אחד מממשקי ה-API הללו ביתר פירוט.

טפל במספר מכשירים מועדפים עבור אסטרטגיה

מנהל מדיניות האודיו מציע ממשקי API של מערכת כדי לתמוך טוב יותר בהזרמת אודיו למספר מכשירי אודיו בו זמנית. ממשקי API מערכת אלו מאפשרים הגדרה, קבלת והסרה של מספר מכשירים מועדפים עבור אסטרטגיה נתונה. עד אנדרואיד 12, תכונה זו נתמכה עבור מכשיר בודד בלבד.

מנהל מדיניות השמע מציג את הרעיון של התקני מדיה פעילים כדי לתאר את המכשירים שסביר להניח שייבחרו להפעלת מדיה. כאשר מחובר התקן נתיק, ייתכן שיהיה צורך לפתוח את זרמי פלט ה-HAL של האודיו שניתן לנתב למכשיר זה ולבחון את התכונות הנתמכות.

יש לציין התקן שמע בעת פתיחת זרם פלט. התקן המדיה הפעיל הוא המכשיר המשמש כאשר זרמי פלט נפתחים בהקשר זה.

בחירת התקן המדיה הפעיל יכולה להשתנות בהתאם להתקנים המחוברים או המנותקים בפועל. מנהל מדיניות השמע משתמש בסדרת הכללים הבאה לבחירת התקני מדיה פעילים:

  1. אם כל ההתקנים המועדפים עבור מדיה זמינים, כולם נבחרים כהתקנים פעילים.
  2. אחרת, נבחר ההתקן הנשלף המחובר האחרון.
  3. אם אין התקנים נשלפים מחוברים, כללי ברירת המחדל של מדיניות האודיו לבחירת התקני פלט יחולו על בחירת התקנים פעילים.

זרם פלט חייב לעמוד בקריטריונים הבאים כדי להיפתח מחדש ולנתב למכשירים הפעילים כך שתבחר התצורה הטובה ביותר עבור ההשמעה:

  • זרם הפלט חייב לתמוך במכשירים הפעילים.
  • זרם הפלט חייב לתמוך בפרופילים דינמיים.
  • אין לנתב את זרם הפלט כרגע למכשירים פעילים.

על מנת להחיל בחירת מכשיר חדשה, מנהל מדיניות השמע נסגר ופותח מחדש זרם פלט עם חיבור המכשיר אם זרם הפלט אינו פעיל, או דוחה אותו כאשר זרם הפלט מועבר למצב המתנה.

מנהל מדיניות השמע מציע את הרשימה הבאה של ממשקי API של המערכת (כפי שמוגדר ב- AudioManager.java ):

  • setPreferredDeviceForStrategy

    מגדיר את ההתקן המועדף עבור ניתוב השמע עבור אסטרטגיה נתונה. שים לב שייתכן שהמכשיר לא יהיה זמין בזמן הגדרת המכשיר המועדף, אך נעשה בו שימוש ברגע שהוא זמין.

  • removePreferredDeviceForStrategy

    מסיר את מכשירי השמע המועדפים שהוגדרו קודם לכן עם setPreferredDeviceForStrategy או setPreferredDevicesForStrategy .

  • getPreferredDeviceForStrategy

    מחזירה את ההתקן המועדף עבור אסטרטגיית שמע שהוגדרה בעבר עם setPreferredDeviceForStrategy או setPreferredDevicesForStrategy .

  • setPreferredDevicesForStrategy

    מגדיר את המכשירים המועדפים עבור אסטרטגיה נתונה.

  • getPreferredDevicesForStrategy

    מחזירה את המכשירים המועדפים עבור אסטרטגיית שמע שהוגדרה בעבר עם setPreferredDeviceForStrategy או setPreferredDevicesForStrategy .

  • OnPreferredDevicesForStrategyChangedListener

    מגדיר ממשק להתראה על שינויים בהתקני השמע המועדפים אשר מוגדרים עבור אסטרטגיית שמע נתונה.

  • addOnPreferredDevicesForStrategyChangedListener

    מוסיף מאזין כדי לקבל הודעה על שינויים במכשיר האודיו המועדף על אסטרטגיה.

  • removeOnPreferredDevicesForStrategyChangedListener

    מסיר מאזין שנוסף בעבר של שינויים במכשיר האודיו המועדף על אסטרטגיה.

דיווח על יכולות המכשיר

כחלק מהטמעת Audio HAL, הספקים מיישמים את ממשקי ה-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 מדור קודם

כדי לתמוך במספר פרופילי אודיו, גרסה 3.2 של ה-API מדור קודם מוסיפה מבנה חדש בשם audio_port_v7 . עיין בקוד המקור לפרטים נוספים.

בגלל התוספת של audio_port_v7 , גרסה 3.2 של ה-API מדור קודם מוסיפה API חדש בשם get_audio_port_v7 לשאילתות על יכולות המכשירים באמצעות מבנה audio_port_v7 .

הקוד הבא מ- audio.h מציג את ההגדרה של ה-API של 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 מדור קודם בפורמט AudioPort החדש כאשר גרסת ה-API מדור קודם מתחת ל-3.2 וגרסת HIDL HAL היא 7 ומעלה. במקרה זה, ההנחה היא שכל קצבי הדגימה ומסיכות הערוצים המדווחות מ- get_audio_port נתמכות עבור כל הפורמטים המוחזרים, מה שמאפשר מיפוי פשוט מערכי get_audio_port למבנה AudioPort החדש.

יישומי API לדוגמה

סעיף זה מתאר מספר חבילות בדיקה המכילות שיטות המשתמשות בממשקי ה-API המכוסים בסעיפים הקודמים. עיין בשיטות אלה לכמה דוגמאות לאופן יישום ושימוש ממשקי API אלה.

דוגמה לשימוש בממשקי ה-API של setPreferredDevicesForStrategy , getPreferredDevicesForStrategy , removePreferredDeviceForStrategy ו- OnPreferredDevicesForStrategyChangedListener היא בשיטת PreferredDeviceRoutingTest , הממוקמת ב-GTS.

כדי לראות דוגמה של המבנה החדש ב- AudioDeviceInfo בשימוש, עיין בשיטת AudioManagerTest#testGetDevices שנמצאת ב-CTS.

דוגמה ליישום עבור get_audio_port_v7 ממוקמת ב- audio_hal.c והיא מראה כיצד נשאלות שאילתות ליכולות עבור מכשירים מרובים.

מַתַן תוֹקֵף

סעיף זה מספק מידע על אימות CTS ו-GTS (Google Mobile Services Test Suite) של מנהל האודיו.

בדיקות CTS

בדיקות CTS ממוקמות ב- android.media.cts.AudioManagerTest .

להלן רשימה של מבחני Audio Manager הזמינים:

  • AudioManagerTest#testGetDevices

    מאמת את היכולות המדויקות של מכשיר השמע. זה גם מוודא שפרופילי האודיו המוחזרים במבנה AudioDeviceInfo משמרים את התוכן מפורמט המערך הישן והשטוח יותר, אבל הם בפורמט AudioProfile החדש.

  • AudioManagerTest#testPreferredDevicesForStrategy ו- AudioManagerTest#testPreferredDeviceForCapturePreset

    ודא שהמכשירים המועדפים עבור מבחני API הקשורים לאסטרטגיה ולכידה מראש מסתיימים בהצלחה.

מבחני GTS

בדיקות GTS ממוקמות ב- com.google.android.gts.audioservice.AudioServiceHostTest .

כדי לאמת אם ממשקי ה-API עבור התקנים מועדפים עבור אסטרטגיה וקביעת לכידה פועלים כהלכה, הפעל את הבדיקות AudioServiceHostTest#testPreferredDeviceRouting ו- AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset .