October 30, 2018

Рецепт не совсем обычного медиацентра из Raspberry Pi

Содержание статьи

  • Мыслим в обратную сторону
  • Что тебе понадобится
  • Фильмы и YouTube
  • YouTube: вариант второй, глючный
  • Музыка
  • Торренты
  • Ретроигры
  • Выводы

За шесть лет существования Raspberry Pi появилось огромное количество руководств, как превратить его в домашний мультимедиацентр. Вот только классический мультимедийный центр из него настолько плохой, что проигрывает даже китайским HDMI-свисткам. Точнее, так кажется, пока ты не начинаешь мыслить, как линуксоид.

Первоначальная идея большинства людей, которые покупают Raspberry Pi, чтобы сделать из него ТВ-приставку, примерно следующая: подключаем к «малинке» жесткий диск или флешку с фильмами, подключаем пульт с гироскопом, устанавливаем мультимедийный комбайн Kodi и наслаждаемся фильмами, ютюбчиком, ТВ и радио.

Это абсолютно логичное решение, которое ты будешь проклинать уже через два часа. Kodi — прекрасная оболочка для мультимедийной приставки, но не лучшим образом оптимизированная для Raspi. Иной раз ее приходится перезапускать, курсор мыши во время просмотра видео дико тормозит, а некоторые функции не работают.

Плюс ко всему ты, конечно же, столкнешься с неработоспособностью половины опубликованных в местном репозитории плагинов. Хочешь посмотреть YouTube — фиг тебе, плагин работает один раз через десять, послушать радио можно, но придется еще найти работающий плагин. ТВ? Даже не пытайся.

2018 год, стримы, облака, Netflix, а ты сидишь и смотришь видосики с жесткого диска с тормозящим курсором. А если попробуешь открыть YouTube в браузере, то увидишь такое слайд-шоу, что можно на конференциях выступать.

Мыслим в обратную сторону

Raspberry Pi кажется настолько непригодным к использованию в качестве ТВ-приставки, что я мог бы порекомендовать купить вместо него настоящую ТВ-приставку (типа Nvidia Shield) или даже китайский HDMI-свисток. Но я не буду этого делать, потому что у Raspberry Pi есть два преимущества:

  1. Это мини-ПК на базе Linux, с которым можно сделать все что угодно (в отличие от залоченных приставок и приставок на базе Android).
  2. У Raspberry Pi большое комьюнити и множество разработчиков.

Не стоит пытаться превратить Raspberry Pi в классическую приставку, управляемую с пульта. Его нужно превратить в сервер, которым ты сможешь рулить с ноутбука или смартфона. Захотел посмотреть YouTube — взял телефон, запустил аппликуху, выбрал видео и нажал плей. Хочешь музыку — у тебя на телефоне есть виджет. Торренты? Скачиваешь файлик на ноутбук и с помощью удаленного торрент-клиента закидываешь на Raspi.

Что тебе понадобится

Итак, тебе нужны следующие вещи:

  1. Raspberry Pi 3.
  2. SD-карта минимум на 8 Гбайт, минимум 10-го класса.
  3. Внешний жесткий диск для хранения музыки и фильмов.
  4. Клавиатура и мышь (нужны только при начальной настройке и во время неполадок).
  5. USB-зарядник на 2,5 А и microUSB-кабель.

Raspberry Pi без проблем дружит с Bluetooth-клавиатурами и мышами, но работать они будут, естественно, только если загрузка ОС прошла успешно. В качестве мыши очень удобно использовать пульт с гироскопом (на Aliexpress такие стоят 3–5 долларов). Он эмулирует движения мыши с помощью наклонов.

USB-зарядник подойдет любой, даже меньше чем на 2,5 А. Проблема только в том, что, если Raspi заметит нехватку энергии, он сбросит частоту процессора, а ты увидишь значок молнии в правом верхнем углу экрана. В это же время может произойти останов жесткого диска и обесточивание периферии. Стоит озаботиться покупкой хорошего зарядника и microUSB-кабеля, нередко проблема недостатка питания именно в нем.

Не буду в подробностях расписывать процесс установки ОС на Raspberry (об этом и так рассказывают на каждом углу). Скажу лишь, что я рекомендую использовать официальный дистрибутив Raspbian (для гарантии того, что все работает как надо) и что сам процесс установки, по сути, сводится к скачиванию образа ОС и его заливке на SD-карту. В Linux это делается в две команды:

$ wget https://downloads.raspberrypi.org/raspbian_latest -O raspbian_latest.zip
$ unzip -p 2018-04-18-raspbian-stretch.zip | sudo dd of=/dev/sdX bs=4M conv=fsync

Здесь /dev/sdX — это SD-карта, реальное имя можно узнать с помощью команды lsblk или dmesg сразу после подключения карты памяти.

Вставляем карточку в Raspberry Pi, дожидаемся загрузки рабочего стола, подключаемся к сети Wi-Fi. Запускаем конфигуратор raspi-config из консоли:

$ sudo raspi-config

И включаем SSH-сервер: Interfacing options -> SSH -> Yes.

С этого момента клавиатура и мышь нам больше не нужны. Все, что нужно, мы сможем сделать, подключившись к Raspi с помощью SSH.

Рабочий стол Raspberry Pi

Фильмы и YouTube

Главная задача мультимедийной приставки — проигрывать видео. Для Raspberry Pi доступны различные плееры, но почти все они имеют проблемы с воспроизведением видео с высоким разрешением. Проще говоря, они не умеют декодировать видео с помощью аппаратного ускорителя и делают это на центральном процессоре, который любит тормозить.

Но есть исключение — omxplayer. Он был создан разработчиками Kodi, чтобы убедиться в способности Raspberry Pi к декодированию видео перед началом портирования самого мультимедийного комбайна. Omxplayer без всяких проблем переваривает HD и Full HD видео, но управляется исключительно из консоли. Другими словами, чтобы запустить воспроизведение, тебе придется сделать так:

$ omxplayer /путь/к/видео.avi

Чтобы выбрать аудиовыход (HDMI или выход на самом Raspi), используй опцию -o:

$ omxplayer -o local /путь/к/видео.avi

Для управления воспроизведением используй клавиши: пробел — пауза, +/- — громкость, стрелки — перемотка.

Считаешь это удобным? Я тоже нет, поэтому предлагаю использовать omxplayer в связке с приложением Raspicast для Android. Это клиент для Raspberry Pi и omxplayer, позволяющий удаленно включать любые видео, хранящиеся на жестком диске, и даже видео с YouTube.

Установи приложение на свой смартфон, укажи IP-адрес Raspberry Pi, а также имя и пароль для подключения к SSH. Далее ты можешь либо использовать встроенный в приложение файловый браузер для выбора видео, либо отправить любое видео с YouTube: запускаешь YouTube на телефоне, выбираешь видео, нажимаешь кнопку «Поделиться» и выбираешь в списке Cast (Raspicast).

Видео можно либо запустить немедленно, либо добавить в плей-лист (для этого надо выбрать Queue (Raspicast) в меню «Поделиться». К сожалению, стримы YouTube не поддерживаются, зато поддерживаются плей-листы, их можно отправлять в Raspicast целиком, а он добавит их в очередь.

Уже запущенным omxplayer можно управлять через SSH. Для этого понадобится скрипт dbuscontrol. У него достаточно интуитивное управление:

$ dbuscontrol.sh status
$ dbuscontrol.sh pause
$ dbuscontrol.sh togglesubtitles

Raspicast умеет играть видео с жесткого диска и с YouTube

YouTube: вариант второй, глючный

На самом деле Raspberry Pi таки умеет воспроизводить видео в браузере на приемлемой скорости. Но есть один нюанс: для этого необходимо активировать драйвер OpenGL, который работает, мягко говоря, не совсем стабильно. К примеру, ты можешь получить графические артефакты на экране, неустойчивую работу системы или вообще отказ загрузки. Если это не пугает, тогда выполни следующие действия.

  1. Добавь в файл /boot/config.txt такие строки (192 — количество отведенной для видеоадаптера памяти):
dtoverlay=vc4-kms-v3d
gpu_mem=192
  1. Обнови фирмварь и перезагрузись:
$ sudo rpi-update
  1. Скачай скрипт chromium-mod.sh и запусти:
$ chmod +x chromium-mod.sh
$ sudo ./chromium-mod.sh

Он изменит флаги запуска Chromium таким образом, чтобы он использовал аппаратное ускорение.

Теперь запусти Chromium, активируй плагин h264ify (он уже установлен) и попробуй включить видео на YouTube. Если, как и прежде, наблюдаются тормоза, стоит проверить, что аппаратное ускорение действительно было активировано. Для этого открой chrome://gpu.

Кстати, в Quake 3 теперь тоже можно играть.

Даже если видео заработает, загрузку браузера ты все равно будешь ждать несколько минут

Музыка

Раз уж мы решили использовать Raspberry Pi в качестве единого мультимедийного центра, то логично установить на него аудиоплеер с удаленным управлением. На эту роль лучше всего подходит MPD (Music Player Daemon).

Мы запустим его на Raspberry Pi так, чтобы он постоянно висел в фоне и был готов играть музыку. А на ноутбук, домашний комп и смартфон установим MPD-клиент, с помощью которого и будем выбирать и запускать музыку.

Устанавливаем:

$ sudo apt install mpd

Скопируем дефолтовый конфиг:

$ mkdir .config/mpd
$ cp /etc/mpd.conf .config/mpd/

Изменим несколько строк:

## Каталог с музыкой
music_directory /media/pi/Elements/download
## Каталог с плей-листами
playlist_directory /media/pi/Elements/playlists
## Пользователь, от имени которого будет работать демон
user "pi"
## Слушаем подключения на всех адресах
bind_to_address "0.0.0.0"

В данном примере я использовал /media/pi/Elements/download в качестве каталога с музыкой. Это каталог download на диске WD Elements, подключенном по USB. Если ты используешь флешку или жесткий диск, он также будет подключен куда-то к /media/pi, но, естественно, под другим именем.

Чтобы не иметь заморочек с правами доступа, нам нужно запускать MPD как пользовательский процесс. Для этого необходимо отключить системный сервис MPD и создать пользовательский. Первая задача выполняется так:

$ sudo systemctl stop mpd.socket
$ sudo systemctl disable mpd.socket

Чтобы решить вторую, создадим каталог для пользовательских сервисов SystemD:

$ mkdir -p .config/systemd/user/

В нем создаем файл mpd.service следующего содержания:

[Unit]
Description=Music Player Daemon

[Service]
ExecStart=/usr/bin/mpd --no-daemon

[Install]
WantedBy=default.target

Сохраняем, активируем и запускаем:

$ systemctl --user enable mpd.service
$ systemctl --user start mpd.service

Теперь MPD будет автоматически запускаться от имени пользователя после загрузки.

Клиентов для MPD существует множество для самых разных платформ, включая Linux, Windows, macOS, Android и iOS. Лично я предпочитаю использовать консольный ncmpc на ноутбуке с Linux и MPD Control на Android.

Да, чуть не забыл — MPD не умеет подхватывать файлы сразу. Чтобы он их увидел, необходимо обновить базу композиций. Это можно сделать с помощью соответствующей кнопки или хоткея в клиенте.

Ncmpc: консольный клиент MPD

Торренты

Наш Raspberry Pi теперь умеет играть видео и аудио с жесткого диска, но где брать это самое аудио и видео? Конечно же, в торрент-сетях! Нет, я не про пиратство, я про чиптюны и образовательное видео.

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

Лучше всего на эту роль подойдет transmission-daemon. Так что устанавливаем:

$ sudo apt install transmission-daemon

Как и в случае с MPD, сразу отключаем системный сервис:

$ sudo systemctl stop transmission-daemon.service
$ sudo systemctl disable transmission-daemon.service

Копируем дефолтовые конфиги:

$ sudo cp -r /etc/transmission-daemon /home/pi/.config/
$ sudo chown -R user_name /home/pi/.config/transmission-daemon

Открываем файл ~/pi/.config/transmission-daemon/settings.json и меняем следующие строки:

"rpc-authentication-required": false,
"rpc-whitelist": "127.0.0.*,192.168.31.*",
"rpc-whitelist-enabled": true,

"download-dir": "/media/pi/Elements/download",
"incomplete-dir": "/media/pi/Elements/download",

В первых трех строках мы отключаем аутентификацию (в домашней сети она не нужна) и указываем подсети, из которых можно будет подключиться к Transmission. Замени 192.168.31.* на свою домашнюю сеть. Последние две строки — каталог загрузки.

Рекомендую также установить дневные лимиты на скорость загрузки/отдачи данных. Это нужно, чтобы Transmission загружал канал только по ночам, а днем не мешал другим юзерам сети.

Следующие настройки включают ограничение в 100 Кбайт/с c 6 утра до 11 вечера (время задается в минутах):

"alt-speed-enabled": true,
"alt-spee-d-down": 100,
"alt-speed-up": 100,
"alt-speed-time-enabled": true,
"alt-speed-time-begin": 360,
"alt-speed-time-end": 1380,
"alt-speed-time-day": 127,

Опять же, как и в случае с MPD, нам нужен пользовательский сервис для запуска Transmission. Создадим файл ~/.config/systemd/user/transmissiond.service с такими строками:

[Unit]
Description=Transmission

[Service]
ExecStart=/usr/bin/transmission-daemon -f --config-dir /home/pi/.config/transmission-daemon/

[Install]
WantedBy=default.target

Активируем и запустим сервис:

$ systemctl --user enable transmissiond.service
$ systemctl --user start transmissiond.service

Для управления Transmission можно взять один из официальных клиентов или любой другой на твой вкус. Я использую transmission-remote-gtk на ноутбуке и Transmission Remote на смартфоне.

Ретроигры

Эмуляция старых приставок — одна из тех вещей, с которыми новые Raspberry Pi справляются лучше всего. Есть люди, которые покупают Raspi, ставят на него дистрибутив RetroPie, подключают джойстики и используют исключительно в качестве игровой приставки.

Ты можешь пойти тем же путем, но имей в виду, что RetroPie — специализированный дистрибутив, который загружается либо в интерфейс RetroArch для запуска игр, либо в Kodi для просмотра фильмов и прослушивания музыки.

С другой стороны, никто не запрещает тебе остаться на текущем дистрибутиве и просто установить в него тот самый интерфейс RetroArch для запуска старых игр (по сути, это обертка над эмуляторными движками). Он есть в репозитории Raspbian, но лучше взять преднастроенный из RetroPie.

Итак, для начала клонируем репозиторий RetroPie:

$ sudo apt-get install git lsb-release
$ git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git

Запустим инсталлятор:

$ cd RetroPie-Setup
$ chmod +x retropie_setup.sh
$ sudo ./retropie_setup.sh

Нас интересует всего один пункт: Manage Packages -> Core -> retroarch. Выбираем и устанавливаем.

Устанавливаем RetroArch

Запускаем RetroArch:

$ /opt/retropie/emulators/retroarch/bin/retroarch

Для начала настроим джойстик. Идем в Settings -> Input -> Input User 1 Binds. Как и в любом эмуляторе, выбираем нужную кнопку и нажимаем ее на джойстике. По умолчанию RetroArch эмулирует универсальный джойстик RetroPad, расположение кнопок на котором такое же, как на джойстике SNES.

Также сразу включаем комбинацию для быстрого выхода в меню: Menu Toggle Gamepad Combo -> выбираем Start + Select или любую другую комбинацию на свой вкус.

Далее необходимо установить движки эмуляции. Переходим на главный экран, затем Load Core -> Download core… Нас интересуют следующие движки:

  • fceumm — NES;
  • genesis_plus_gx — Sega Mega Drive 2;
  • snes9x2010 — Super Nintendo;
  • pcsx_rearmed — Sony PlayStation 1.

И последнее. Переходим в Settings -> Directory -> File Browser и выбираем каталог с ROM’ами.

Это все. Теперь, если, например, ты хочешь поиграть в «Сегу», переходи в Load Core -> genesis_plus_gx, далее Load Content и выбирай игру.

Ах да. RetroArch поддерживает ачивки для множества игр. Регистрируйся на retroachivements, затем иди в меню Settings -> Achivements и вбивай свои логин-пароль. RetroArch сам активирует систему ачивок, когда обнаружит загрузку поддерживаемого ROM’а.

Интерфейс RetroArch

Выводы

Raspberry Pi не мультимедийный центр и никогда и не должен был быть им. Это просто маленький компьютер, который умеет немного фильмов, музыки и ретроигр. Но именно этим он и хорош, ведь ты волен сам придумывать ему применение. Не нравится Kodi, как мне, — используй SSH и голый omxplayer. Установи MPD и включай музыку хоть с другого конца города.

Источник: xakep.ru