Медиацентр своими руками


Всем привет. Эта не последняя статья о моем аудиоплеере. Время разработки составило четыре года, и мне кажется, что это не конец, я его не закончу никогда. Все равно будут модернизации, обновления ПО и прочее. Кто знает, может, и вторая версия.
Плеер одномодульный, с пассивным, естественным охлаждением. На борту мини-компьютер, жесткий диск, дисплей, цап, регулятор громкости, встроенный усилитель мощности 2×45 Вт. Доступ к аудио-данным на жестком диске организован по сети с помощью Samba-сервера, никаких USB для флешек. Для настройки машины — SSH сервер, собственный клиент под Android для удаленного управления со смартфона.

Поддержтваемые форматы аудио

flac (Free Lossless Audio Codec)
wav (PCM)
m4a (Apple Lossless Audio Codec)
ape (Monkey’s Audio) (44K/16b)
ogg (vorbis)
mp3 (mpeg layer-3)
aac (Advanced Audio Coding)
ac3 (Audio Codec 3)
wv (WavPack)
wma (Windows Media Audio)
mpc (MusePack SV8)
cue (Плейлисты типа Cue Sheet)

Структурная схема плеера

Рис. 2. Структурная схема аудиоплеера.
Зеленым цветом на структурной схеме я отметил части которые были рассмотрены ранее. Из нерассмотренных — видеоадаптер с дисплеями и подключение Raspberry Pi к устройствам. К сожалению, у малинки нет SATA портов, поэтому жесткий диск подключен через переходник USB ->SATA.
Скорость загрузки файлов в аудиоплеер по сети при этом составила в среднем 8 МБайт/c. Это, как запись на флешку. Чтобы иногда закинуть новый альбом — вполне хватает, а само наличие переходника — конечно, не красит устройство.
Клавиатура плеера — обычные кнопки, подключенные к GPIO малинки. SPI интерфейс регулятора громкости — программный, видеоадаптера — аппаратный.

Видеоадаптер

Сейчас для миникомпьютеров полно полноценных HDMI дисплеев, маленьких, компактных. Но, когда я начинал этот проект, в Китае были только SPI дисплеи, на которых можно было получить максимум 3 кадра в секунду. Для отображения статической информации, как у меня, пожалуй сойдет, но для этого надо было бы устанавливать одну из графических надстроек Линукса, а это лишняя нагрузка на Raspbyrry Pi, который и без нее не шустрый.
И я подумал, что нужно сделать отдельное устройство, которое будет заниматься графикой. Да какой там графикой, напечатать десяток строк текста и пару иконок. А что, в этом случае можно и два дисплея прикрутить, что я и сделал. Корпус — широкий, надо было чем-то занять пространство, чтоб и красиво было и ничего лишнего. Под руку попался китайский дисплей 400×240 точек на контроллере ILI9327 и еще маленький 320 на 240 точек (ILI9328).
Вообще, потом, когда я написал клиент под Андроид, я понял, что дисплеи в принципе необязательны и смотреть я на них практически перестал. Падаешь на диван — запускаешь клиент на телефоне и все, слушаешь музыку.

Рис. 3. Снимок экрана аудиоплеера.
Малинка отсылает по SPI таблицу данных, фиксированного размера, с текстом (cp1251), который надо отобразить на дисплеях. А задача видеоадаптера — все напечатать на дисплее, вот и весь принцип. Шрифт и иконки находятся в памяти микроконтроллера, в таблице — только номера иконок. Шрифт консольный 10×18 из Windows, немножко скорректированный к 8×16 пикселей.

Список с курсором прорисовывается за 55. 5 ms, вся информация — за 65,4 ms. Что касается списка, 50 ms — на мой взгляд, это минимум, при котором процесс смены текста еле заметен. Кадры меняются не постоянно, а по требованию, например, сместил курсор вниз или начал воспроизводиться другой файл. Но и не реже одного раза в секунду, так как надо отсылать время воспроизведения.
При передаче никакого протокола нет, таблицы просто идут одна за другой. По сигналу CS chip select интерфейса SPI, после завершения передачи таблицы данных, происходит дополнительная синхронизация кадра, то есть, если даже произойдет какой-то сбой при передаче данных, то на следующем кадре таблица будет принята корректно.

Рис. 4. Схема видеоадаптера.

Рис. 5. Платы видеоадаптера.
Печатная плата изначально разрабатывалась как тестовая, на скорую руку, а потом я решил, что она очень даже ничего и оставил ее. Дисплей на отдельной плате, а можно было все разместить на одной. И второй дисплей тоже. Два стабилизатора, даже не помню почему я поставил их два.

Рис. 6. Видеоадаптер в корпусе.

Схема плеера


Рис. 7. Электрическая схема плеера.
Все платы установлены на алюминиевом основании 3 мм (см. рис. 8). Корпус пластмассового плеера видеомагнитофона был неровный, со всякими выступами и арматурами, алюминиевый фундамент позволил устанавливать платы любым образом, обеспечить удобное заземление некоторых узлов. По поводу заземления: платы аналогового тракта соединены с землей только в регуляторе громкости и ЦАП-е, фактически через цифровую землю i2s шины и SPI шины у регулятора громкости, которые далее на разъем малинки и соединяются с землей через крепежные отверстия Raspbery PI.
Железо силового трансформатора для усилителя мощности также заземлено. В усилителе мощности конструктивно заземлены только радиаторы (прикручены к фундаменту), которые за счет диэлектрика не контактируют с микросхемами усилителя. Общий провод акустических систем подключается непосредственно к блоку питания, а не к плате усилителя мощности.
Пятивольтовый блок питания заземлен с обеих сторон через крепежные отверстия, важно подключение Y- конденсаторов импульсного блока питания к земле. Жесткий диск запитан не по шнурку USB, а отдельными проводами.
У Raspbery очень нежные GPIO поэтому резисторы R1-R6 у клавиатуры исключают вариант замыкания на землю пина, при теоретически возможной, неправильной его конфигурации, вместо входа на выход. Я старался на каждый GPIO повесить по резистору, на всякий случай. Почти все провода идут под фундаментом — красота правда?

Рис. 8. Под капотом.

Программное обеспечение

Mplayer

Писать свой плеер полностью смысла не вижу, врят ли он получится лучше чем существующие. Поэтому, в качестве инструмента воспроизведения выступает mplayer — не путать с Mplayer2. Если у вас установлен mplayer, то скорее всего это mplayer2.
На мой взгляд, этот плеер лучшее что есть под Линукс. Он консольный, существуют даже версии для Windows. Собственно ОС Линукс — это консольная операционная система по своей природе. Графических оболочек — надстроек над mplayer очень много, но видео мы смотреть не будем. Нас интересует аудио.

В плане аудио у него тоже все в порядке: можно менять выходной формат аудиоданных для разных ЦАП, передискретизация, размер данных сэмпла, разные фильтры. Корректно работает с ALSA и не только. А главное выдает информацию о текущем режиме и мы знаем, что в действительности попадает на наш ЦАП. Эквалайзер тоже есть. Читает любые кодеки, так как в него входит исходный код библиотеки ffmpeg полностью. Именно поэтому, сборка из исходников занимает приличное время.
Признаться, все же руку я к нему тоже приложил. Когда пришло время сделать поддержку CUE-файлов в своем ПО, я заметил, что позиционирование именно в flac файлах работает некорректно. Плеер писал ошибку и немного мазал мимо, от 5 до 10 секунд. Это была катастрофа.
Начал разбираться, нашел версию под windows, которая работала исправно. Затем нашел исходный код именно этой версии. Сравнив исходные коды библиотеки ffmpeg (часть которая отвечает за flac), понял, что придется пересобрать плеер с последней версией ffmpeg. С последней — не получилось, но получилось — с не самой последней. И то, не на ARM, а на обычном ПК. Но все равно, радовался я как ребенок. Запустил сборку на raspberry.
Собирал я день, ночь, просыпаюсь — ошибка сегментации в компиляторе. Компилятор лег. Что делать? Думаю, может, проблема в малинке? Запускаю сборку на Allwinner A20, на нем у меня торрент качалка и DLNA. Собирает быстрее, но та же проблема, компилятор падает и пишет, что в какой-то там функции произошел сбой при компиляции.
Исходный код исправный, так как успешно компилится под x86. Смотрю код и понимаю, что это зловещая функция отвечает за какой-то видеокодек. Долго не думая, вытираю в ней все и return 0. Видео мы им смотреть точно не будем. Еще таких пару функций и полдня компиляции и вот он, заветный бинарник, который корректно позиционирует в формате flac. Запускаем . . . ммм! Звучать стало лучше, точно лучше. А может, самовнушение. Переутомился я.

Мой Аudio Сommander

Мое основное ПО — это тоже надстройка над mplayer. Только не совсем графическая. Я назвал его Audio Commander, имя, как потом оказалось, уже занято — ну да и фиг с ним.
Мой Audio Commander управляет всем плеером: клавиатура, регулятор громкости, и обработка команд от клиента реализована в основном потоке (функция main). Основной функционал- это открывать папки и запускать mplayer для воспроизведения. При запуске mplayer в нашем распоряжении его стандартные потоки ввода-вывода.
В stdout mplayer любезно предоставляет всю необходимую информацию: частота дискретизации файла, разрядность, битрейт, также выходной формат, который идет в ALSA. Он естественно сответствует формату на шине i2S и является входным для нашего ЦАП.
В stdin отправляются команды управления для mplayer-а, например, pause, seek. Данные из stdout попадают в текстовый парсер, результат которого далее идет на дисплей и по сети клиенту (время воспроизведения напимер). Парсер stdout мплеера, парсер CUE-файлов, парсер файла настроек, парсер команд от клиента, все они сгенерированы замечательной связкой — flex и bison, что сэкономила кучу времени при написании кода.
Audio Commander у меня находится в папке /programs/ac там же, файл настроек ac_settings. conf и папка logs. Папка logs по факту в RAMFS в ней файл stderr. log в него пишется всякая информация в процессе работы программы.
Исходный код Audio Commander — это проект в netbeans IDE. Для компиляции надо подключится к удаленному узлу 192. 168. 0. 83, то есть, к аудиоплееру, пользователь root, пароль pi (SSH). Адрес аудиоплеера в сети я задал статически. После компиляции результат можно найти в /root/.nebeans, эта папка тоже в RAMFS. Поэтому, до перезагрузки свежескомпилированный бинарник надо скопировать в /programs/ac.

Операционная система

ОС raspbian (debian) с ядром реального времени. Есть от него прок или нет, не знаю, но говорят, что круто, для всяких серьезных систем. Для более быстрой загрузки ОС лучше применить хорошую SD карту, объемом не менее 1 Gb.
Жесткий диск плеера должен быть отформатирован в EXT4, монтируется в /mnt/sound. Но это не обязательно, в файле настроек плеера ac_settings. conf, можно поменять путь к музыкальному каталогу.

Эксплуатация. Клиент С83

Плеер представляет собой плеер по папкам. Слушаю музыку обычно я в режиме альбома, или подборки лучших композиций какой-то конкретной группы. Следовательно, вся музыка у меня структурирована по папкам: буква алфавита/группа/альбом.
Например Eng/P/Papa Roach/02. Time for Annihilation/ Следовательно, список воспроизведения строится из открытой папки. Также существует возможность открывать папку с вложенными подпапками, из всех каталогов формируется один единственный список воспроизведения. CUE-файлы представляются также в виде папок. А одноименные файлы-образы в списке не отображаются, чтобы не смущать обычного пользователя.
Рис. 9. Отображение CUE-файлов (Клиент C83).
а) Папка, содержащая CUE-файлы. б) Папка в файловом менеджере. в) Открытый CUE-файл, файл образа к которому не был найден. г) Открытый CUE-файл.
Пока поддерживаются только классические простые CUE-файлы. При открытии папок с подпапками, CUE-файлы которые попадутся на пути, также будут открыты.
Клиент написал для Android, для Windows хотел, но потом передумал.
Это мое первое приложение для ОС Android, но не первое в среде Embarcadero RAD Studio (С++ Builder). Почему? Потому что я пишу на Си, с Java я не знаком, только поэтому.
Рис. 10. Снимки экрана клиента С83.
Итак, основной экран разделен на две вкладки: плеер и опции. На вкладке Плеер снизу кнопки управления, громкость и время воспроизведения. Здесь всё как обычно: список можно прокрутить вверх и вниз, двойной клик — «дабл тап» открывает папки, запускает воспроизведение, «лонг тап» — контекстное меню для элементов списка. Можно прокрутить время воспроизведения. Существует возможность запланировать выключение плеера.
В регуляторе громкости сделал защиту от резкого увеличения громкости при случайном прикосновении. После 40% громкость добавляется по 10% при прикосновении. Или можно выбрать любую при перетаскивании ползунка, что не может произойти случайно, почти.
Плеер помнит воспроизведенные файлы, в клиенте они меняют цвет, немножко темнеют.

Не трудно заметить, что функция случайный порядок у меня организована перемешиванием самого списка. Сразу видно, что за чем будет играть. Алгоритм воспроизведения прост — по порядку, сверху вниз, но слушатель может вмешиваться в этот алгоритм, например, начать воспроизведение списка с середины. Или например, если во время воспроизведения переставить курсор на трек 15. Stars (см. рис 10, левый снимок экрана), то после воспроизведения 02. Chances запоет 15. Stars.
После воспроизведения остатка списка плеер доиграет все пропущенные, непрослушанные треки сверху вниз по списку. Пользователь также может установить курсор на уже прослушанный трек, с желанием прослушать его еще раз, после его прослушивания, воспроизведение вернется к не прослушанным композициям. Смена директории во время прослушивания — это создание нового списка. После завершения композиции из старого списка воспроизведение начнется с композиции, отмеченной курсором. Если курсор не на аудиофайле, то воспроизведение начнется с первого в списке файла.
Рис. 11. Вкладка «Опции»
В опциях свалено все в кучу, потому что их пока еще немного (все что есть видны на скриншоте), еще буду добавлять, потом может быть посортирую — это первое, а второе — я ими практически не пользуюсь. Вверху «случайный порядок» и «повтор списка», а кнопка «Завершение работы» внизу и всегда видна. Все остальные опции, также как и список, прокручиваются вверх и вниз, если развернуть все.
Общается клиент и плеер с помощью текстовых сообщений, похожих на XML синтаксис.

Выводы

Надо было делать не так. К фигам эти GPIO, надо было делать все на USB. Клавиши, регулятор громкости — это USB клавиатура — самодельная разумеется. USB ЦАП — не проблема, USB дисплей, а почему бы и нет! Это позволило бы взять мини-ПК без HDMI, они дешевле. И вообще, все это можно было бы провернуть на любой материнской плате, и только потом подобрать современный мини-ПК. Надо осваивать USB!
Блок питания ЦАПа надо было разместить на одной плате с ЦАПом. Для лучшего охлаждения днище корпуса надо делать перфорированным, а платы размещать вертикально. Жаркое лето плеер успешно пережил. Измерял, трансформатор был нагрет до температуры 50 градусов. Нормально, но все же надо делать как-то так:
Рис. 12. Пример хорошего охлаждения
Рис. 13. В интерьере

Видео в работе

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

Файлы

1. Мой образ SD карты с ОС Raspbian
2. ▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.
3. ▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.
4. ▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.
5. ▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.
6. ▼ Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.
Спасибо за внимание!

Камрад, рассмотри датагорские рекомендации

💰 Внимание! 800 рублей для новичков на Aliexpress 💰
. Если вы впервые на Aliexpress — получите 800.00₽ купонами на свой первый заказ.

Сергей (Sergiy_83) Беларусь. Жодино Список всех статей Профиль Sergiy_83 Электроникой увлекся в старших классах школы.
Потом закончил Минский профтехнический колледж электроники.
Потом «БГУИР» — Белорусский государственный университет информатики и радиоэлектроники. Инженер-электроник вот уже 11 лет.
Часто тянет что-нибудь изобрести.
Люблю программирование (Си, С++).
Мысль сделать домашнюю мультимедиа систему посещала уже достаточно давно. Предпосылкой к созданию стало избавление от большого системного блока и установка на рабочее места ноутбука с подключенным монитором. Первый вариант реализации, который не завелся, это медиасервер из неиспользуемого Android смартфона. Данная идея уткнулась в аппаратные ограничения (слабый Wi-Fi модуль, малый объём встроенной памяти, медленные чтение/запись файлов через OTG) и программные (отсутствие стабильно работающего «серверного» ПО под систему Android). После произошла реорганизация рабочего места и монитор стало некуда ставить. Дальше можно было и остановится, утилизироватьотвезти на дачу монитор, подключить висящий над компьютером телевизор к VGA порту, а окошко с фильмом, запущенным на компьютере, перемещать на всеобщее обозрение, но монитор 20″, формата 16:9, с разрешением 1600×900 предпочтительнее, чем телевизор 15″, формата 4:3, с разрешением 1024×768. Заменив телевизор на монитор, можно было бы и остановится, но ведь телевизор управлялся пультом и им пользовались домочадцы, которые с компьютером на «Ой, а что это?».
Если интересна задумка, добро пожаловать под кат.
Примечание:
Первоначально проект предполагал использование старого нетбука, с которого можно было бы снять дисплей. К счастью, в нём оказалось недостаточно памяти для мультимедиа устройства, всего 160 Гб, а в ноутбуке стоит жёсткий диск на 500 Гб. Можно было и поменять жёсткие диски местами, но это показалось не лучшей идеей.
Для удобства, дополнительно, надо было приобрести ИК-приёмник с пультом для ПК. По многочисленным обзорам и отзывам остановил свой взгляд на Microsoft MCE Remote. Купить такой в России, даже в Москве, оказалось не такой простой задачей. В продаже их нигде не осталось, а там, где они когда-то были, висел ценник, близкий к 3000 рублям. На eBay нашлись необходимые модели, от 700 рублей за ИК-приёмник и пульт, но ждать пришлось бы примерно месяц. В первой же интернет барахолке из ТВ рекламы, в Москве был найден единственный вариант, от фирмы Lenovo, подозрительно напоминающий модель Philips SRM5100/10, за отсутствием выбора режимов работы. Что интересно, таким же пультом (без выбора режимов работы) комплектуются ASUS EeeBox PC, но у ASUS в нём используется три AAA-батарейки, вместо двух. Цена оказалась вполне демократичной, 300 рублей. Забрать успел вовремя, выхватив перед носом у человека, который просил отправить из Москвы в Санкт-Петербург, по почте (если вы это читаете, человек из Санкт-Петербурга, то прошу меня извинить). Моё местоположение оказалось выгоднее, путь от дома до продавца занял 20 минут. В качестве сюрприза я увидел два пульта, один из которых оказался непользованным.

Заканчивая аппаратное оснащение, можно добавить прикольный USB-хаб, ведь в ноутбуке всего 3 USB-порта, один из которых USB 3.0, используемый для подключения флешек, а подключать нужно принтер, сканер, ик-приёмник и мышь.

Полный список используемого аппаратного обеспечения:

  • Ноутбук ASUS K46CM;
  • Монитор ASUS VE208N;
  • ИК-приёмник Lenovo eHome OVU430006/01;
  • Пульт ДУ Lenovo MCE Remote RC1974511/00;
  • USB-хаб CBR CH 165;
  • Мышь Logitech M185;
  • Маршрутизатор .

Программная реализация

Установленная на ноутбуке операционная система — Windows 8.1 with WMC, что наводит на мысли использовать в качестве оболочки Windows Media Center, но WMC не всеяден; также показался перегруженным интерфейс. Долго не думая, выбрал XBMC, поскольку название на слуху и до этого пробовал его устанавливать, но тогда не придумал, как можно задействовать медиацентр.
XBMC распространятся бесплатно, имеет открытый исходный код, кроссплатформенный.
Производим установку XBMC. После установки сразу поддерживается пульт ДУ, но запуск производится на основном экране ноутбука. Стандартный язык интерфейса — английский. Делаем первичную настройку.
Для смены языка переходим:
System > Appearance > International > LanguageДля вывода на второй монитор:
Система > Система > Вывод видео > Режим дисплея > выбрать Полный экран #2Сразу становятся видны недостатки стандартного управления пультом ДУ:

  1. Если окно XBMC не в фокусе, то управление XBMC невозможно;
  2. Если окно XBMC не в фокусе, управление передается в Windows;
  3. Нельзя запустить XBMC с пульта;
  4. Недостаточная настройка управления, например, нельзя вызвать контекстное меню;
  5. Невозможна самостоятельная настройка кнопок пульта для вызова события в плеере.

Также, необходимо решение, как можно управлять включением/выключением монитора с пульта ДУ, с одновременным включением XBMC.
Точкой отправки на поиски послужила статья «Как из домашнего компьютера сделать «два в одном» – домашний кинотеатр + персональный компьютер», в которой используется MediaPortal, который содержит стандартную настройку Require focus. Для решения проблемы переноса управления на Windows автор вручную правил реестр.
В процессе было найдено, как можно без сторонних программ назначить запуск приложения на зелёную кнопку пульта со значком Windows. Суть заключается в том, что мы настраиваем быстрый запуск программы на какое-либо сочетание клавиш, а на зеленую кнопку добавляем код данного сочетания клавиш. Подробнее можно прочитать в теме «Переназначение кнопок MSRemote и старт XBMC с «ЗЕЛЁНОЙ» кнопки» на XBMC Russia.
Ещё поиски привели на две статьи, как можно полностью (без моргающего диода) отключать монитор программными методами. Статьи на Хабре, для разных ОС:

  1. Для Linux;
  2. Для Windows;

Данный метод совместим не со всеми мониторами. В моём случае он тоже не сработал.
В результате, включение/выключение монитора удалось организовать стандартными средствами Windows. Достаточно переключать режимы работы двух дисплеев «Расширенный» и «Только экран компьютера». Для переключения через командную строку используется утилита DisplaySwitch.exe, с ключами запуска /extend или /internal, для режимов «Расширенный» и «Только экран компьютера», соответственно.

%windir%\System32\DisplaySwitch.exe /extend %windir%\System32\DisplaySwitch.exe /internal
На данном этапе до сих пор непонятно, как можно:

  • Управлять XBMC, когда окно не в фокусе;
  • Самостоятельно настроить кнопки пульта;
  • Как переключать режимы дисплеев с пульта.

В интернете для настройки управления компьютера с пульта ДУ наиболее часто предлагались программы IR Server Suite и EventGhost. После установки IR Server Suite, оказалось, что он слишком перегружен, поэтому я выбрал EventGhost, из-за его простоты. У EventGhost закончилась поддержка ещё на Windows Vista, но он прекрасно заработал и на Windows 8.1. Главное, запускать эту программу только от имени администратора, поскольку приложение обновлялось последний раз ещё в 2009 году, то автоматический запуск от имени администратора в ней не предусмотрен. Пройдёмся по настройке для управления XBMC.
Главное окно EventGhost:

Для создания нового метода работы необходимо создать новую конфигурацию:File > NewДобавим плагин для поддержки MCE Remote:Configuration > Add Plugin… > из папки Remote Receiver выберем Microsoft MCE RemoteЕщё там есть версия Vista/Win7, которая запускает данный плагин в виде службы Windows, но с ней у меня не заладилось.
В настройках плагина отмечаем галочку Disable HID service for this remote (recommended), которая из HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HidIr\Remotes\745a17a0-74d3-11d0-b6fe-00a0c90f57da удаляет ключи CodeSetNumX, где X — целое число.

Конфигурацию необходимо сохранить:File > SaveСозданная конфигурация будет использоваться, пока не указать другую.
Для применения изменений в реестре перезагружаем компьютер. Пульт для управления Windows теперь не работает.
Из интересного осталось, что компьютер можно разбудить из спящего режима кнопкой Вкл/Выкл на пульте. В теории, можно реализовать включение компьютера с пульта ДУ. Google: Включение компьютера с пульта ДУ.
Запускаем EventGhost от имени администратора. Добавим плагин для управления XBMC.Configuration > Add Plugin… > из папки Program Control выберем XBMC2
Из настроек плагина, видно, что, перехватывая сигнал с кнопок пульта, EventGhost отправляет команду в XBMC. Поэтому, зайдём в настройки XBMC.Система > Настройки > Службы > Удаленное управление > ставим точку на пункте Разрешить программам на этой системе управлять XBMCДалее, заканчиваем настройку плагина XBCM2 и у нас, в окне EventGhost, создается папка с одноименным плагину названием. В папке и подпапках перечислены команды управления, которые могут передаваться в XBMC. Я настраивал папку /XBMC2/Buttons/Remote/. В ней содержатся макросы для кнопок, которые могут быть на пульте. Для назначения кнопки пульта ДУ на выполнение макроса нужно событиеперетащить на макрос. Событие перетаскивается из лога программы, а появляется оно в логе после нажатия на кнопку пульта ДУ, или, даже, когда что-то происходит в системе. Таким образом, щёлкаем кнопки и назначаем их на нужное событие.
Осталось найти следующее:

  • Запуск XBMC с пульта;
  • Переключение режимов дисплеев с пульта.

Переключение режимов дисплеев, которое в итоге будет выглядеть, как включение/выключением монитора логичнее всего настройку на кнопку Вкл/Выкл на пульте. Также это можно связать с запуском/закрытием XBMC, поскольку XBMC не нужно будет выводить на основной дисплей ноутбука.
Для автоматизации переключения режимов экранов, заранее создадим два *.bat файла:
Computer.bat:
taskkill /im XBMC.exe %windir%\System32\DisplaySwitch.exe /internal
Для переключения на компьютер, где мы сначала завершаем процесс XBMC.exe, чтобы XBMC не перескакивал на встроенный дисплей.
Media.bat:
%windir%\System32\DisplaySwitch.exe /extend
Для переключение на расширенный режим.
Создадим свой макрос:Configuration > Add Macro… > Window > Find a window > выберем XBMC
Данное событие будет проверкой, открыт ли у нас в системе XBMC. Для макроса на включение в настройке Find a windows вверху должна стоять галочка Stop macro if target is found (если у нас запущено окно XBMC, его же не нужно включать заново).
Штатным средством из EventGhost, под названием Start Application нет возможности запускать *.bat файлы, поэтому в созданный макрос необходимо добавить выполнение Python скрипта. Выберем созданный нами макрос и проследуем дальше:Configuration > Add Action… > EventGhost > Python ScriptСодержание скрипта для включения монитора и запуска XBMC следующее:
import os import time os.system(‘C:\Media.bat’) time.sleep(2) os.startfile(r’C:\Program Files (x86)\XBMC\XBMC.exe’)
Т.е. мы запускаем *.bat файл, ждём 2 секунды, пока режим дисплеев переключится, чтобы XBMC запустился именно на втором экране и запускаем XBMC.exe
По образу и подобию прошлого макроса, создаём новый, на выключение внешнего монитора и XBMC
В Find a window нужно поставить галочку Stop macro if target is not found, а Python Script для выключения:
import os os.system(«C:\Computer.bat»)
В оба созданных макроса нужно переместить событие возникающее при нажатии на кнопку Вкл/Выкл пульта.
Использование скриптов командной строки носит небольшой недостаток, при выполнении скрипта моргает окошко cmd. Этого можно избежать, написав программу, выполняющую код скрипта от своего имени.
В результате всего мы должны получить примерно такой вид окна EventGhost:
При использовании созданного EventGhost функционала возникла проблема, которая заключается в том, что XBMC запускается не в фокусе и панель задач всегда горит сверху медиацентра.
В связи с этим я сделал так, чтобы окно перемещалось вперёд всех других, используя знакомую функцию Find a window, с галочкой Stop macro if target is not found. Повесил на это зелёную кнопку «Пуск», на пульте ДУ, совместно с переходом в главное меню, при управлении XBMC. Подробно приводить создание макроса не буду, прикладываю скриншот:
На цветные кнопки пульта, в нижнем ряду я повесил следующие события:
В результате получилась окончательная конфигурация EventGhost:
Сохранимся:File > SaveДля настройки системы осталось лишь автоматизировать запуск EventGhost при старте системы. Единственным заработавшим решением стало включение встроенной учётной записи Администратора и запуска cmd скрипта из автозагрузки.

Win+R:
lusrmgr.msc Пользователи > правой кнопкой на Администратор > убрать галочку с пункта Отключить учетную запись
Заходим в учётную запись Администратор, задаём надёжный пароль. Выходим из учётной записи.
Любым текстовым редактором, который умеет сохранять в кодировке DOS-866 создаём *.bat файл со следующим содержанием:
runas /savecred /user:Администратор «C:\Program Files (x86)\EventGhost\EventGhost.exe -h»
Т.е., запустить, с сохранением пароля, от имени администратора, программу EventGhost, с ключом -h (запуск в трей). Обязательно сохраняем в DOS-866, если вы не меняли кодировку в командной строке.
Выключаем EventGhost, запускаем полученный скрипт, вводим пароль.
Помещаем скрипт в автозагрузку:
Win+R:
shell:Startup
Откроется путь C:\Users\%user%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup, в который и переместим полученный скрипт. При входе в систему пользователем %user% автоматически запускается EventGhost, с полными правами. При использовании других методов автозагрузки, полный доступ не передавался, в том числе, через Планировщик задач.
Теперь включение компьютера нас будет приветствовать моргающим окном командной строки, которая будет уведомлять о запуске EventGhost.
В плане автозагрузки IR Server Suite был бы лучше, поскольку запускается как служба Windows, но не очень хотелось разбираться с его настройками, когда у меня заработал EventGhost.
Для более полного дистанционного управления с пульта ДУ необходимо произвести некоторые настройки Windows, в параметрах электропитания:

  1. %схема питания% > Требовать введения пароля при пробуждении > Нет;
  2. Параметры USB > Параметр временного отключения USB-порта > Запрещено;
  3. Кнопки питания и крышка > Действие закрытия крышки > Действие не требуется;
  4. Кнопки питания и крышка > Действие кнопки питания > Сон.

Перезагружаем компьютер (кнопкой с пульта, конечно же), проверяем работу всего, что настроили и настраиваем по своему вкусу XBMC. Я, например, включил полную поддержку UPnP, чтобы можно было получить доступ к домашней медиатеке со своего смартфона или, наоборот, запустить медиафайл со смартфона в XBMC. Система > Службы > UPnP > поставить точки напротив каждого пункта меню
Добавим обещанный IPTV.
Для начала, скачаем плагин PVR IPTV Simple, для XBMC. Страничка на GitHub, .
Установим дополнение в XBMC:Система > Дополнения > Установить из файла ZIP > выбираем путь к скачанному файлу *.zipВключим ТВ:Система > ТВ > Общие > ставим точку на Вкл.Последуем инструкции по установке:Система > ТВ > Общие > Очистить базу данных PVRНастроим каналы IPTV:Система > Дополнения > Включенные дополнения > PVR IPTV Simple Client > НастроитьУказываем путь до *.m3u файла. Если у вас надёжный поставщик онлайн ТВ, тогда можно указать и путь до *.epg, который является телепрограммой, тогда вы добавите дополнительный удобный функционал.
Формат требуемого *.m3u следующий:
#EXTM3U tvg-shift=3 #EXTINF:-1 tvg-id=»id1″ tvg-name=»Channel_1″ tvg-logo=»logo1″ group-title=»Group 1″,Channel 1 http://STREAMURL #EXTINF:-1 tvg-id=»id2″ tvg-name=»Channel_2″ tvg-logo=»logo2″ group-title=»Group 2″,Channel 2 udp://STREAMURL …

Хотя у меня плагин съел и такой:
#EXTM3U #EXTINF:0,Europa Plus TV rtmp://europaplus.cdnvideo.ru/europaplus-live/mp4:eptv_main.sdp …
Главное сохранить *.m3u файл в кодировке UTF-8, чтобы корректно отобразить русские названия телеканалов.
Назначаем любую удобную кнопку пульта на открытие телеканалов, в EventGhost (XBMC2 > Buttons > Remote > Live TV) и по нажатию на неё будет открываться список доступных телеканалов.
К сожалению, не получилось настроить запись потока, которая, видимо, не поддерживается плагином, поскольку кнопка записи не активна, в отличие от остальных кнопок.
Полный список используемого ПО:

  • Операционная система Windows 8.1;
  • Обработчик событий EventGhost;
  • Медиацентр XBMC;
  • Плагин для XBMC IPTV Simple;
  • Текстовый редактор для изменения *.m3u файлов.

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