В Android 13 функция стриминга приложений позволяет транслировать приложения с телефона на подключенные устройства и взаимодействовать с ними. Новая роль COMPANION_DEVICE_APP_STREAMING позволяет приложению создавать прокси-серверы для подключенных удаленных устройств и управлять ими, чтобы транслировать приложения с локального устройства на удаленное. Приложение с ролью COMPANION_DEVICE_APP_STREAMING может получить разрешения на создание виртуального экрана, запуск на нем приложения и трансляцию видео из запущенного приложения на другое устройство. Приложение с ролью также может передавать события ввода и микрофона, полученные с удаленного устройства, обратно на локальное устройство, как если бы оно было подключено в качестве периферийного.
Архитектура
В Android 13 появились новые менеджер виртуальных устройств и менеджер сопутствующих устройств, которые позволяют поддерживать потоковую передачу приложений и взаимодействие с подключенными удаленными устройствами.
Диспетчер виртуальных устройств
Стриминг приложений работает с помощью виртуальных дисплеев. Менеджер виртуальных устройств создает виртуальный дисплей, который не связан с основным дисплеем. Когда пользователь дает согласие на стриминг приложения, оно запускается на виртуальном дисплее или переносится на него. Содержимое виртуального дисплея передается в виде видеопотока на подключенное устройство.
Virtual Device Manager включает API, которые позволяют создавать, регистрировать экземпляры VirtualDevice и управлять ими.
Экземпляр VirtualDevice является прокси-сервером для подключенного устройства и его возможностей. Экземпляр VirtualDevice позволяет подключенному устройству получать, показывать и взаимодействовать с входящим потоком приложения, выполняя следующие действия:
- Создание экземпляра
VirtualDisplay, который будет показываться на экране подключенного устройства. - Внедрение удаленного аудиопотока, например с микрофона подключенного устройства, в локальное устройство для воспроизведения.
- Передача на локальное устройство для воспроизведения событий, связанных с удаленным вводом, например с клавиатуры подключенного устройства.
Управление подключенными устройствами
CDM управляет состоянием подключения и обеспечивает соблюдение требований к ролям, которые должны быть выполнены для включения стриминга приложений.
На рисунке ниже показано, как взаимодействуют локальное и удаленное устройства при стриминге приложений.
Рисунок 1. Взаимодействие между локальным и удаленным устройствами во время стриминга приложений.
Реализация роли стриминга сопутствующего приложения
Производители устройств могут реализовать приложение с ролью COMPANION_DEVICE_APP_STREAMING, чтобы обеспечить удобное и безопасное взаимодействие между устройствами.
Чтобы создать виртуальное устройство для стриминга приложений, у приложения должна быть роль COMPANION_DEVICE_APP_STREAMING. Когда роль назначена, приложение получает разрешение CREATE_VIRTUAL_DEVICE, которое позволяет ему создавать виртуальное устройство. Владельцы ролей должны реализовать стриминг приложений, создав экземпляр VirtualDevice, который будет действовать как прокси-сервер для подключенного устройства. Класс VirtualDevice предоставляет методы, позволяющие извлечь композитную поверхность виртуального дисплея, подходящую для потоковой передачи на другое устройство. Класс VirtualDevice также предоставляет API для передачи событий ввода, происходящих на удаленном устройстве, на локальное устройство. Благодаря этому приложение, запущенное на локальном устройстве, может выглядеть так, будто оно работает на удаленном устройстве.
Чтобы реализовать роль стриминга приложений в сопутствующем приложении, выполните следующие действия:
Создайте приложение, которое запрашивает разрешение
REQUEST_COMPANION_PROFILE_APP_STREAMINGв манифесте.Запросите у пользователя разрешение на стриминг приложений.
Создайте экземпляр CDM
AssociationRequest, чтобы запросить рольCOMPANION_DEVICE_APP_STREAMING. Приложение получает разрешениеCREATE_VIRTUAL_DEVICE, когда назначается роль.Вызовите
VirtualDeviceManager#create(), чтобы создать экземплярVirtualDevice. В экземпляреVirtualDeviceприложение может создавать виртуальные дисплеи и виртуальные устройства ввода и управлять ими.Запустите отложенный интент уведомления на виртуальном дисплее и создайте видеозапись этого дисплея.
Установить подключение к подключенному устройству и передать на него изображение с виртуального дисплея.
Передавать события ввода с подключенного устройства на локальное устройство с помощью API
VirtualDevice.Когда пользователь закрывает потоковый сервис на удаленном устройстве, завершите трансляцию и удалите экземпляр
VirtualDevice. В этот момент потоковый сервис, который ранее использовался, начинает работать в фоновом режиме на локальном устройстве, а подключение закрывается.При необходимости дождитесь дополнительных сигналов от подключенного устройства, чтобы перезапустить трансляцию приложения.
Приложение отвечает за подключение к удаленному устройству, передачу информации о статусе подключения в CDM и соблюдение требований безопасности, описанных в CDD.
Требования к владельцу роли COMPANION_DEVICE_APP_STREAMING
CDM назначает роль COMPANION_DEVICE_APP_STREAMING, когда пользователь связывает приложение для потоковой передачи с устройством. Эта роль связана с профилем устройства, поэтому у вас есть возможность контролировать, какие приложения, соответствующие этому профилю, можно добавлять в Google Play. Список требований к роли COMPANION_DEVICE_APP_STREAMING приведен в разделе Роли Android. Чтобы узнать больше, свяжитесь с контактным лицом в Google.
Возможности владельца роли COMPANION_DEVICE_APP_STREAMING
Для стриминга приложений роль COMPANION_DEVICE_APP_STREAMING предполагает, что у приложения, которому назначена эта роль, есть следующие возможности и функции:
- Создавайте подключения к другим устройствам и управляйте ими.
- Создавать и настраивать доверенные виртуальные дисплеи, в том числе разблокированные, можно следующим образом:
- Запускать действия на виртуальном экране.
- Передавать события, происходящие в потоковом сервисе на подключенном устройстве, обратно на локальное устройство, например воспроизводить событие касания на планшете в тех же координатах на телефоне.
- Захват аудиоданных из приложения, которое транслируется.
- Заменять поток данных с микрофона локального устройства потоком данных с микрофона подключенного устройства, когда потоковое приложение использует микрофон.
- Замените видео с камеры локального устройства на видео с камеры подключенного устройства, пока транслируемое приложение использует камеру.
- Управление уведомлениями с локального устройства и их передача на подключенное устройство, а также выполнение действий с уведомлениями.
- Передавать метаданные с локального устройства на подключенное, например список приложений, доступных на локальном устройстве.
- Запросите подтверждение устройства.