Компания
312,64
рейтинг
3 октября 2013 в 09:37

Разработка → Беспроводной дисплей для Android


В начале 2013 года в новостной ленте блога Intel мы сообщили о новой версии технологии WiDi, которая, в том числе, получила совместимость с родственным стандартом Miracast. Тогда эта информация прошла незамеченной, и на наш взгляд, весьма напрасно, поскольку картина в области беспроводных дисплеев кардинально изменилась. И одно из изменений — появление Miracast на Android. Давайте попробуем разобраться, как соотносятся друг с другом Miracast и WiDi, каким функционалом на пару обладают и как создавать приложения под Android с их использованием.

Многообразие функций и возможностей

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


Общая коцепция Miracast

Miracast представляет собой технологию передачи мультимедийной информации (аудио и видео) посредством WiFi. В качестве транспорта в нем используется стандарт WiFi Direct, позволяющий двум устройствам обмениваться данными друг с другом без помощи дополнительной сетевой инфраструктуры. Попросту говоря, Miracast можно представить, как беспроводной HDMI.
Miracast еще довольно молод: официальная сертификация Miracast устройств альянсом WiFi Alliance началась чуть более года назад. Для передачи видео используется кодек Н.264, звук может быть двух- или пятиканальным. Miracast является открытым стандартом, не принадлежащим какой-либо компании; его привлекательность еще более повысилась после того, как в прошлом году его поддержка была добавлена в ОС Android 4.2. Замечу сразу, что в Android 4.2 на конкретном устройстве не гарантируется наличие Miracast – это надо выяснять дополнительно. Полный список сертифицированных устройств- как передатчиков, так и приемников можно посмотреть на сайте WiFi Alliance.


Архитектура Miracast (со стороны передатчика)

Совместимость Miracast и WiDi версии 3.5 означает общность базового функционала в устройствах обоих стандартов. Какие дополнительные плюшки есть в WiDi, но отсутствуют в Miracast? На сей день их три:
  • обязательная поддержка HD видео вплоть до 1080p (хотя стандарт Miracast допускает высокое разрешение, но не обязывает все устройства поддерживать его);
  • поддержка системы защиты контента HDCP (High-bandwidth Digital Content Protection);
  • наличие двух дополнительных видео режимов – расширенного и многозадачного (о них чуть позже).

Таким образом, можно сказать, что WiDi в настоящее время является функциональным продолжением Miracast.
WiDi поддерживается большинством существующих мобильных платформ Intel (и наверняка будет поддерживаться последующими). Как уже отмечалось в тестировании, технология относится к разряду «однокнопочных», то есть предельно простых для пользователей.


Процесс подключения беспроводного дисплея на примере Samsung Galaxy S4

Ну а теперь пришло время поговорить о режимах. Нативным для WiDi/Miracast является Режим Клонирования – на удаленном дисплее отображается та же картинка, что и на локальном, с тем же разрешением.
Двойной режим также относится к основным; в нем на удаленном дисплее проигрывается контент, а основной служит для управления и вывода служебной информации. Данный режим поддерживается через Android Presentation API.
Расширенный режим имеется только в WiDi (и, соответственно, доступен только для устройств на платформе Intel Atom). В нем видео режим включается автоматически, когда пользователь запускает мультимедийный контент на плеере, использующим Android Media Player framework. Разрешение картинки остается «родным» вплоть до 1080р. При этом локальный рендеринг видео может отключаться для сокращения энергопотребления.
Наконец, самый продвинутый – Многозадачный Режим, при котором видео плеер посылает изображение на удаленный дисплей, а на локальном в это время пользователь делает, что хочет: просматривает интернет, принимает звонки или даже смотрит совсем другое видео, тоже в FullHD разрешении!

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


Режим двух дисплеев подходит не только для просмотра видео. Совершенно несложно набросать список жизненных его применений:
  • просмотр интернет на большом экране (смартфон выступает в роли тачпада);
  • заполнение форм или набор небольших текстов (смартфон – сенсорная клавиатура);
  • игры (смартфон – сенсорный геймпад/джойстик);
  • мобильное рабочее место (смарфтон – компьютер, к нему по Bluetooth подключена периферия).




Создаем Android приложение для двух дисплеев

Поддержка второго беспроводного дисплея в Android 4.2 (API Level 17) реализована с помощью с помощью класса Presentation, позволяющего:
  • внедрить поддержку второго дисплея в приложения, не заботясь о способе, которым он будет физически подключен;
  • работать с MHL, HDMI, Slimport или Miracast совместимыми устройствами;
  • осуществлять управление вторым дисплеем независимо от первого.

Presentation является базовым классом и должен быть расширен:
public class DemoPresentation extendsPresentation {

Также необходима ассоциация с классом Display при создании. Presentation наследуется от Dialog, а что касается Dialog, то его жизненный цикл привязан к Activity.
Перед тем, как задействовать Presentation, вам необходимо выбрать дисплей, что может быть сделано двумя способами:
1. MediaRouter API (в API 16) – система сама выберет лучший дисплей за вас
// Get the media router service.
MediaRouter mMediaRouter = (MediaRouter)getSystemService(Context.MEDIA_ROUTER_SERVICE);
// Use the MediaRouter that supports live video
MediaRouter.RouteInfomRouteInfo =mMediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);
Display presentationDisplay= mRouteInfo.getPresentationDisplay();

2. Display Manager API (в API 17) – перечень дисплеев.
// Get the display manger service.
DisplayManager mDisplayManager = (DisplayManger)getSystemService(Context.DISPLAY_SERVICE);
// enumerate the displays
Display[] displays =mDisplayManager.getDisplays(DisplayManger.DISPLAY_CATEGORY_PRESENTATION);

Добавление MediaRouteButton в приложение:
//Sets Media Route Button to second screen mode
mediaRouteActionProvider.setRouteTypes(MediaRouter.ROUTE_TYPE_LIVE_VIDEO); //Launches the Wireless display setting intent
startActivity(newIntent
("android.settings.WIFI_DISPLAY_SETTINGS"));

В res/menu/default.xml:
<item 
android:title="Media Route Settings" 
android:actionProviderClass="android.app.MediaRouteActionProvider"
android:showAsAction="always" />

Как заставить Presentation API работать:


Далее, используя MediaRouter.addCallback, необходимо мониторить:
  • onRouteUnselected
  • onRouteSelected
  • onRoutePresentationDisplayChanged

А внутри активности, которая владеет Presentation:
  • onResume
  • onPause

API для управления WiFi дисплеями присутствуют внутри Android AOSP, но не являются частью Android framework. Параметры беспроводного дисплея могут быть вызваны через Intent android.settings.WIFI_DISPLAY_SETTINGS, но и он также не входит во фреймворк. Некоторые производители используют другие варианты: Samsung – com.samsung.wfd.LAUNCH_WFD_PICKER_DLG, HTC – com.htc.wifidisplay.CONFIGURE_MODE_NORMAL.
Все API, приведенные на рисунке ниже, являются внутренними для Android 4.2/4.3. Они являются частью AOSP и распространяются свободно, однако не входят во фреймворки и работать не обязаны.


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



При подготовке поста использовались материалы IDF 2013, авторы — Xavier Hallade и Costas Stylianou.
Автор: @saul
Intel
рейтинг 312,64

Комментарии (33)

  • +7
    Круто! Теперь у меня есть беспроводной джойстик для денди за 20килорублей!

    А вообще технология как таковая не сильно впечатляет: технологии беспроводной передачи хорошо развиты, работа с N дисплеями тоже. Оставалось дождаться когда железу смартфонов хватит мощи, чтобы выводить FullHD виде на второстепенный дисплей.
    • +6
      Так уже могут.
      • +1
        Я именно это и имел ввиду, говоря «оставалось» в прошедшем времени.
    • 0
      В смартах Sony, насколько я знаю, реализовано. Да и просто через DLNA сервер со смарта на TV по WiFi
  • +1
    А скажите, какова реальная задержка сигнала?
    • 0
      При использовании Miracast с Nexus 4 на телевизора LG 42LA741V, задержка будет меньше секунды. Точнее сказать не могу. Глаза замечают задержку. Также, я полагаю, много будет зависеть от WiFi роутера и загруженности сети.
      • 0
        Понятно, спасибо. Меньше секунды — это очень много, подождем )
      • 0
        До 100 мс по стандарту.
        А WiFi-роутер в передаче не используется. Приемник и передатчик соединяются напрямую по WiFi peer-to-peer.
  • 0
    Игры в HD-качестве в смартфоне с проецированием на телевизор и смартфон в качестве джойстика. Это наиболее достоверное будущее технологии
    • 0
      Игроманов на порядок меньше чем тех, кто хочет смотреть видео на большом экране. Поэтому смартфон как плеер с проецированием на ТВ достовернее.
    • 0
      Уже ж есть такого типа гонки для iOS:
      На экране телефона контролы, а сама игра по AirPlay на телек транслируется.
      Честно говоря, учитывая задержки при кодировании-декодировании потока делают это неиграбельным.
      • 0
        Задержки, при наличии быстрого WiFi, не ощутимы. Помимо гонок есть уже достаточно много игр, поддерживающих данную технологию, не говоря уже про игру с нескольких устройств на 1 экране
        Говорю как пользователь AirPlay.
  • +12
    Для передачи видео используется кодек Н.264
    Miracast является открытым стандартом
    Для передачи видео используется кодек Н.264
    Miracast является открытым стандартом
    Для передачи видео используется кодек Н.264
    Miracast является открытым стандартом
    [Staredad]

    Однако кодек H.264 запатентован ведь до 2027 года? Как же тогда стандарт, на нём основанный, может считаться открытым?
    • +2
      Wiki говорит, что An open standard is a standard that is publicly available and has various rights to use associated with it, and may also have various properties of how it was designed (e.g. open process). There is no single definition and interpretations vary with usage.

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

      Но вдаваться в юридические детали дальше не буду, я не юрист ни разу.
  • 0
    WiDi? Такая технология есть уже лет 10 и лет 5 я ее использую. Скоращенно от Wireless MIDI. Даже запатентовано компанией CME, кажется.
  • 0
    Интересно, а наоборот есть технологии?
  • –1
    И чем эти все WiDi, Miracast и тот же WiHD отличаются от DLNA, которому сто лет в обед?
    • +1
      Да это понятно:

      DLNA — это когда устройство берет где-то на сервере сжатый файл и воспроизводит у себя.

      WiDi и проч — это когда я втыкаю в HDMI-выход ноута/плейера/консоли передатчик, а в телек вытыкаю приемник и вижу на ТВ картинку хоть десктопа, хоть игры, хоть фильма.

      Меня больше расстраивает, что весь этот беспроводный HDMI пока слишком дорог…
      • 0
        А насколько я понял, Интел благодаря фишке Quick....(как-то там быстро кодирую видео в своем интел-процессоре) просто-напросто передает тот же самый поток, что передавался бы при DLNA.
        Это если ноутбук WiDi. Да и еще привязка к интеловскому WiFi-адаптеру наличествует.

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

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

        Предсказываю наличие лагов от «чуть-чуть» до «нужеблиндавай». Поэтому интерактив будет условным. Отказываемся от трансляции экрана и получаем эквивалент DLNA.

        Вывод: очередная маркетинговая мишура.
        Буду рад, если я ошибаюсь и лаги будут не значительными.
        Но думается еще лет 5-10 все пользователи будут страдать от лагов, пока техника не подтянется. А там ведь уже 4к на горизонте.
  • 0
    Спасибо, очень интересно. Только вот здесь непонятно:

    Какие дополнительные плюшки есть в WiDi, но отсутствуют в Miracast? На сей день их три:

    •поддержка системы защиты контента HDCP (High-bandwidth Digital Content Protection);


    А на картинке с подписью «Архитектура Miracast (со стороны передатчика)» показана поддержка HDCP.
    Может, имеется в виду, что для Miracast она необязательна?
    • –1
      Если внимательно посмотреть на картинку, то там после HDCP написано (opt) те optional. То есть, вы сами и ответили на вопрос
      • +1
        Позвольте с вами не согласиться, если открыть «Wi-Fi Display Technical Specification v1.0.0», то на странице 8 будет диаграмма, на которой нет надписи opt. Но это не важно.
        Не знаю, какой смысл внесли в это «opt» оригинальные авторы доклада, но согласно все того же документа, Source (эмитент WFD потока, в терминологии WFD), может пренебречь HDCP только в случае если воспроизводимый контент не защищен DRM. В противном случае он должен оборвать сессию посылкой TearDown.
        Таким образом, по простому, если вы скачали фильм с торрента или это ваше «хом муви» то да, HDCP будет «opt».
        • 0
          Спасибо, я обязательно свяжусь с авторами доклада и попробую прояснить ситуацию. Думаю, это и им будет полезно.
  • +1
    Несколько уточнений и поправок:

    Какие дополнительные плюшки есть в WiDi, но отсутствуют в Miracast? На сей день их три:
    — обязательная поддержка HD видео вплоть до 1080p


    Это не так, обязательна поддержка 720p

    поддержка системы защиты контента HDCP (High-bandwidth Digital Content Protection);


    Это не совсем так. Miracast, как и WiDi, поддерживает HDCP 2.0/2.1.

    Ну и соответсвенно вывод совсем неверен — WiDi не является функциональным продолжением Miracast, как вы сказали. Miracast это спецификация, разработанная Wi-Fi Alliance. WiDi — проприетарная технология, (в хорошем смысле этого слова) технология, вероятно совместимая с упомянутой спецификацией.
    • +1
      Добавлю к вашему комментарию, HDCP является обязательным условием для прохождения сертификации.
  • 0
    Дима, там внизу поста специально приведен источник информации. Если ты считаешь, что она не верна, напиши им. они отличные люди и с удовольствием тебя переубедят :) или ты их- как получится.
  • 0
    Мне нравится сам Карузо, а не то как его Рабинович напел. К тому же я сам вел этот WiDi стенд на IDF :)
    При подготовке поста неплохо бы сверяться с официальной документацией ;)
    • 0
      А поделись ссылкой на документацию? я ее найти не смогла. Если окажется, что презентация на IDF противоречит ей, то это надо срочно поправить (не документацию, конечно :) )
      • 0
        Все, что скопировано с презентации — ок. Проблемы там, где автор писал от себя.
      • 0
        Вот вам «спеки» по WFD: www.wi-fi.org/knowledge-center/published-specifications
        • 0
          Это я видела, но, во-первых, они небесплатны, а во-вторых, меня интересуют не они, а именно Intel WiDi :)
  • 0
    эта информация прошла незамеченной, и на наш взгляд, весьма напрасно

    У меня материнаская плата на чипсете поддерживающем WiDi (z77), процессор поддерживающий WiDi, WiFi адаптер поддерживающи WiDi (Centrino). Но использовать его я не могу потому-что какой-то маркетолог решил, что технология должна быть «pre-enabled» производитем материнской платы.
    Печально, что функциональность заложенная в железе за которые пользователь уже заплатил включаются галочкой в тайных регистрах биоса. :(
  • 0
    У меня есть hdmi-свисток с андроидом (MK802iii). Могу я сримить видео с компьютера или телефона на этот свисток, то есть посмотреть мультик не в телефоне, а на большом экране? И если да, то как это сделать

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

Самое читаемое Разработка