Одновременная запись

В Android 10 улучшено удобство использования, когда требуется одновременная запись нескольких аудиопотоков. Например, если пользователь хочет управлять VoIP-вызовом или видеозаписью с помощью голосовых команд, предоставляемых сервисом специальных возможностей.

Аудиофреймворк реализует правило, разрешающее одновременную запись только определенным привилегированным приложениям.

Правило одновременного использования реализуется путем отключения захваченного аудио, а не путем запрета приложению начать захват. Это позволяет фреймворку динамически реагировать на изменения в количестве и типах активных случаев использования захвата, не запрещая приложению начинать захват в случае, когда оно может восстановить полный доступ к микрофону после того, как другое приложение завершит захват.

Аудио HAL и аудиоподсистема должны поддерживать несколько активных входных потоков одновременно, даже если в некоторых случаях только один поток предоставляет активному клиенту аудио, отличное от тишины.

Требования к CDD

Требования к поддержке одновременной съемки приведены в CDD.

Захват ситуаций из HAL аудио

При одновременной записи могут возникать разные ситуации, связанные с количеством активных входных потоков, выбором устройства ввода или конфигурацией предварительной обработки.

Конкуренция может возникать между следующими объектами:

  • Несколько входных потоков от процессора приложений (AP)
  • Входные потоки и голосовой вызов
  • Входные потоки и аудиопроцессор, реализующий распознавание голосовых команд с низким энергопотреблением.

Одновременная активность входных потоков процессора приложений

Файл конфигурации правил аудио audio_policy_configuration.xml используется аудиофреймворком, чтобы определить, сколько входных потоков можно открыть и активировать одновременно.

Аудиоинтерфейс HAL должен поддерживать хотя бы один экземпляр каждого профиля ввода (mixPort роли sink), указанного в открытом и активном файле конфигурации.

Выбор устройства

Когда к одному входному потоку HAL подключено несколько активных клиентов, фреймворк выбирает подходящее устройство для этого входного потока на основе приоритета варианта использования.

Если активно несколько входных потоков, для каждого из них можно выбрать свое устройство.

Если технология совместима, рекомендуется, чтобы HAL и подсистема аудио позволяли разным потокам получать данные с разных устройств, например с Bluetooth-гарнитуры и встроенного микрофона.

Если устройства несовместимы (например, у них один и тот же цифровой аудиоинтерфейс или серверная часть), аудиоуровень HAL должен выбрать, какой поток управляет выбором устройства.

В таком случае:

  • При повторении одного и того же сценария устройство должно находиться в одном и том же состоянии и предлагать один и тот же выбор.
  • Когда состояние параллельного воспроизведения завершается, оставшийся активный поток должен быть направлен на устройство, изначально запрошенное для этого потока.

Если HAL аудио определяет порядок приоритета между активными вариантами использования, следуйте тому же порядку, что и в source_priority() в frameworks/av/services/audiopolicy/common/include/policy.h.

Выбор предварительной обработки

Аудиофреймворк может запрашивать предварительную обработку входного потока с помощью методов HAL addEffect() или removeEffect().

При предварительной обработке определенного входного потока аудиофреймворк позволяет использовать только конфигурацию, соответствующую активному варианту использования с наивысшим приоритетом в этом входном потоке. Однако при активации и деактивации вариантов использования может возникнуть наложение, из-за которого два активных процесса (например, два экземпляра эхоподавителя) будут одновременно запущены для одного входного потока. В этом случае реализация HAL выбирает, какой запрос будет принят, отслеживает активные запросы и восстанавливает правильное состояние, когда один из процессов отключен.

Если одновременно активны несколько потоков захвата, для разных потоков могут выполняться разные запросы на предварительную обработку.

Реализации HAL и аудиоподсистемы должны позволять применять разные алгоритмы предварительной обработки к разным потокам, даже если они используют одно и то же устройство ввода. То есть предварительная обработка должна выполняться после демультиплексирования потоков из основного источника захвата.

Если по техническим причинам это невозможно для определенной аудиоподсистемы, аудио HAL должен применять правила приоритета, аналогичные перечисленным в разделе Выбор устройства.

Одновременный голосовой вызов и запись с точки доступа

Запись с ТД может выполняться во время голосового вызова. Эта ситуация не нова для Android 10 и не связана напрямую с функцией одновременной съемки, но полезно упомянуть рекомендации для этого сценария.

Во время звонка нужно сделать два разных типа записи с процессора приложений.

Запись звонков RX и TX

Запись входящих и исходящих вызовов запускается при использовании источника аудио AudioSource.VOICE_UPLINK или AudioSource.VOICE_DOWNLINK и/или устройства AudioDevice.IN_TELEPHONY_RX.

Аудиоинтерфейсы HAL должны быть доступны в профиле ввода (mixPort роли sink) с доступным маршрутом от устройства AudioDevice.IN_TELEPHONY_RX.

Когда звонок подключен (режим "Только аудио" – AudioMode.IN_CALL), должен быть доступен хотя бы один активный поток захвата с устройства AudioDevice.IN_TELEPHONY_RX.

Запись с устройств ввода, когда активен звонок

Когда звонок активен (режим "Только аудио" – AudioMode.IN_CALL), можно открыть и активировать входные потоки из AP, как указано в разделе Одновременная активность входных потоков AP.

Однако при выборе устройства и предварительной обработке приоритет всегда должен отдаваться голосовому вызову, если есть конфликт с запросами из входных потоков AP.

Одновременный сбор данных с DSP и AP

Если аудиоподсистема содержит DSP, поддерживающий функции контекста аудио с низким энергопотреблением или распознавания голосовых команд, реализация должна поддерживать одновременный захват звука с AP и аудио DSP. Это относится как к захвату данных DSP на начальном этапе обнаружения, так и к захвату данных AP с помощью AudioSource.HOTWORD после того, как DSP активирует обнаружение.

Это должно быть отражено в флаге одновременной записи, который Sound Trigger HAL сообщает через дескриптор реализации: ISoundTriggerHw.Properties.concurrentCapture = true.

Аудиоинтерфейс HAL также должен предоставлять и принимать профиль, предназначенный для захвата горячего слова и идентифицируемый флагом AudioInputFlag.HW_HOTWORD. Реализация должна поддерживать открытие и активацию в этом профиле такого количества потоков, которое не меньше количества звуковых моделей, которые могут быть загружены одновременно HAL звукового триггера.

Запись с этого профиля должна быть возможна, когда активны другие профили.

Влияние на реализацию Ассистента

Требования к использованию данных и уведомлениям для пользователей

Поскольку одновременное использование микрофона может привести к утечке личных данных пользователей, мы требуем, чтобы привилегированные предустановленные приложения, которым нужна роль Ассистента, соответствовали следующим условиям и гарантиям.

  • Данные, собранные с помощью микрофона, не должны покидать устройство, если пользователь не взаимодействует с Ассистентом. Например, после того как вы произнесете команду активации.
  • Приложения, которые слушают одновременно, должны предоставлять пользователю визуальные подсказки после обнаружения ключевого слова. Это поможет пользователям понять, что дальнейшее общение будет происходить через другое приложение, например Ассистента.
  • У пользователей должна быть возможность отключить микрофон или триггеры Ассистента.
  • Когда аудиозаписи хранятся, у пользователей должна быть возможность в любое время получить доступ к ним, просмотреть и удалить их.

Улучшения функций для Android 10.

Ассистенты не блокируют друг друга

На устройствах с Android 9 или более ранней версии, на которых включены два постоянно активных помощника, только один из них может слушать ключевое слово. Поэтому приходилось переключаться между двумя помощниками. В Android 10 Ассистент по умолчанию может слушать одновременно с другим Ассистентом. Это значительно повышает удобство использования обоих помощников.

Приложения, которые держат микрофон включенным

Когда микрофон используется такими приложениями, как Shazam или Waze, Ассистент по умолчанию может продолжать слушать, чтобы распознать команду активации.

В Android 10 поведение приложений Помощника, не заданных по умолчанию, не изменилось.

Пример реализации HAL аудио

Пример реализации HAL аудио, соответствующей рекомендациям в этом документе, можно найти в AOSP.