Стандарт Miracast — старые протоколы в новой обёртке
Не так давно (начиная с JellyBean 4.2) Google добавила в Android поддержку технологии Miracast.
Практическому исследованию этой технологии методами reverse engineering и посвящена статья.
Что такое Miracast в двух словах? Это очередное детище Wi-Fi альянса — стандарт для передачи мультимедийного контента по сети Wi-Fi в peer-to-peer режиме. Для пользователя это означает прежде всего то, что для соединения с телевизором (к примеру) ему не понадобится Wi-Fi маршрутизатор. Два устройства по задумке альянса должны связываться друг с другом напрямую. Это обеспечивается использованием стандарта Wi-Fi Direct за авторством той же организации. Иными словами, новый стандарт решает задачи очень похожие на AirPlay от Apple, WiDi от Intel, или старое-доброе DLNA.
Зачем было городить огород — спросите вы. Почему было не воспользоваться уже существующим решением? Тут мне будет трудно ответить. Понятно, что лицензировать решения от прямых конкурентов или даже от Intel — не кошерный вариант имеющий к тому же фатальный недостаток, но почему не взять то же DLNA, возможно, чуть доработав рашпилем. Быть может, хотелось чего-то новенького, с модными нонче словами peer-to-peer? Не буду гадать. Так или иначе, технология была реализована в Android, и свежие телефоны типа Nexus 4 и Samsung Galaxy S3 имеют ее на борту.
Хуже обстоит дело с производителями телевизоров. Если поддержка DLNА уже есть практически в каждом современном телевизоре достаточно высокого уровня, то с Miracast дела обстоят хуже. Несмотря на существование чипов, модели телевизоров и проекторов умеющие принимать Miracast можно пересчитать по пальцам. Впрочем, ситуация наверняка изменится в 2014 году, а пока — пользователь может довольствоваться многочисленными гаджетами, принимающими сигнал по Wi-Fi и преобразующими его в HDMI. Такая штука втыкается в HDMI-разъем телевизора, и вот уже у вас есть Miracast-enabled устройство!
Один из инженерных образцов с чипом Broadcom попал в мои цепкие руки:
Убедившись, что с Android-смартфоном все работает на ура, я задумался над вопросом — нельзя ли наладить вещание через Miracast прямо из под Linux? Ведь что такое Android внутри? Тот же Linux…
Для начала, хотелось понять как вообще выглядит стек протоколов Miracast? Что стоит за красивым названием? Гонится ли видео-сигнал напрямую в Ethernet-фреймах или используется IP и еще более высокоуровневые протоколы. К сожалению, сам стандарт, хоть и открытый, но далеко не бесплатный, так что пришлось изыскивать иные, более традиционные пути исследования. В какой-то презентации я ухватил ключевые слова — MPEG-TS и RTSP, и это дало возможность раскрутить клубок дальше. Если я хоть что-то в чем-то смыслю, то RTSP — это TCP, а TCP — это IP. А IP — это подходящий протокол, который можно послушать tcpdump-ом! Сказано-сделано, запустив на Nexus-е tcpdump и включив Wireless display в настройках, через 5 минут я имел дамп пакетов, приемлемый для дальнейшего анализа.
Временно отложив трудности с соединением через Wi-Fi я взялся сразу за анализ TCP-потока. И вот что увидел:
Неправда ли, напоминает обычный RTSP. Итак, часть дела сделана. Остается понять чем отличается Miracast-овская реализация RTSP от стандартной. Для тех, кто никогда не сталкивался с RTSP (Real Time Streaming Protocol) напомню, что он используется для управления мультимедийным потоком с сервера на клиенте. Сиречь — позволяет выдать такие команды как PLAY, PAUSE, TEARDOWN и т.п. Также имеется возможность обменяться опциями и настроить параметры. Именно
Поскольку из анализа фреймов MPEG-TS я понял, что использовалось стандартное разрешение 720×480, и кодек H.264 (AVC), то было неплохой идеей создать видеофайл с ровно такими же параметрами, и тогда поля типа wfd_video_formats можно оставить без изменения! Порывшись в DVD-дисках я перекодировал небольшой VOB из телесериала «Cracker», в нужный мне формат посредством ffmpeg. Теперь оставалось только скормить файл серверу. Но для этого нужно найти сервер!
Чтобы не писать RTSP-сервер самостоятельно (что никак не входило в мои планы) я начал просматривать Open Source варианты, которые было бы легко доработать до состояния совместимого с Miracast. Если вы внимательно смотрели на логи из tcpdump-а, то могли заметить несколько странностей. Традиционная клиент-серверная модель RTSP заменена «peer-to-peer» взаимодействием. Это значит, что активность в запросах может исходить не только от клиента (им в данном случае выступает телевизор или проектор), а и от «сервера» (то бишь телефона или компьютера). Зачем понадобилось так делать — непонятно, но факт остается фактом — и «клиент» и «сервер» могут слать запросы когда им вздумается, что сводит на нет их традиционные роли. Тем не менее, сторону которая шлет видеосигнал я буду продолжать именовать сервером (в нашем случае это Linix-PC), а сторону, принимающую и декодирующую видео — клиентом (в нашем случае — это будет проектор).
Итак, после нескольких часов поисков я остановился на live555. Этот сервер написан на С++, распространяется под лицензией LGPL и поддерживает как RTSP, так и вещание в MPEG-TS. Поглядев на обработчик RTSP я понял, что его вполне реально переработать под peer-to-peer специфику Miracast. Но, оставалось еще заставить клиента (т.е. Мiracast-гаджет) соединяться с Linux!
Эта задача была посложней «Фауста» Гёте. Прежде я никогда не настраивал в Linux-е даже обычный Wi-Fi, справедливо полагая, что провода как-то понадежнее. Что уж говорить про Wi-Fi Direct. Однако, прочитав стопку manual-ов, я понял, что надо рыть в направлении загадочного WPA supplicant. Для чего нужен этот supplicant? Именно он обеспечивает аутентификацию при подключении по Wi-Fi к точке доступа или к другому узлу. Как я уже писал выше, Miracast работает в режиме p2p, т.е. устройства связываются напрямую, минуя маршрутизаторы. Эта возможность, к счастью, поддержана в последних версиях wpa_supplicant. Не знаю точно, с какого момента была добавлена поддержка p2p, но в версии 2.1-devel она уже есть.
Однако, обновить supplicant мало! Надо еще иметь конфигурационные файлы для него. С грехом пополам я написал конфигурацию приемлемую для моего устройства (NetGear, WNA1100 Wireless-N 150 [Atheros AR9271]), возможно, она подойдет и вам.
Итак, в файле /etc/wpa_p2p.conf пишем:
Далее, нужен shell-скрип для запуска supplicant:
Вот вроде и все (уточню, что данная конфигурация работает в Ubuntu-based дистрибутиве Linux Mint 13 Maya, версия ядра — 3.2.0-57-generic).
Дальше нужно овладеть такой утилитой как wpa_cli, именно она позволяет управлять соединением «вручную».
После запуска wpa_supplicant через скрипт, нужно открыть отдельную консоль и выдать что-то вроде:
Это командный интерфейс к supplicant-у. Включив гаджет мы можем командой p2p_find найти все устройства в округе, готовые подключиться к нам в режиме p2p. Далее, используя команду p2p_connect мы производим само подключение.
Вот пример лога для моего устройства:
В принципе, из лога все понятно, кроме разве что загадочного слова ‘pbc’ в команде p2p_connect после адреса устройства. Что же оно значит? Это один из вариантов аутентификации при подключении по Wi-Fi direct. Означает он — Push Button Control. Это упрощенная аутентификация, не требующая от пользователя ввода пароля или даже pin-кода. Просто в момент соединения нужно нажать кнопку на устройстве, и аутентификаця будет считаться успешной.
Итак, из лога мы видим, что соединение успешно произошло. И теперь мы имеем возможность получить IP-адрес для интерфейса wlan0.
DHCP-сервером в данном случае будет выступать телевизор или проектор. Введем в отдельном терминале:
Если после этого запустить tcpdump, то мы обнаружим попытки посылки SYN-пакета на порт 7236. Этот порт отличается от стандартного порта для RTSP (554), но пугать это нас не должно. Самое главное, что гаджет хочет с нами договориться! Запустив уже слегка доработанный livemedia сервер на этом порту (7236) мы получаем возможность отлаживать собственно «клиент-серверное» взаимодействие.
Я не буду утомлять читателя подробностями отладки протокола, скажу лишь, что все проблемы так или иначе были решены. И вот, наконец, результат налицо — я смог смотреть видео со своего PC через новомодный Miracast!
Нужно ли это вам? Не знаю. Во всяком случае, разобраться в новом стандарте всегда интересно (если конечно это не ASN.1).
Для тех, кому было лень вникать в технические подробности тезисно обрисую процедуру соединения для Miracast-based устройств:
Wfa device что это
Как загрузиться с диска CD или флешки (USB HDD, USB Flash Memory Stick)
ПРИМЕРЫ ЗАГРУЗОЧНОГО (BOOT MENU) МЕНЮ:
На фото 1 — чтобы загрузиться с флешки необходимо выбрать пункт Removable Devices
Фото 1:
На фото 2 — чтобы загрузиться с флешки необходимо выбрать пункт USB: USB FLASH DRIVE PMAP
Фото 2:
Разные производители материнских плат и ноутбуков используют разный тип BIOS CMOS Setup Utility, рассмотрим наиболее распространенные варианты.
Старый вариант утилиты для редактирования настроек BIOS
Необходимо выбрать при помощи клавиш стрелки — раздел Advanced BIOS Features и нажать клавишу Enter
Будет следующее:
Другой вариант утилиты для настройки BIOS — на новых материнских платах и ноутбуках
Здесь необходимо выбрать раздел BOOT при помощи стрелок.
Затем установить «CD-ROM Drive» или USB-HDD (Removable Devices) на самую верхнюю строчку, здесь это можно сделать клавишами «+» и «-» на правой части клавиатуры. После чего нажмите клавишу «F10» и подтвердите сохранение параметров клавишей «Enter». Учтите что у вас может быть совершенно другая версия BIOS, но не стоит отчаивается, побродите по всем меню и попробуйте найти что ни будь похожее со словами «Boot» или «First boot device» (1st Boot Device)
Девайс что это такое – чем девайс отличается от гаджета, примеры девайсов
Девайс представляет собой устройство или техническое средство, которое применяется в разных сферах науки и повседневной жизни. Само слово пришло из английского языка, но вот уже несколько лет оно занимает прочные позиции среди русскоязычной аудитории.
Сегодня это понятие активно применяется для обозначения различных технических устройств.
Девайс что это такое
Отвечая на вопрос, что такое device, важно разобраться в сути понятия. Под этим термином понимают техническое обособленное приспособление, которое применяется в повседневной жизни или в научных целях. По сути, это техническое средство представляет собой обособленный прибор, который не зависит от остальных технических средств.
Это слово прочно вошло в обиход русскоязычной аудитории. При этом многие люди воспринимают его как новомодный термин, а потому используют неверно. Употреблять термин «device» уместно в следующих ситуациях:
- Оборудование считается высокотехнологичным. Оно выполняет много полезных функций. Безусловно, обыкновенный будильник нельзя назвать девайсом. Однако электронный будильник с разными сигналами, настройками и FM-радио уже считается девайсом.
- Прибор считается портативным. Он не должен быть слишком большим или тяжелым. Важно, чтобы прибор легко можно было носить с собой или перемещать с места на место. Таким образом для определения автомобиля нельзя применять слово device, тогда как навигатор или автомагнитола вполне подойдет под это определение.
- Важно, чтобы устройство было технически законченным. Это определение применяют для обозначения самостоятельного прибора или механизма, запрограммированного на выполнение конкретных функций.
- Компьютерные комплектующие, такие как видеокарты или материнские платы, не способны функционировать по отдельности. Поэтому их нельзя называть девайсами.
- Приборы оснащены индивидуальными источниками питания – батареями или аккумуляторами. Также они часто подключаются к постоянной электросети.
Почти каждый электронный прибор с микросхемой, который отвечает указанным требованиям, представляет собой девайс . Под это определение подходят разные технические приспособления для кухни или дома.
Также этим термином часто называют современные медицинские устройства. Однако, как правило, это название применяют для обозначения компьютерной техники и электроники.
Происхождение слова девайс
Этот термин происходит от английского слова «device». Оно переводится на русский язык как «устройство». Если употребляется этот термин, стоит сделать вывод, что речь идет о самостоятельном приспособлении, которое функционирует без участия других.
Понятие применяется для обозначения сложных технических устройств, которые применяются для выполнения конкретной задачи или целого спектра. Так, компьютер или смартфон способен выполнять много задач, а роутер – только предоставлять доступ к Интернету.
Где используют девайсы
Для этих приспособлений характерна широкая сфера применения. Они предназначены для выполнения конкретных задач. Таким термином называют самостоятельные устройства, которые не требуется подключать к другим приборам.
Получается, что device – это термин, которым можно обозначать и компьютеры, и ноутбуки, и мобильные устройства. Также его используют для прочих видов электроники, которые люди применяют в повседневной жизни. Иногда под таким термином понимают игровые устройства – в частности, приспособления для геймеров.
В качестве примера стоит привести рули, геймпады, джойстики. Такие приспособления часто применяются и на кухне. Этим термином называют кухонные комбайны, кофемолки, микроволновки, миксеры.
Это вполне допустимо, поскольку подобные приспособления созданы с использованием электроники. Некоторые из них даже оснащены возможностью выхода в Интернет.
Примеры девайсов
Сегодня существует много примеров таких приборов. К наиболее распространенным устройствам из этой категории относятся:
- компьютер;
- ноутбук;
- смартфон;
- игровые приставки;
- планшет.
На этом список возможных девайсов не заканчивается. Если учитывать, что понятие позаимствовано из английского языка, такой термин подойдет даже для обозначения холодильника или любого другого устройства, которое работает самостоятельно. Однако сейчас в России девайсом часто называют электронные приспособления, такие как смартфоны и планшеты.
Отличия девайса от гаджета
Гаджет – это небольшое устройство, предназначенное для облегчения и улучшения человеческой жизни. Этот термин произошел от английского слова «gadget», которое переводится как «штука», «безделушка», «приспособление».
Как видно из названия, слово «гаджет» применяют для обозначения вспомогательного приспособления, которое служит дополнением к чему-то. При этом девайс считается основным прибором, дополнением к которому могут выступать всевозможные гаджеты.
В качестве примера гаджетов стоит привести смарт-браслет , электронный пластырь, флешку. Также к подобным устройствам относят внешний диск, фитнес-браслет и другие аналогичные приспособления. Читайте в нашей статье гаджеты что это такое простыми словами.
Сами по себе такие приборы функционировать не будут. Они полноценно работают исключительно при подключении к основному приспособлению.
Помимо так называемого железа, в мире компьютеров большое значение имеет софт. Вспомогательные программы тоже стоит отнести к гаджетам .
Однако, для того чтобы избежать путаницы, специалисты предпочли ввести для их обозначения новый термин – «виджеты». К ним, в частности, относят виджеты погоды или часов, которые установлены на рабочем столе. При этом различить технические приборы удастся по таким критериям:
- Если устройство выполняет много функций и считается высокотехнологичным, его стоит отнести к девайсам. Если прибор не соответствует указанным критерием, его рекомендуется называть гаджетом.
- Device представляет собой автономное устройство, которое способно работать само по себе. Гаджет, по сути, – это дополнение к девайсу, которое расширяет спектр его возможностей.
- Гаджет не способен функционировать сам по себе. Он реализует свой функционал лишь в случае подключения к какому-либо устройству.
- Обычно в комплектации девайсов присутствует автономный источник питания. Также они часто включают зарядное устройство. При этом у гаджетов нет вариантов подпитки извне.
- Device отличается многозадачностью. Такие приборы содержат в функционале ряд возможностей. К примеру, смартфон применяют не только для звонков, но и для прослушивания музыки и выхода в Интернет.
- Гаджеты часто выполняют одну конкретную функцию, для которой они и были созданы. По тому принципу смартфон с установленной операционной системой Android стоит относить к девайсам, а наушники monster beats считаются гаджетом.
- Device представляет собой законченное устройство. Оно функционирует от электросети или батареи. При этом гаджет не способен работать без подключения к другому приспособлению.
Заключение про девайсы
Девайс – это современное обозначение технических приборов, которые способны существовать обособленно. В этом заключается главное отличие приспособления от гаджета, который не может работать без базового прибора.