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

В 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 Маркет. Список требований к роли COMPANION_DEVICE_APP_STREAMING см. в разделе «Роли Android» . За дополнительной информацией обратитесь к своему контактному лицу в Google.

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

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

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