Содержание статьи
Первоначальная идея большинства людей, которые покупают Raspberry Pi, чтобы сделать из него ТВ-приставку, примерно следующая: подключаем к «малинке» жесткий диск или флешку с фильмами, подключаем пульт с гироскопом, устанавливаем мультимедийный комбайн Kodi и наслаждаемся фильмами, ютюбчиком, ТВ и радио.
Это абсолютно логичное решение, которое ты будешь проклинать уже через два часа. Kodi — прекрасная оболочка для мультимедийной приставки, но не лучшим образом оптимизированная для Raspi. Иной раз ее приходится перезапускать, курсор мыши во время просмотра видео дико тормозит, а некоторые функции не работают.
Плюс ко всему ты, конечно же, столкнешься с неработоспособностью половины опубликованных в местном репозитории плагинов. Хочешь посмотреть YouTube — фиг тебе, плагин работает один раз через десять, послушать радио можно, но придется еще найти работающий плагин. ТВ? Даже не пытайся.
2018 год, стримы, облака, Netflix, а ты сидишь и смотришь видосики с жесткого диска с тормозящим курсором. А если попробуешь открыть YouTube в браузере, то увидишь такое слайд-шоу, что можно на конференциях выступать.
Мыслим в обратную сторону
Raspberry Pi кажется настолько непригодным к использованию в качестве ТВ-приставки, что я мог бы порекомендовать купить вместо него настоящую ТВ-приставку (типа Nvidia Shield) или даже китайский HDMI-свисток. Но я не буду этого делать, потому что у Raspberry Pi есть два преимущества:
- Это мини-ПК на базе Linux, с которым можно сделать все что угодно (в отличие от залоченных приставок и приставок на базе Android).
- У Raspberry Pi большое комьюнити и множество разработчиков.
Не стоит пытаться превратить Raspberry Pi в классическую приставку, управляемую с пульта. Его нужно превратить в сервер, которым ты сможешь рулить с ноутбука или смартфона. Захотел посмотреть YouTube — взял телефон, запустил аппликуху, выбрал видео и нажал плей. Хочешь музыку — у тебя на телефоне есть виджет. Торренты? Скачиваешь файлик на ноутбук и с помощью удаленного торрент-клиента закидываешь на Raspi.
Что тебе понадобится
Итак, тебе нужны следующие вещи:
- Raspberry Pi 3.
- SD-карта минимум на 8 Гбайт, минимум 10-го класса.
- Внешний жесткий диск для хранения музыки и фильмов.
- Клавиатура и мышь (нужны только при начальной настройке и во время неполадок).
- 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.
Xakep #235. Возрождение эксплоит-китов
Фильмы и 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
2. Обнови фирмварь и перезагрузись:
$ sudo rpi-update
3. Скачай скрипт 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 не умеет подхватывать файлы сразу. Чтобы он их увидел, необходимо обновить базу композиций. Это можно сделать с помощью соответствующей кнопки или хоткея в клиенте.
Торренты
Наш 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:
$ /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’а.
Выводы
Raspberry Pi не мультимедийный центр и никогда и не должен был быть им. Это просто маленький компьютер, который умеет немного фильмов, музыки и ретроигр. Но именно этим он и хорош, ведь ты волен сам придумывать ему применение. Не нравится Kodi, как мне, — используй SSH и голый omxplayer. Установи MPD и включай музыку хоть с другого конца города.