Zapytała się mnie wczoraj koleżanka, czy znam jakieś rozwiązanie, co mogłoby usprawnić zarządzanie materiałami wyświetlanymi na telewizorach w salonie. Nic skomplikowanego, chodzi tylko o to by można było zdalnie zarządzać wyświetlaną treścią (odtwarzanie, zmiana filmu), bo obecnie pracownik włącza telewizor, i ręcznie uruchamia z podłączonego napędu flash materiał. Działa to relatywnie dobrze, ale gdy trzeba zmienić materiał, to zaczyna się „ręczna robota”.
Spis treści w artykule
Wyświetlanie materiałów promocyjnych na telewizorze
Rozwiązań, dzięki którym można wyświetlać materiał promocyjny na telewizorach (monitorach) w salonach/oddziałach jest sporo, wszystko zależy od dodatkowych wymagań, możliwości technicznych, i… finansowych.
Kilka lat temu, gdy jeszcze pracowałem na etacie w jednym z największych (jeśli nie największym) sklepów internetowych w Polsce, w salonach też mieliśmy telewizory, które wyświetlały wybrany przez nas materiał. Obraz był wyświetlany prosto z dedykowanego do tego celu komputera – mała i cicha jednostka, z odpowiednią liczbą portów DVI (tak, wtedy HDMI jeszcze nie był aż tak popularny).
Oczywiście w skrajnej sytuacji można wykorzystać do tego celu np. komputer w recepcji, na którym pracuje recepcjonistka – wystarczy telewizor podłączyć do komputera i ustawić tryb pracy na „rozszerz te ekrany”. Dzięki temu mamy jakby dwie przestrzenie robocze – na podstawowym monitorze normalnie można pracować, a to co chcemy wyświetlić na drugim monitorze (telewizorze) wystarczy przenieść „w prawo”, na drugi ekran.
Jest to rozwiązanie teoretycznie najprostsze, ale nie jestem jego zwolennikiem – nie dość, że tak naprawdę nigdy nie wiadomo co nam wyskoczy, i tym samym pojawi się na drugim ekranie, to jeszcze obraz jest zależny od działania komputera, na którym ktoś wykonuje normalną pracę. Można, ale…
Stąd wariant z dodatkowym, niezależnym urządzeniem jest jednak wariantem, na który ja bym się zdecydował (gdybym miał kilka salonów… w których chciałbym coś wyświetlać na ekranach ;-)). I o ile wariant z dodatkowym komputerem wydaje się najprostszy, to na potrzeby tego wpisu jest to rozwiązanie… za proste. No bo co to za filozofia uruchomić program do odtwarzania filmów na komputerze? ;-)
Raspberry Pi i OMXPlayer
I tu wkracza Raspberry Pi, czyli mikrokomputer za 35 $, który w aktualnej odsłonie (Raspberry Pi 3) ma wystarczająca moc by sprostać temu zadaniu. Mamy tu pełnoprawny system operacyjny (np. Raspbian bazujący na Debianie), dodatkowo WiFi, czyli internet bezprzewodowy, a całość może być zasilana z ładowarki od telefonu, czy też portu USB w telewizorze. Wręcz idealnie.
Tu również mamy przynajmniej kilka możliwych rozwiązań do wdrożenia, ale na potrzeby demonstracji postanowiłem skorzystać z programu OMXPlayer, którym można sterować bezpośrednio z konsoli (skrypty!):
OMXPlayer is a commandline OMX player for the Raspberry Pi. It was developed as a testbed for the XBMC Raspberry PI implementation and is quite handy to use standalone.
Podstawowe polecenie by odtworzyć film wygląda tak:
sudo omxplayer /home/patryk/film.mp4
Ale skoro ma to być film odtwarzany bez przerwy, to dodamy pętle (–loop), wymusimy wyjście obrazu na port HDMI (-o hdmi), wyłączymy – prewencyjnie – sterowanie z klawiatury (–no-keys), oraz wyczernimy ekran nad i pod filmem (-b), i na deser dołożymy jeszcze odświeżanie parametrów filmu (-r):
sudo omxplayer /home/patryk/film.mp4 -b -r --loop -o hdmi --no-keys
Można też do polecenia dodać kilka innych parametrów, związanych z napisami (plik z napisami, rozmiar znaków, wyrównanie i liczba linii):
sudo omxplayer /home/patryk/film.mp4 -b -r --loop -o hdmi --no-keys --subtitles /home/patryk/film.srt --font-size 50 --align center --lines 3
Ale by móc w konsoli wykonywać w tym czasie również inne operacje możemy całość uruchomić „w tle”, w ramach wirtualnej konsoli, korzystając z programu Screen:
screen -dmS omx sudo omxplayer /home/patryk/film.mp4 -b -r --loop -o hdmi --no-keys
W jakieś wyszukane zatrzymywanie odtwarzania nie będziemy się bawić, a potraktujemy całość z grubej rury:
sudo killall -s 9 omxplayer
I jeśli chodzi o podstawy, to właściwie tyle…
Skrypt zarządzający
I choć przedstawione rozwiązanie będzie działać, to od razu pomyślałem o tym, by ubrać je w jakiś skrypt, który wspomógłby zarządzanie odtwarzaniem, a przy okazji od razu wstawiłbym tam fragment odpowiedzialny za pobieranie nowej wersji pliku z internetu (ręcznie, lub za pomocą CRONa).
I tak powstał prosty skrypt, który automatyzuje wyświetlanie filmów telewizorze z wykorzystaniem Raspberry Pi (nie mylić z miniDLNA, które wprawdzie również służy do wyświetlania m.in. filmów na telewizorze, ale trochę w innym kontekście ;-)):
#!/bin/bash
### BEGIN INIT INFO
# Provides: omxplayer-demo
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
# Nazwa skryptu:
NAME=omxplayer-demo
SCRIPTNAME=/etc/init.d/$NAME
# Dostępne parametry:
COMMANDS="{start|stop|restart|update|enable|disable|install|uninstall}"
# Instalacja
f_install()
{
sudo cp -r $0 /etc/init.d/$NAME
sudo insserv $NAME
sudo ln -s /etc/init.d/$NAME /usr/local/bin/$NAME
sudo /etc/init.d/$NAME start
exit 0
}
# Dezinstalacja
f_uninstall()
{
sudo /etc/init.d/$NAME stop
sudo update-rc.d $NAME remove
sudo rm /etc/init.d/$NAME
sudo rm /bin/$NAME
exit 0
}
# Start
f_start()
{
# ON HDMI (opcjonalnie, odkomentuj):
#sudo tvservice --explicit="CEA 16"
# ON screen/konsola (opcjonalnie, odkomentuj):
#sudo vcgencmd display_power 1
# Odtwarzanie:
screen -dmS omx sudo omxplayer /home/patryk/film.mp4 -b -r --loop -o hdmi --no-keys
# Wersja z dodatkowymi parametrami do obsługi napisów (alternatywa):
#sudo omxplayer /home/patryk/film.mp4 -b -r --loop -o hdmi --no-keys --subtitles /home/patryk/film.srt --font-size 50 --align center --lines 3
}
# Stop
f_stop()
{
# OFF:
sudo killall -s 9 omxplayer
# OFF HDMI (opcjonalnie, odkomentuj):
#sudo tvservice --off
# OFF screen/konsola (opcjonalnie, odkomentuj):
#sudo vcgencmd display_power 0
}
# Aktywacja automatycznego uruchamiania z systemem
f_enable()
{
sudo systemctl enable $NAME
}
# Dezaktywacja automatycznego uruchamiania z systemem
f_disable()
{
sudo systemctl disable $NAME
}
# Pobieranie pliku z serwera
f_download()
{
sudo wget -O /home/patryk/film.mp4 "https://adres.serwera/film.mp4"
}
case "$1" in
start)
f_start
;;
stop)
f_stop
;;
restart)
f_stop
f_start
;;
update)
f_download
f_stop
f_start
;;
enable)
f_enable
;;
disable)
f_disable
;;
install)
f_install
;;
uninstall)
f_uninstall
;;
*)
echo "Use: "$SCRIPTNAME $COMMANDS
exit
;;
esac
exit 0
Na początek instalujemy skrypt za pomocą polecenia:
sudo ./omxplayer-demo install
Co spowoduje skopiowanie skryptu do katalogu „/etc/init.d”, dodanie linku symbolicznego w „/usr/local/bin” dla wygodniejszej dalszej obsługi, oraz ustawienie startu skryptu wraz z systemem (w tle). Później, zamiast „install” możecie dać „uninstall” by odinstalować skrypt.
sudo chmod +x omxplayer-demo
W skrypcie ważne są 2 lokalizacje – z filmem do odtwarzania:
/home/patryk/film.mp4
Oraz adres serwera by pobierać nowe wersje filmu (możecie pominąć, jeśli nie planujecie zdalnej aktualizacji):
https://adres.serwera/film.mp4
Więc tu musicie zmienić ścieżki wedle własnych potrzeb.
Dalsza obsługa jest banalna – skrypt uruchomi odtwarzanie filmu po każdym uruchomieniu Raspberry Pi. Możecie tym zarządzać za pomocą poleceń:
sudo omxplayer enable
sudo omxplayer disable
W każdej chwili można też ręcznie zatrzymać lub rozpocząć odtwarzanie:
sudo omxplayer start
sudo omxplayer stop
sudo omxplayer restart
Ostatnim poleceniem jest aktualizacja filmu do odtwarzania:
sudo omxplayer update
W tym momencie skrypt połączy się ze wskazanym adresem i pobierze znajdujący się tam film, który zastąpi dotychczas odtwarzany.
Możecie też to zautomatyzować, np. za pomocą CRONa ustawiając automatyczne pobieranie nowej wersji filmu np. codziennie, o 3 w nocy:
0 3 * * * root /usr/local/bin/omxplayer-demo update >/dev/null 2>&1
Oczywiście jest to dość prosty przykład na zastosowanie Raspberry Pi jako urządzenia zarządzającego automatycznym odtwarzaniem materiałów wideo na podłączonych ekranach (monitory lub telewizory), i wersja produkcyjna jest trochę bardziej rozbudowana, zgodnie z dodatkowymi wymaganiami (dodatkowe mechanizmy autoryzujące, powiadomienia na e-mail, sterowanie z połączonego pilota Bluetooth…).
- Home Assistant 2024.11, czyli „sekcje” domyślnym widokiem z opcją migracji, WebRTC oraz wirtualna kamera - 1970-01-01
- Black Friday w ZUS, czyli jest jeszcze kilka dni, by złożyć wniosek RWS i skorzystać z wakacji składkowych płacąc ZUS za grudzień 2024 - 1970-01-01
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
A czemu uruchamiasz omxplayer jako sudo?
Trochę z rutyny, ale tak naprawdę dlatego, że inaczej jest błąd:
A przykład ma działać. Ale oczywiście można też zmodyfikować uprawnienia użytkownika i/lub zasobu.
Witam, odezwij się na priv, bardzo mnie zaciekawił ten artykuł a właśnie szukam kogoś kto zna się na tym temacie i konfiguracji urządzenia pod wyświetlanie reklam
Odezwałem się. Teraz Ty musisz ;-)
Pytanie, bo mi chodzi ostatnio po głowie projekt. Masz może pomysł jak zrobić podobny „odbiornik” radia? Tak by odtwarzał radia internetowe (ew. FM pewnie po odbiorniku DVB-T), wybrane mp3/playlisty? Tak by osoby z sieci wifi mogły tym kierować via www.
Z radiem coś kilka lat temu z kolegą kombinowaliśmy w takiej formie (odbiór z anteny i transmisja po LANie), ale nie pamiętam teraz czego – jeśli chodzi o oprogramowanie – wtedy używaliśmy. Na pewno do transmisji audio po LANie (ew. przez internet) można wykorzystać np. Raspberry Pi i MPD (Music Player Daemon).
witam, wspominasz coś o wersja produkcyjnej tego skryptu
Tak, przy czym są to wdrożenia mocno indywidualne, dostosowane do potrzeb danego klienta. Alternatywnie możesz zainteresować się np. Screenly. Czy to w wersji Open Source Edition (Screenly OSE), czy to płatnej. Od dawna mam w planach artykuł na temat tego rozwiązania, zwłaszcza że już kilka wdrożeń za mną, ale jakoś cały czas mi ten temat ucieka… ;-)
jak najbardziej próbowałem Screenly Open Source Edition ale instalacja na Raspberry Pi 4 nie działa podobno trzeba mieć
Raspberry Pi 3, chyba że Tobie się udało ? co do puszczania spotów reklamowych na omxplayer też mam ciemny ekran
A masz pomysł na jakieś rozwiązanie z templatką? Czyli treść dynamiczna nie wykorzystuje 100% powierzchni strony, ale wpisuje się w przypisane „okienka”.
OMX wprawdzie umożliwia – z tego, co kojarzę – odpalania kilku instancji z różnymi konfiguracjami „okna”, ale nie wiem, czy w takim przypadku nie lepiej sięgnąć jakieś dedykowane rozwiązania, jak np. Screenly. Czy to w wersji Open Source Edition (Screenly OSE), czy to płatnej. Albo nawet jeszcze bardziej zaawansowane rozwiązania, choć one zazwyczaj już są płatne…
Mam pytanie, czy da się wyświetlać tym programem zdjęcia/stille i sterować np. przez przeglądarkę?
Potrzebuję urządzenia które będzie wyświetlać statyczny obraz, który będzie można zmienić klikając odpowiedni guzik np klawiaturze numerycznej lub przez przeglądarkę
Obrazy to raczej nie, do tego są inne aplikacje (np. feh, fbi). Ze sterowaniem przez przeglądarkę też nie powinno być problemy, choć będziesz musiał to sobie odpowiednio oskryptować. Ale być może lepszym rozwiązaniem – zwłaszcza jeśli ma to być coś bardziej pro – będzie np. Screenly. Czy to w wersji Open Source Edition (Screenly OSE) czy płatnej.