Потоковая передача через сопутствующее приложение

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

Архитектура

Начиная с Android 13, новые Virtual Device Manager и Companion Device Manager (CDM) являются ключевыми компонентами для поддержки потоковой передачи приложений и взаимодействия с удаленными подключенными устройствами.

Диспетчер виртуальных устройств

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

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

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

  • Создание экземпляра VirtualDisplay , предназначенного для отображения на экране подключенного устройства.
  • Передача удаленного аудиопотока, например, с микрофона подключенного устройства, на локальное устройство для воспроизведения.
  • Внедрение событий удаленного ввода, например, с клавиатуры подключенного устройства, в локальное устройство для воспроизведения.

Менеджер вспомогательных устройств

CDM управляет состоянием подключения и обеспечивает соблюдение требований к ролям, необходимых для включения потоковой передачи приложений.

На следующем рисунке показано взаимодействие между локальным и удаленным устройствами во время потоковой передачи приложения:

app-streaming-interaction

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

Реализация роли потокового вещания сопутствующего приложения.

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

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

Выполните следующие шаги, чтобы реализовать роль потокового приложения-компаньона:

  1. Создайте приложение, которое запрашивает разрешение REQUEST_COMPANION_PROFILE_APP_STREAMING в манифесте.

  2. Предложите пользователю предоставить приложению разрешение на потоковую передачу данных.

  3. Создайте экземпляр CDM AssociationRequest для запроса роли COMPANION_DEVICE_APP_STREAMING . Приложение получит разрешение CREATE_VIRTUAL_DEVICE при предоставлении роли.

  4. Вызовите VirtualDeviceManager#create() для создания экземпляра VirtualDevice . С помощью экземпляра VirtualDevice приложение может создавать и управлять виртуальными дисплеями и виртуальными входами.

  5. Запустите ожидающее уведомление намерение на виртуальном дисплее и сделайте видеозапись этого дисплея.

  6. Установите соединение с подключенным устройством и передайте виртуальный дисплей на подключенное устройство.

  7. Передайте обратно входящие события с подключенного устройства на локальное устройство через API VirtualDevice .

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

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

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

Требования к держателю роли COMPANION_DEVICE_APP_STREAMING

CDM присваивает роль COMPANION_DEVICE_APP_STREAMING когда пользователь связывает приложение для потоковой передачи приложений с устройством. Эта роль связана с профилем устройства, поэтому существует некоторый контроль над тем, какие приложения, соответствующие этому профилю, могут быть добавлены в Play Store. Список требований к роли COMPANION_DEVICE_APP_STREAMING см. в разделе «Роли Android» . Для получения дополнительной информации обратитесь к своему контактному лицу в Google.

COMPANION_DEVICE_APP_STREAMING role holder capabilities

Для осуществления потоковой передачи приложений роль COMPANION_DEVICE_APP_STREAMING предполагает, что приложение-владелец роли обладает следующими возможностями и поведением:

  • Создавайте и управляйте подключениями к другим устройствам.
  • Создавайте и управляйте доверенными виртуальными дисплеями, включая разблокированные, следующим образом:
    • Запустите действия на виртуальном экране.
    • Внедряйте события, происходящие в потоковом приложении на подключенном устройстве, обратно на локальное устройство, например, воспроизводите событие касания на планшете в тех же координатах, что и на телефоне.
    • Захват аудиоданных из приложения, осуществляющего потоковую передачу.
    • Замените поток с микрофона локального устройства потоком с микрофона подключенного устройства, пока приложение, осуществляющее потоковую передачу, использует микрофон.
    • Замените видеопоток с камеры локального устройства видеопотоком с камеры подключенного устройства, пока приложение, использующее потоковую передачу, работает с камерой.
  • Управляйте уведомлениями и передавайте их с локального устройства на подключенное устройство, а также выполняйте действия на основе уведомлений.
  • Передайте метаданные с локального устройства, например, список доступных на нем приложений, на подключенное устройство.
  • Запросить проверку устройства.