Miracast linux как включить

Обновлено: 04.07.2024

Не так давно (начиная с 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 и т.п. Также имеется возможность обменяться опциями и настроить параметры. Именно _PARAMETER и стали основной моей головной болью при анализе. Не имея под рукой стандарта, я не мог знать, что значат все эти wfd_video_formats, wfd_audio_codecs и т.п. Но мог догадываться!

Поскольку из анализа фреймов MPEG-TS я понял, что использовалось стандартное разрешение 720x480, и кодек 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 устройств:

indeviral avatar

wds
У меня получилось довольно неплохо запустить 1080p(lg webos 3) с рабочим wifi через intel wds. (tl-wr1043nd 173mbit/s) + (QCA9377)
Это оказалось совсем элементарно, всего то надо было использовать vaapi и h264(с 265 фокус не удался)
К сожалению со звуком(pulse) пока полный писец((

dlna
Так же очень недурно работает dlnacast,dlnanow но в них не работает управление.

indeviral avatar

amon
Что-то получилось? вывести по wifi экран archlinux возможно?
Да, у меня получилось через wds работает, в покадровом режиме((
Там довольно тонко надо было настраивать ffmpeg, мне было лениво.
через miraclecast не получается если честно я так и не понял как именно оно должно работать(
Интересно что в windows/android вроде как никакого p2p соединения не устанавливается. И всё работает чётко без кавыряний пальцем.
p.s. ну вообщем тепичный заговор корпораций.
indeviral
windows/android вроде как никакого p2p соединения не устанавливается. И всё работает
уменя не запустилось:
винда 10 - приставка андроид (монитор по hdmi)
винда андроид видит, но подключиться не хочет, а телефон - приставка подключается моментально

indeviral avatar

wds
У меня получилось довольно неплохо запустить 1080p(lg webos 3) с рабочим wifi через intel wds. (tl-wr1043nd 173mbit/s) + (QCA9377)
Это оказалось совсем элементарно, всего то надо было использовать vaapi и h264(с 265 фокус не удался)
К сожалению со звуком(pulse) пока полный писец((

dlna
Так же очень недурно работает dlnacast,dlnanow но в них не работает управление.

Название окна терминала можно изменить, изменив значение переменной $PS1 - строки первичной подсказки. [1] [2]. Мы могли бы объединить это решение с идеей использования команды history из ответа Десерта.

Подход 1: автоматически обновить значение $PS1. (Обновить)

Добавьте следующие строки в конец файла

/.bashrc или просто откройте новый терминал и используйте функцию в этом путь:

Выполнить rtitle, чтобы автоматически начинать изменять заголовок окна терминала, основываясь на последней выполненной команде. Выполните rtitle еще раз, чтобы вернуться к поведению по умолчанию.

Подход 1: автоматически обновить значение $PS1. (начальный ответ)

Добавить следующие строки в внизу файла

/.bashrc или просто откройте новый терминал и используйте функцию следующим образом:

Выполнить rtitle для автоматического изменения названия окна терминала на основе последней выполненной команды. set-title без аргумента изменит заголовок окна терминала на предыдущую команду.

Ссылки и примеры:

set-title без аргумента изменит заголовок окна терминала на предыдущую команду. [d13 ] Выполните rtitle еще раз, чтобы вернуться к поведению по умолчанию. Пример 1; Пример 2

OpenWFD мертва и теперь вытеснена MiracleCast:

MiracleCast - это реализация технологии Miracast с открытым исходным кодом (также: Wifi-Display (WFD)). Она основана на исследовательском проекте OpenWFD и выйдет за его рамки. Мы ориентируемся на правильную и тесную интеграцию в существующие Linux-Desktop-системы, по сравнению с OpenWFD, которая предназначалась в качестве площадки для быстрого прототипирования.

Несмотря на свое название и происхождение, сам проект не ограничивается Miracast. Мы можем поддерживать любой вид отображения-потока с минимальным объемом дополнительной работы. Тем не менее, Miracast останется основной целью разработки благодаря своему уровню осведомленности

Он все еще находится на ранней стадии своего цикла разработки. В настоящее время он, кажется, может делать компоновку, но не будет делать реального видеопотока.

Демонстрация OpenWFD на FOSDEM 2014 также делала стриминговый бит, но как я понимаю MiracleCast - это проект , делай это правильно , в то время как код, который он показывал на FOSDEM "наверное, будет работать только на этой машине".

Как вывести изображение на большой экран через Miracast

Miracast или MiraScreen – это технология, позволяющая вывести изображение с одного устройства на другое. Например, с телефона на телевизор или монитор компьютера. Также можно одновременно отображать картинку на нескольких устройствах, которые поддерживают эту функцию. Почти все устройства, выпущенные после 2012-го (год выпуска Miracast), имеют доступ к этой технологии.

Преимущества Miracast

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

Хоть почти у всех сейчас есть Wi-Fi сеть, но нельзя не отметить тот факт, что для соединения через Miracast даже она не нужна. Таким образом, нагрузка на модем снижается до минимума, а это значит, что никаких проседаний, заиканий картинки и прочих проблем при подключении у вас не будет. И приятным бонусом является то, что в такую сеть не сможет вмешаться никто посторонний, так как гаджеты подключаются напрямую друг к другу, исключая возможность присоединения сторонних устройств, если вы, конечно, сами не захотите вывести сигнал на еще один девайс.

Также Miracast имеет следующие немаловажные преимущества:

  • Высокая скорость работы. Проблемы в этой области наиболее сильно ощущаются в играх, когда изображение подтормаживает и создает дискомфорт. С MiraScreen у вас таких неприятностей не будет.
  • Возможность сжатия информации для более быстрой передачи.
  • Полноценная поддержка 3D.
  • Простой интерфейс, удобное управление.
  • Широкий спектр устройств, поддерживающих данную технологию.

Недостатки

Из недостатков Miracast можно выделить разве что качество изображение, ограниченное 1920х1200 точек. Это, безусловно, отличная картинка, но если вы захотите передать файл в 4K, то получите лишь FHD. Однако, такого контента сейчас крайне мало, поэтому вряд ли для большинства пользователей это станет проблемой.

Как узнать, поддерживает ли устройство Miracast

MiraScreen встраивается по умолчанию в большинство компьютеров и ноутбуков на Windows, телевизоров Smart TV, а также мобильных устройств с iOS и Android. Каждый случай индивидуален, и лучше всего будет поискать в интернете информацию о том, поддерживает ли ваш девайс Miracast. Но есть еще один способ, как сделать это вручную. Сейчас я дам вам инструкции о том, как это сделать на каждой платформе.

Большая часть гаджетов, имеющих операционную систему Android 4.2 и выше поддерживают Miracast. Для того, чтобы проверить, откройте раздел «Экран» (может быть и в другом в зависимости от прошивки) и найдите там раздел «Беспроводной монитор».

Поддержка Miracast Android

Поддержка Miracast Android

Если вы пользуетесь мобильным устройством от компании Apple, можете не волноваться в поддержке MiraScreen. На iOS эта функция называется AirPlay, и она имеется во всех современных моделях.

Поддержка Miracast IOS

Поддержка Miracast IOS

Здесь сложнее, так как почти каждая марка телевизора кардинально отличается от другой в сравнении с тем же Android, где на разных прошивках настройки выглядят примерно одинаково. Вам нужно найти раздел Miracast или MiraScreen в параметрах. Скорее всего это будет на вкладке, связанной с интернетом или Wi-Fi.

В настройках телевизора должен быть раздел Miracast

В настройках телевизора должен быть раздел Miracast

Если в настройках такого пункта нет, значит телевизор сам по себе технологию не поддерживает, но вы все еще можете ею воспользоваться, если купите специальный Miracast-приемник, который подключается к телевизору через кабель.

Miracast-приемник

Miracast-приемник

В Windows 10 проверить можно прямо в поиске:

  • Нажмите сочетание клавиш Win+S или кликните по значку поиска на панели задач.
  • Здесь вводите Miracast или Параметры проецирования.
  • Открыв раздел, который появится в результатах поиска, вы сразу же увидите, поддерживает ли ваш компьютер или ноутбук данную технологию.

Если поддержки нет, но очень надо, вспомните про специальный приемник, описанный мною в пункте про телевизор чуть выше. ПК также может с ним работать.

Даже не пытайтесь. Win7 в Miracast не умеет – понадобится как минимум восьмерка, но лучше, конечно же, десятка.

Настройка Miracast на различных устройствах

Допустим, ваше устройство может работать с данной технологией, или вы уже купили приемник, что дальше? Как настроить работу Miracast? Легко. Опять же распишу инструкцию для каждого устройства отдельно.

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

Настройка Miracast на телевизоре

Настройка Miracast на телевизоре

Если вы хотите вывести изображение с компьютера/ноутбука на телевизор через Miracast, вам нужно подключится к его сети:

  • Откройте «Параметры».
  • Зайдите в раздел «Устройства» - «Подключенные».
  • Щелкните на «Добавить устройство».
  • Когда ПК обнаружит все ближайшие девасы, выберите свой телевизор или Miracast-приемник, который к нему подключен.
  • Готово.

Если после подключения картинка на телевизоре все еще отсутствует, настраивайте вручную:

Что делать, если с Miracast возникают проблемы

Система не идеальна, и с Miracast могут возникнуть некоторые проблемы. Обычно это связано с неисправностью самого устройства или нехваткой драйверов. В первом случае поможет лишь замена или починка, а во втором – обновление тех самых драйверов – неожиданно, правда?

Если вы используете приемник и уверены, что с ним все в порядке, скачайте драйвера. Зайдите на официальный сайт производителя этого устройства и загрузите оттуда нужное ПО, подходящее для вашей системы.

Далее зайдите в «Диспетчер устройств», кликните по Miracast ПКМ, нажмите «Свойства». Выберите пункт «Обновить драйверы». Далее указывайте путь к файлу, который вы только что скачали. После этого перезагрузите компьютер и попробуйте подключиться снова.

Открываем диспетчер устройств

Открываем диспетчер устройств

Устанавливаем последнюю версию драйверов Miracast

Устанавливаем последнюю версию драйверов Miracast

В телевизоре тоже нужно проверить актуальность версии MiraScreen. Если в соответствующем разделе есть кнопка «Обновить», нажмите ее. Только не забудьте подключить устройство к интернету.

Читайте также: