Raspberry Pi – Malina w roli domowego serwera TV

Jednym z moim zdaniem ciekawszych zastosowań Raspberry Pi jest możliwość postawienia na nim serwera TV, dzięki któremu możemy oglądać telewizję naziemną np. w laptopie bez plątania się z kablami antenowymi. W dzisziejszym artykule dowiemy się jak skonfigurować w ten sposób naszą malinkę.

Potrzebujemy tunera

Pierwsze, co musimy zrobić to zaopatrzyć się w tuner DVB-T na USB, który jest kompatybilny z systemem Linux. Ja mam na stanie tuner Media-Tech MT4171 i mogę potwierdzić, że działą dobrze z mainką :) Jest też relatywnie tani. Obraz z niego nie jest najlepszej jakości, ale da się oglądać.

Instalacja sterownika

Instalacja sterownika do tunera TV ogranicza się do ściągnięcia jednego skryptu i uruchomienia go, a następnie skopiowania plików, które ściągnął w odpowiednie miejsce.

Musimy ściągnąć ten skrypt. W tym celu wpisujemy do terminala następujące polecenie:

wget https://raw.githubusercontent.com/OpenELEC/linux/master/Documentation/dvb/get_dvb_firmware

Teraz nadajemy mu uprawnienia do wykonywania i wykonujemy z odpowiednim parametrem dla naszego modelu tunera (w przypadku mojego media-techa jest to it9135)

chmod +x ./get_dvb_firmware
./get_dvb_firmware it9135

W moim przypadku pobrały się 2 pliki:

  • dvb-usb-it9135-01.fw
  • dvb-usb-it9135-02.fw

Teraz musimy skopiować je do folderu /etc/firmware/. Jest to folder systemowy, więc operację kopiowania musimy wykonać z uprawnieniami administratora.

sudo cp dvb-usb-it9135* /lib/firmware/

Teraz możemy uruchomić ponownie malinkę, ale ja poczekam z restartem aż zainstaluję tvheadend.

Instalacja tvheadend

Aby dodać repozytorium z którego ściągniemy nasz docelowy program będziemy potrzebowali programu dirmngr. Jeżeli nie mamy go zainstalowanego to wpisujemy

sudo apt-get install dirmngr

Kiedy już się pobierze i zainstaluje dodajemy repo zawierające tvheadend do naszej listy i aktualizujemy ją.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61
echo "deb https://dl.bintray.com/mpmc/deb raspbianstretch stable-4.2" | sudo tee -a /etc/apt/sources.list
sudo apt-get update

Teraz możemy już zainstalować serwer

sudo apt-get install tvheadend

W trakcie instalacji konfigurator zapyta nas o login administratora oraz hasło jakiego będizemy używali do konfiguracji, a następnie poinformuje na jakim porcie uruchomiona zostanie strona z ustawieniami.

Konfiguracja statycznego IP

Jeżeli nie chcemy przy każdym restarcie maliny przekonfigurowywać programów do odbioru telewizji z niej musimy ustalić dla niej stałe IP. Możemy to zrobić z poziomu routera, ale jeżeli nie potrafimy tego zrobić (lub np. nasz ISP nie pozwala na zmianę ustawień routera, który nam dzierżawi, a nie mamy akurat żadnego innego) to takie statyczne IP można ustawić ręcznie w pliku konfiguracyjnym /etc/dhcpcd.conf.

W tym celu ponownie z uprawnieniami administratora musimy zmodyfikować owy plik.

sudo nano /etc/dhcpcd.conf

Teraz szukamy w nich linijek podobnych do tych na screenie:

Domyślnie będą one zakomentowane znakiem # na początku każdej linii. Musimy odkomentować przynajmniej te linijki, które widać na powyższym screenie pod nagłówkiem Example static IP configration.

static ip_address=192.168.55.108/24 oznacza adres 192.168.55.108 z maską podsieci 255.255.255.0. Parametr routers to adresz naszej bramy (zwykle jest to pierwszy lub ostatni adres w podsieci), natomiast domain_name_servers to adresy serwerów DNS. U mnie ustawiłem adres mojej bramy (w której są skonfigurowane DNSy dostawcy, jako alternatywny DNS użyłem googlowego. Ostatni adres IPv6 był tam domyślnie, więc go zostawiłem, ale można go bez problemu usunąć.

Jeżeli wszystko z powodzeniem skonfigurowaliśmy to możemy teraz uruchomić ponownie malinkę.

sudo reboot

Konfiguracja tvheadend

Aby otworzyć panel utawień tvheadend musimy wejść przez przeglądarke na adres naszej malinki na porcie 9981 (jeżeli macie graficzne środowisko to adresem tym będzie localhost, ale tylko z poziomu raspberry). Po pierwszym zalogowaniu się panel zaproponuje nam półautomatyczny konfigurator, który zrobi wszystko za nas. Jeżeli chcecie to możecie go użyć jednak moim zdaniem te domyślne konfiguracje są takie sobie (a przynajmniej w naszym kraju). Pokażę Wam jak ręcznie wyszukać kanały.

Musimy przejść do zakładki DVB Inputs, a następnie do TV adapters. Tam powinniśmy znaleźć nasz adapter. Jeżeli nie ma go tam to niestety ale musimy przejrzeć instrukcję od początku, bo coś poszło nie tak. Jeżeli wszystko gra to przechodzimy do zakładki Networks.

Tu musimy dodać nową sieć. W tym celu wciskamy przycisk Add, a następnie z listy wybieramy typ DVB-T Network i nadajemy jej nazwę np. Naziemna.

Teraz możemy kliknąć na Create.

Jeszcze jedną rzeczą, którą musimy zrobić jest powiązanie tunera z nowo utworzoną siecią. Ponownie przechodzimy do zakładki TV Adapters, wybieramy nasz tuner i w polu Networks zaznaczamy naszą sieć po czym zapisujemy ustawienia.

W kolejnym kroku przechodzimy do zakładki Muxes. Tutaj musimy znać parametry nadajników z których chcemy odbierać sygnał. Lista polskich muxów znajdziecie na tej stronie.

Ja zaprezentuję tutaj przykład dla MUX-2 nadawany z Warszawa „Raszyn”.

Wciskamy przycisk Add, wybieramy sieć Naziemna i przepisujemy odpowiednie dane ze strony (zaznaczyłem je na rysunku tymi samymi kolorami)

Kiedy dodamy MUX powinien pojawić się on na liście ze statusem PENDING, co oznacza że za chwilę zostanie przeksanowany w poszukiwaniu kanałów.

Po przeksanowaniu powinniśmy zobaczyć coś takiego:

Pole Transport stream ID powinno odpowiadać ID naszego MUXa, czyli w tym przypadku 2. W polu Services znajdziemy liczbę mówiącą nam ile kanałów zostało znalezionych na MUXie. Jeżeli Scan result nie jest OK lub nie znalazło nam wszystkich kanałów których się spodziewaliśmy to znaczy, że mamy problem z anteną lub sygnał jest za słaby.

Jeżeli dodaliśmy już wszystkie MUXy możemy przejść do zakładki Services i zmapować znalezione kanały. W tym celu wybieramy tam opcję Map services > Map all services i wciskamy przycisk Map services w okienku, które wyskoczy (tak wiem, masło maślane, ale sami zobaczcie na screenie :P).

Po zmapowaniu kanałów powinniśmy mieć do nich dostęp z poziomu zakładki Electronic Program Guide.

Odbieranie sygnału TV przez sieć

Odebrać sygnał z tvheadend możemy między innymi na komputerze (np. przez Kodi i wtyczkę tvheadend), na telefonie/tablecie z Androidem za pomocą aplikacji takiej jak np. TVHGuide.

Ja jednak pokażę Wam jak skonfigurować przystawkę telewizyjną z systemem Android TV (w moim przypadku jest to Xiaomi MiBox 3).

W pierwszym kroku instalujemy ze Sklepu Play program o nazwie TV Headend Live Channels. Od razu możemy go uruchomić. Naszym oczom powinien ukazać się taki konfigurator:

Zacznijmy więc konfigurację. W pierwszym kroku musimy utworzyć użytkownika. Wybieramy więc opcję Account Selection, a następnie Add New Account.

Program zapyta nas teraz o adres serwera tvheadend oraz port HTSP (nie mylić z portem HTTP, który wynosi 8891). Domyślny port HTSP w tvheadend to 8892 i taki też podajemy:

W kolejnym kroku zostaniemy poproszeni o podanie nazwy użytkownika i hasła. Może to być użytkownik admin, któego konfigurowaliśmy przy instalacji lub inny użytkownik, któego możemy dodać w zakładce Users w panelu WWW.

Po pomyślnym dodaniu użytkownika należy go wybrać, a następnie przejść do kolejnego kroku.

Ostatni krok to w zasadzie ekran informacyjny. Należy na nim potwierdzić że wszystko skończone i cieszyć się, że nasza podstawka multimedialna może teraz odbierać normalną telewizję :) Nie musimy już przełączać się pomiędzy sygnałem HDMI a DVB-T telewizora, a nawet możemy taką podstawkę podłączyć do monitora i mamy SmartTV z androidem wyjątkowo niskim kosztem :)