babooshka tv, как самодельный видео-показатор сместил «точку сборки» моих пожилых родителей

в 9:33, , рубрики: diy или сделай сам, open source, Raspberry Pi, досуг, пиратское телевидение, Разработка на Raspberry Pi, Электроника для начинающих

Дорогие друзья. Так получилось, что предыдущую мою публикацию унесло НЛО, сочтя ее чрезмерно политизированной. Это вторая попытка опубликовать этот текст. Мне, увы, так и не удалось выяснить, какие конкретно формулировки являются на Хабре запретными. Поэтому я убрал все названия и все упоминания популярных персон и телевизионных каналов, чтобы лишний раз не вызывать беспокойство в пылких сердцах особо сердобольных читателей и, тем самым, умерить накал страстей в комментариях. Это мое скромное детище было придумано с единственной целью, вынуть моих любимых родителей из телевизионного "информационного пузыря" и предоставить им дополнительную и, вместе с тем, привычную по формату альтернативу из наших семейных роликов, а так же разнообразных видео из сети Интернет, интересных и полезных для расширения кругозора. Надеюсь, что на этот раз НЛО оставит пост в покое, а вы, дорогие коллеги, получите удовольствие от прочтения.

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

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

Родители впервые смотрят нашумевший пару лет назад эпический фильм про он-вам-не-димона
Родители впервые смотрят нашумевший пару лет назад на Youtube фильм. (На крышке телевизора "голый" RPI первой модели, пруф оф концепт, так сказать)

И вот последнее меня более всего расстраивало каждый раз. Дело даже не в том, что одни и те же персонажи пересказывают набившие оскомину сюжеты изо дня в день. Беда в том, что каналы, которые они смотрят пропитаны мощнейшим негативом. Я каждый раз, когда приезжал, просил выключить телек на все время нашего пребывания, просто потому что это невыносимо слушать даже фоном. Это какая-то бесконечная череда катастроф, происшествий и заговоров вперемешку со бравадами. А они в этом ежедневно. И это все, очевидным образом, сказывается на их психоэмоциональном состоянии.

Но, как же Интернет, спросите вы. Я тоже был уверен, что стоит родителям подарить компьютер, как тут же откроются новые информационные горизонты и родители мои забудут про этот шайтан-яшик сами собой. Не тут то было. Подаренный компьютер они худо-бедно освоили. Но используется он исключительно как средство для голосового общения. Увы, в пожилом возрасте вся техника сложнее скороварки (ну и привычного пульта телевизора, конечно же) представляется как непреодолимая сложность для освоения. И даже не то чтобы мне не удавалось их обучить, к примеру, открывать браузер, и искать что-нибудь. Папа все тщательно записывает в бумажный блокнотик. Пара дней повторений, и начинает получаться. Но, за отсутствием фактической мотивации, этот навык утрачивается столь же быстро, как и появляется. Одно дело — звонить детям и простить залить им фотографии внучки. Другое — получать какую-либо информацию об окружающей действительности в активной форме. Это воспринимается, попросту, как нечто чрезмерно сложное и потому лишенное особого смысла. "Есть же, вот, телевизор. Там новости показывают. Ну да, может быть несколько тенденциозные, но в целом же это все имеет место, держит в курсе, так сказать..." — так примерно рассуждал мой папа.

Решение пришло неожиданно.

Я тут время от времени допиливаю свой чудный проект Interplay Medium. Так вот у меня там есть плейер, который бегает на RPi и показывает кино в проектор. Я подумал, а что бы мне просто не подключить такую же штуку родителям в телек и не загружать им туда видео время от времени. Видосики, какие мы тут записываем. Наши маленькие домашние достижения. Зарисовки из поездок. Всевозможные компиляции из фото, а так же просто хорошие фильмы и… и можно еще что-нибудь полезное из актуальных образовательных youtube видео. И чтобы это все было максимально адаптировано для интуитивного управления с пульта того же ТВ. Нажал кнопку, оно началось. Нажал другую — остановилось.

Сказано — сделано.

Начало

Сперва я собрал все на бредборде и написал скриптец, который слушает IR сенсор и передает команды.

сборочка на бредборде с IR приемником и передатчиком (зачем нужен передатчик -- расскажу ниже)

Далее я буду рассказывать и сразу описывать процесс настройки и сборки. На тот случай, если вы захотите повторить конструкцию.

Чтобы завести babooshka.tv на Малинке, вам нужно по-минимуму произвести следующие действия:

  • установить lirc, чтобы ваши родители или бабушки с дедушками могли пользоваться привычным пультом от телевизора
  • установить основной пакет Бабушки + настроить атозагрузку
  • подключить IR датчик (и IR LED для управления, по желанию)
  • если вы планируете использовать RPi Zero (как это сделал я), вам понадобится еще спаять нехитрый фильтр для звука который будет подключен к двум PWM ногам Малинки

Моя первая версия была именно так и собрана. Пара вечеров, чтобы разобраться с софтом + один день чтобы собрать все вместе.

babooshka.tv первая версия

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

Настройка Малинки

Во-первых рекомендуется установить свежий дистрибутив Raspberry OS. Raspberry Pi OS Lite image

Более старая версия (старее 2018) имеет отличный от описанного способ настройки IR. Я его тоже пробовал, и он даже несколько проще приведенного. Но повторять это тут будет, на мой взгляд, несколько избыточно. Различие заключается в способе коммуникации через виртуальный файл устройства. В предыдущей версии для RX и TX использовался общий /dev/lirc, сейчас они разделены. И если вы хотите использовать и RX и TX одновременно, в настоящей версии требуется руками прописать соответствующую конфигурацию. Впрочем, если вам нужен только приемник, вы можете ограничиться конфигурацией устанавливаемой по-умолчанию.

Процедуру подключения wifi и настройку SSH я описывать здесь, пожалуй, не стану. Подозреваю, что уважаемый читатель самостоятельно справится с этой нехитрой процедурой. Если вы, все же, не уверены в себе, ddg it!

Установка нужного ПО

Далее все описываемые действия выполняются на Малинке.

По первых, обновите репозитории и установите требуемые зависимости

apt update  
apt install mc fbi omxplayer sox

Попробуйте установить freefonts (чтобы omxplayer показывал титры и сообщения)

apt install ttf-freefont

По какой-то причине пакет freefonts был выпилен из последних дистрибутивов RPi, и репозитории я не нашел, поэтому если на сей момент ничего не поменялось, то просто скопируйте freefonts в /usr/share/fonts/truetype/...
при участии sudo

cp -r freefont /usr/share/fonts/truetype/freefont  
chown root:root /usr/share/fonts/truetype/freefont  
chown root:root /usr/share/fonts/truetype/freefont/*

Настройка IR

apt install lirc

отредактируйте /etc/lirc/hardware.conf

# Run "lircd --driver=help" for a list of supported drivers.  
DRIVER="default"

# usually /dev/lirc0 is the correct setting for systems using udev  
DEVICE="/dev/lirc1"  
MODULES="gpio_ir_recv"

отредактируйте /etc/lirc/lirc_options.conf
ВНИМАНИЕ! нужно добавить пустую строку в конце файла, этот баг известен known bug и до сих пор не пофиксен. Я убил полвечера, пытаясь понять, почему у меня не запускается порт.

driver        = default  
device        = /dev/lirc1

Поиск готового конфига для ТВ пульта. Попробуйте найти ваш пульт с помощью вот этой команды

irdb-get find YOUR_DEVICE  

Если получилось, установите YOUR_DEVICE.conf в /etc/lirc/lircd.conf.d/ (возможно, он там автоматически устанавливается, проверьте, я что-то запамятовал)

Если по той или иной причине не получилось, поищите ваш телек вот в этом списке: Список устройств, которые поддерживает Lirc 'из коробки'. В конечном итоге, если и на этот раз не повезло (что маловероятно, но вдруг...) или если в установленном конфиге только половина кнопок (что более вероятно), вы всегда можете записать свой конфиг. Об этом чуть ниже.

Скопируйте lircd.conf

cp /etc/lirc/lircd.conf.dist /etc/lirc/lircd.conf

Внесите изменения в /boot/config.txt, чтобы включить аналоговый PAL видео выход и запустить соответствующий оверлей для IR порта:

disable_splash=1

# disable_overscan=1

framebuffer_width=720
framebuffer_height=576

# enable PWM audio (add this line)
dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4

# uncomment for composite PAL
sdtv_mode=2

# uncomment if hdmi display is not detected and composite is being output
# hdmi_force_hotplug=1

# Uncomment this to enable the gpio-ir module
dtoverlay=gpio-ir,gpio_pin=23,gpio_pull=up
dtoverlay=gpio-ir-tx,gpio_pin=22

Делаем чтобы IR работал как на прием, так и на передачу

Инструкция взята практически без изменений из этого комментария на GitHub. Спасибо @elmicha

Добавляем правила в /etc/udev/rules.d/71-lirc.rules чтобы у нас появились устройства /dev/lirc-rx и /dev/lirc-tx:

ACTION=="add", SUBSYSTEM=="lirc", DRIVERS=="gpio_ir_recv", SYMLINK+="lirc-rx"
ACTION=="add", SUBSYSTEM=="lirc", DRIVERS=="gpio-ir-tx", SYMLINK+="lirc-tx"
ACTION=="add", SUBSYSTEM=="lirc", DRIVERS=="pwm-ir-tx", SYMLINK+="lirc-tx"

Меняем имя устройства и порт в /etc/lirc/lirc_options.conf:

device        = /dev/lirc-rx
listen        = 0.0.0.0:8766

Копируем lirc_options.conf в lirc_tx_options.conf и редактируем там следующие строчки:

device        = /dev/lirc-tx
output        = /var/run/lirc/lircd-tx
pidfile      = /var/run/lirc/lircd-tx.pid
listen        = 0.0.0.0:8765
connect      = 127.0.0.1:8766

Создаем /etc/systemd/system/lircd-tx.service (из вывода systemctl cat lircd) и добавляем туда настройки:

[Unit]  
Documentation=man:lircd(8)  
Documentation=http://lirc.org/html/configure.html  
Description=Second lircd, the transmitter  
Wants=lircd-setup.service  
After=network.target lircd-setup.service lircd.service  

[Service]  
Type=simple  
ExecStart=/usr/sbin/lircd --nodaemon --options-file /etc/lirc/lirc_tx_options.conf  

[Install]  
WantedBy=multi-user.target  
Create /etc/systemd/system/lircd-tx.socket (from the output of systemctl cat lircd.socket) and edit it:  

[Socket]  
ListenStream=/run/lirc/lircd-tx  

[Install]  
WantedBy=sockets.target  
Also=lircd-tx.service  

Создаем /usr/local/bin/irsend и делаем его запускаемым

#! /bin/sh  
exec /usr/bin/irsend --device=/var/run/lirc/lircd-tx "$@"
chmod +x /usr/local/bin/irsend

Запускаем lircd-tx сервис (при участии sudo)

systemctl daemon-reload
systemctl start lircd-tx
systemctl enable lircd-tx

Активизируем RX (sudo ...)

systemctl enable lircd.service
systemctl enable lircd.socket

systemctl restart lircd

ВНИМАНИЕ! Там может быть Warning of duplication of "begin remote… end remote". Это ок. Не обращайте внимание.

Перезагружаем и проверяем статус :)

systemctl reboot

systemctl status lircd.service
systemctl status lircd.socket

Тестирование IR пульта

После загрузки пробуем что-нибудь отправить в сторону ТВ. Тут есть нюанс. Мощности IR диода может быть маловато, особенно если вы поленились припаять MOSFET :) Поэтому, если ничего не получается, попробуйте поднести LED непосредственно к окошку IR датчика телевизора.

irsend SEND_ONCE SONY-TV KEY_1

Читаем RX

irw

Запись своих команд

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

systemctl stop lircd.socket
systemctl stop lircd.service

record with own key names
irrecord --disable-namespace

systemctl start lircd.socket
systemctl start lircd.service

Можно еще запустить рекордер в raw режиме (обычно не требуется)

irrecord -f -d /dev/lirc0 ~/lirc.conf

Настройка пульта

Если все ок, и ваш пульт читается на Малинке, вам нужно выбрать кнопки, которыми вы будете управлять Бабушкой. Вот полный список:

  • next
  • prev
  • forward +10min
  • backward -10min
  • play/pause toggle
  • pause on switching-off
  • stop
  • audio track switch
  • subtitles switch

Так они размечены в remoteir.sh

Впрочем, как показала практика, востребованы всего три: next, prev и play/pause toggle. Однако, если у вас хватает свободных кнопок на пульте, я рекомендую присвоить все. Делается это просто. В файле remoteir.sh нужно команды "ARR_DOWN" "ARR_UP" и т.д. заменить на те, что показывает вам irw при нажатии на соответствующие кнопки. Запустите irw и копируйте из вывода по очереди, нажимая кнопки.

irw

Установка основного пакета babooshka.tv

cd /home/pi/
git clone https://git.shalnoff.com/git/BABOOSHKA.TV
cd BABOOSHKA.TV/

Или если у вас не стоит git, просто скачайте последний снэпшот. В последнем случае не забудьте переименовать директорию в BABOOSHKA.TV после распаковки.

Убедитесь что все .sh скрипты запускаемые (выставлен флаг +x)

ls --all 

Если нет, сделайте chmod +x *.sh

Сервис systemd для раннего запуска (чтобы показывать заставку и включить LED управление)

Создаем /etc/systemd/system/splash.service и добавляет туда

[Unit]  
DefaultDependencies=no  
After=local-fs.target  

[Service]  
StandardInput=tty  
StandardOutput=tty  
ExecStart=/home/pi/BABOOSHKA.TV/early_init.sh  

[Install]  
WantedBy=sysinit.target  

Активируем сервис

sudo systemctl enable splash.service

Запуск при загрузке

Добавляем в /etc/rc.local строку

sudo -H -u pi /home/pi/BABOOSHKA.TV/start.babooshka.sh > /dev/null &

После чего перезагружаем (с sudo) и проверяем.

systemctl reboot

Если все ок, у нас замигает зеленый светодиод при загрузке и покажется заставка babooshka.tv. Она там демонстрируется чуть с опозданием. Т.е. вначале, все же, стартует файловая подсистема. Но я уже заморачиваться с интеграцией в ramfs не стал. Да и так даже круче. Люблю модный лог при перезагрузке на экране :) У нас он там коротенько выскакивает.

Далее

  • скопируйте пару каких-нибудь тестовых видео в директорию ~/BABOOSHKA.TV/VIDEO/
  • проверьте, что оно появилось в playlist (там раз в 10 секунд проверка)
  • нажмите кнопку, которой вы присвоили PLAY на пульте
  • если что-то не работает, смотрите Отладку, ниже

Косметическая полировка

Чтобы убрать вывод лога при старте, отредактируем /boot/cmdline.txt. Убедитесь, что у вас указаны console=tty3 quiet consoleblank=0 и logo.nologo. У меня строка параметров выглядит так:

console=serial0,115200 console=tty3 quiet consoleblank=0 loglevel=1 root=PARTUUID=6c586e13-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait logo.nologo

Выключаем мигающий курсор (возможно не нужно, попробуйте без этого сперва)

vt.global_cursor_default=0

Убираем tty login, чтобы курсор уж точно не появлялся

sudo systemctl disable getty@tty1 

Собственно все. Теперь осталось подключить все это к телевизору любимых родителей (ну или бабушки с дедушкой, в зависимости от возраста) и время от времени пополнять плейлист.

Ах да… про IR TX. Зачем TX, вы спросите. По не вполне осознанной причине я решил добавить и IR передатчик тоже. Во-первых, если что-то сбойнет, или родители забудут куда нажимать, можно всегда будет включить нужный видео-вход или отрегулировать громкость. Во вторых, я подумал, что для каких-то действий, возможно, потребуется комбинировать команды с управлением ТВ. Например, чтобы автоматически переключаться на нужный канал. Однако, в нынешней версии это пока никак не используется. Но управлять ТВ можно.

… версус цифровое ТВ

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

Про то, что молодой человек (кто бы сомневался) был из другой провайдер-компании и подмахнул пенсионерам мимоходом новый контракт, история умалчивает. Благо хоть за те же деньги примерно (аррр!...)

Ну да роботы бы с ней, подумал я. Будут мои родители теперь смотреть… другие каналы на русском языке, есть же вменяемые… Не тут то было. Приезжаю. И что вы думаете? Канал другой, но мир, несмотря на это, "вновь объят катастрофами, бла бла бла… международная обстановка накаляется, бла бла бла… наши самолеты самые самолетные в мире"… все вот это.

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

На том я и успокоился. Пока, однажды, исследуя известный китайский сайт на предмет нужных электронных компонентов, я не решил посмотреть, а что там насчет аналоговых ТВ конвертеров. Т.е. мне ранее приходила в голову мысль — а что, если подключить по высокочастотному каналу. Антена же свободна. И кнопка 1 на пульте для родителей привычна как ни что другое. Я было даже попробовал это дело на коленке, но ковыряться с аналоговым модулятором мне, по правде сказать, не шибко хотелось. В основном из за звука, который надо чуть смещать по частоте. Компонентов для схем найденных в Сети у меня сходу не нашлось. Короче я как-то "подзабил". Но тут вдруг подумал, а ведь наверняка есть готовый какой-нибудь модуль.

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

Китайская убер-коробочка

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

Плата TV-RF модулятора

Справедливости ради нужно отметить, что внутри был еще небольшого размера трансформатор, но его я сразу отпаял и отложил до лучших времен. Все остальное место пустовало. "Эта коробочка словно создана для того, чтобы быть переделанной в аналоговую медиа-приставку!" — подумал я.

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

будь внимателен, дорогой коллега. Мощность тут важна. Крохотный однокорпусной преобразователь ~200-5v на 400 mA, коих множество на Али, Малинку не запустит. Бери минимум на 1A.

Блок питания внутри импровизированного корпуса babooshka.tv. Не забудьте отпаять конденсатор перед выпиливанием боковой прорези.

Плату блока питания пришлось немного подпилить, чтобы она вставлялась между креплениями болтов. Кроме этого, я чуть увеличил боковые прорези разъема 220v, чтобы тот плотно зажимался между верхней и нижней частью корпуса.
За исключением этого разъем встал, как родной. Осталось только добавить micro USB для Малинки и микро-разъем для питания самого модулятора.

Модулятор питается вот так. 5v. Резистор R1 нужно выпаять.
Модулятор питается вот так. 5v. Резистор R1 нужно выпаять. (ах эти китайские солевые разводы на плате… помыл потом, конечно)

Подключение периферии

Люблю, чтобы было а) аккуратно б) ремонтропригодно. Т.е. чтобы ничего не болталось, проводки запаяны в кембрики, везде, где нужно — удобные разъёмчики.

проводки babooshka.tv

Вам наверняка понадобится распиновка Pi Zero IO
У меня подключено все следующим образом:

Оранжевый LED подсоединен напрямую к+3,3v через резистор 470R

GPIO 0  BCM17   LED зеленый, загрузка  
GPIO 2  BCM27   LED красный, статус видео (новое, незавершенное)

Токоограничительные резисторы требуются для всех диодов (Красный обычно ярче, так что я бы рекомендовал ~470R для оранжевого и зеленого и 1K для красного)

IR интерфейс

GPIO 3  BCM22   IR TX  
GPIO 4  BCM23   IR RX  

    38kHz -- стандарт 

    +-----------------------+ 3
    |                       +---------------------o +3.3V
    |      ______________   |
    |     /                 |
    |    (                  | 2  
    |     ______________   +---------------------o GND
    |                       |
    |                       | 1
    |               data -> +---------------------o GPIO 4 (BCM23)
    +-----------------------+

    950nm светодиод (например TSUS5400, но можно любой другой)

                     +5V
                      o
                      |
                     | |  51 Ohm (в зависимости от типа MOSFET, может и не нужен)
                     |_|
                      |
                     _|_
                      / 
                     ---  IR LED
                      |
                      |
         ___      |---'
  o-----|___|-----|       MOSFET
         10K      |->--
    GPIO 3 (BCM22)     |
                       |
                    ----- GND
                     ---
                      - 

Аналоговый звук, PWM выходы

GPIO 1  BCM18   R AUDIO
GPIO 23 BCM13   L AUDIO

Видео выход

RPi TV out
Картинка стащена отсюда, спасибо автору :)

Чтобы закрепить RPi внутри корпуса я приклеил пластиковые болтики к нижней стенке суперклеем. Рекомендую залить по бокам основательно и оставить сушиться. Моя первая попытка была не особо удачной. Сами болтики хорошо видны на картинке выше. А вот как выглядит все вместе в подключенном состоянии.

babooshka.tv в разобранном виде
Здесь вы также можете заметить переходничек для WiFi донгла. Он там отлично размещается внутри корпуса.

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

babooshka.tv, финальная сборка

Дыру для IR я закрыл вклеенным круглым кусочком акрила, ранее оставшимся от лазерной резки. Эту штуку я не придумал чем заменить пока. Было бы изящнее, конечно, сделать какую-то тонированную заглушку, прозрачную для 950nm.

babooshka.tv вид сзади. Все надписи, разумеется, не релевантны, но нужны ли они при таком раскладе :)
Оцените вид сзади. Все надписи, разумеется, не релевантны, но нужны ли они при таком раскладе :)

Если вы хотите управлять телевизором вашей бабушки, но он не реагирует на команды, попробуйте приделать удлинитель. Я у себя для этих целей намеренно сделал микро-разъем. Чтобы в случае чего…

IR диод может быть вынесен из корпуса и заклеплен возле датчика ТВ

Немного о нюансах

ТВ модулятор. "Колхозный" фильтр звука на SMD компонентах.

Это фильтр звука. Я собрал его вот по этой схеме.

RPi Zero Audio
Картинка стащенна вот отсюда, Спасибо автору!

Как видите, я слепил все там прямо на плате на SMD, перепилив и залудив дорожки. Однако, сейчас думаю, что навесным монтажем было бы проще и не так колхозно. Тем более, что места там уйма.

Все проводки целиком

Так выглядит все проводное подключение с разъемами целиком. Обратите внимание, IR датчик подключен на картинке неправильно. Будьте внимательны. Впрочем, благодаря тому факту, что я спалил-таки один, я выяснил, что качество их в комплекте не одинаковое. Т.е. в китайском наборе может быть один более чувствительный, а второй — так себе. Берите несколько, в общем. Тем более, что они копеечные по нынешним временам.

Работа устройства

babooshka.tv демонстрация работы

Что можно делать с пульта:

  • включать и выключать проигрывание видео;
  • проматывать видео взад и вперед (по 10 минут туда-сюда);
  • перемещаться по плейлисту взад и вперед также;
  • поставить на паузу видео (происходит автоматом, если выключить телек или переключиться на другой видео-вход);
  • листать титры одной кнопкой;
  • так же можно листать аудио дорожки (опять же одной кнопкой для простоты)

Сама же приставочка, кроме перечисленного, умеет делать следующее:

  • играть плейлист;
  • выбирать предпочтительный язык звуковой дорожки автоматически;
  • показывать наличие нового видео LED индикатором;
  • запоминать место остановки видео в случае выключения ТВ, чтобы потом в это же место "встать" при включении;
  • автоматически добавлять в плейлист новые файлы, появляющиеся в директориях VIDEO и YOUTUBE;
  • помечать просмотренные видео в плейлисте, а так же добавлять сколько/из скольки просмотрено (это чтобы вы могли мониторить, что родители уже посмотрели, например)

кроме этого можно

  • добавлять комментарии в сам плейлист (см Usage: при запуске без параметров);
  • скрывать "ремаркой" видео в плейлисте, добавляя символ ';' в начало строки;
  • настроить на "сплошное" проигрывание до конца плейлиста или проигрывание по одному видео (до нажатия кнопки в следующий раз) (см Usage: при запуске без параметров);

Теперь, чтобы закинуть что-нибудь в эту коробочку, я делаю

scp <your_super_cool_kitten_flick.mp4>  <babooshka>:BABOOSHKA.TV/VIDEO/

или

    ssh babooshka 
    cd BABOOSHKA.TV/YOUTUBE/
    youtube-dl -f 'bestvideo[vcodec=avc1][height<=720]+bestaudio/best[abr<=120]' --merge-output-format mp4 -o '%(playlist_index)s - %(title)s.%(ext)s' <youtube link>

и вуаля :) проблема родительского вечернего досуга решена.

Плюшки

Да. для того, чтобы работал youtube-dl вам нужно установить

apt install mkvtoolnix python-pip
pip install -U youtube-dl

Еще полезно записать вот эту команду для конвертирования. Ключевой параметр -level 3.0. Я ломал голову, пока не обнаружил, что хардверный кодек RPi не умеет в low profile. Вот здесь вы можете почитать подробнее про различия профилей H264.

ffmpeg -i FILEIN -vcodec libx264 -preset slow -level 3.0 -b 700k -s 720x404 FILEOUT

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

babooshka.tv обрела веселый стикер с логотипом

Что я планирую доделать

  • автоапдейт youtube-dl (актуальная штука)
  • автоскачивание с youtube (потому как предварительное ожидание, пока youtube-dl отдаст линк на RPi занимает время и выглядит не слишком комфортно) пока там предусмотрена картинка с загрузкой
  • приделать камеру и попробовать запустить там Tox, чтобы можно было бы еще и общаться непосредственно по телеку. Для родителей это будет супер-просто. В принципе там даже есть место для камеры внутри. Слева от IR сенсора.

Исходники и подробная инструкция по настройке

https://git.shalnoff.com/BABOOSHKA.TV

Пожалуйста, пользуйтесь и расскажите вашим друзьям.

Предвкушая вопросы аудитории, сразу скажу, почему я не стал использовать что-нибудь вроде готового дистрибутива OpenELEC или OSMC. Дело в том, что мне хотелось сохранить максимальную ТВ аутентичность и простоту интерфейса. Т.е. чтобы впечатление (думал минуту, как написать слово experience в контексте :) и ощущение было на 100% олдскульным и привычным моим пожилым родителям. Нажал кнопку — идет передача. К тому же, как я уже писал выше, все интерфейсы сложнее трех кнопок моих старичков только расстраивают :)

Возможно, для неискушенного юзернейма все это выглядит несколько сложновато. На деле же это весьма простая штука. Если не заморачиваться корпусом и светодиодами, то, фактически нужно только припаять IR приемник и провода для ТВ. (+ 4 резистора и 2 конденсатора для фильтра аудио, если у вас RPi Zero). А если приделать упомянутую коробочку, то можно и вовсе древний телевизор подключить, и тем самым осчастливить бабушку чудными домашними "передачами" или даже при помощи дополнительного скрипта на bash подписать ее на интересные и познавательные youtube каналы.

Небольшое лирическое отступление

Этот раздел сильно переработан. Сюда же включена бывшая премабула.

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

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

Уж не знаю, насколько просмотр качественных и интересных youtubе каналов скажется на их предпочтениях в долгосрочной перспективе. Но, во всяком случае, качество моих обсуждений с родителями разнообразных новостей и событий выросло несравненно. У нас теперь есть общие темы. Не говоря уже о том, что родителей несказанно радует формат домашних видеозарисовок. Для них это эдакое "продолжение телевидения" в котором теперь есть часть близкой им реальности.

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

Что дальше

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

  • сделать приватные плейлисты. Без регистрации и смс, просто добавлять instant ссылки по скрытым линкам, временные или постоянные, публичные или приватные;
  • формировать RSS/JSON/plain списки на основе этих листов;
  • сделать автоподгрузку оных в коробочку;
  • показывать статистику популярности публичных;
  • на основе этой статистики формировать тематические плейлисты;
  • дать возможность делиться плейлистами и добавлять листы других к себе в условный "френд-лист";
  • подписываться на RSS каналы с youtube/vimeo

Т.е. использовать это можно как агрегатор видео с youtube, vimeo и что там у нас еще. Сформированные листы можно использовать для чего угодно, не обязательно для моей коробочки. Можно подключить к тому же OpenELEC, или написать свое простое приложение, которое будет обновлять контент на домашнем медиацентре.

Еще, пожалуй, было бы отлично хранить/архивировать выборочно видео в IPFS.

Если у кого-нибудь есть идеи и желание принять участие… велкам. Пишите. Буду рад пообщаться. Не обещаю быстро отвечать, дел уйма. Но отвечу обязательно всем.

Папа и мама смотрят про котиков и внучку
Папа и мама смотрят про котиков и внучку

PS Disclaimer: ни в коем разе не делайте передатчик небольшой мощности для соседской бабушки. Это запрещено! Вдруг бабушка соседская до сих пор время от времени нажимает привычную кнопку и ненароком посмотрит какое-нибудь не то видео. А во многих населенных пунктах эта кнопка до сих пор работает как и прежде. В общем, я вас предупредил.

o----'///'----o

Автор: Dmitry Shalnov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js