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

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

Архитектура

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

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

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

Virtual Device Manager включает API-интерфейсы, которые позволяют создавать, регистрировать и управлять экземплярами VirtualDevice .

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

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

Диспетчер сопутствующих устройств

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

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

app-streaming-interaction

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

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

OEM-производители могут реализовать приложение с ролью 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, соответствующие этому профилю. См. Роли Android для списка требований роли COMPANION_DEVICE_APP_STREAMING . Обратитесь к своему контактному лицу Google для получения дополнительной информации.

Возможности держателя роли COMPANION_DEVICE_APP_STREAMING

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

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