oDroid XU4: TVHeadend installieren und konfigurieren
Ich verwende seit nun etwa einem Jahr einen Raspberry Pi 3, USB-TV-Tuner und TVHeadend-Service, um überall im Haus auf jedem Gerät Fernsehen schauen zu können – eine klassische IPTV Infrastruktur. Zusätzlich kann ich damit das Fernsehprogramm aufzeichnen. Leider habe ich bei TV-Sendern im HD-Format schnell die Grenzen der kleinen Himbeere erreicht, denn ungefär alle 2-3 Minuten sind Fragmente im Bild. Zum einen dürfte dies an der geringen Bandbreite (TV-Signal über USB in die Beere und dann via LAN-Kabel weiter) und der sowieso geringen Systemleistung liegen. Probleme, die ein oDroid XU4 nicht unbedingt hat. Neben der wesentlich höheren Performance, ist das LAN mit GBit angebunden. Die oDroid XU4 TVHeadend Installation verlief bei mir größtenteils reibungslos, ist aber natürlich abhängig von dem TV-Tuner. Die Konfiguration hingegen hat ihre Tücken. Folgend möchte ich euch erklären, was dabei zu beachten ist.
Was wird benötigt?
* hierbei handelt es sich um Affiliatelinks. Das bedeutet, dass ich im Falle eines Kaufes Ihrerseits einen geringen Prozentsatz des Kaufpreises als Vermittlungsgebühr erhalte. Für Sie entstehen dabei keinerlei Mehrkosten.
Welchen TV-Tuner man genau benötigt hängt natürlich davon ab, wovon man das TV-Signal anzapfen möchte. In meinem Fall handelt es sich um Kabelfernsehen aus der Dose von meinem Regionalanbieter wilhelm.tel. Es gibt erhebliche Unterschiede was die Treiber-Verfügbarkeit für Linux bei den verschiedenen USB-Tunern angeht, weshalb ich im folgenden Tutorial leider nur Bezug auf meinen nehmen kann.
Zum Abspielen an den Fernsehern verwende ich hauptsächlich FireTV Sticks*, als auch FireTV Boxen*. Einfach Kodi auf dem FireTV installieren und dann unter AddOns „Tvheadend HTSP Client“ installieren und konfigurieren.
oDroid XU4 einrichten und Treiber installieren
Ich habe meinen oDroid frisch aufgesetzt mit dem neuesten Ubuntu 18.04 Image (20180531, MINIMAL, BARE OS), dass es aktuell (August 2018) gibt. Die aktuellsten Images für den oDroid XU4 findet man immer im offiziellen Hardkernel Wiki. Die Prozedur wie man ein Image installiert gibt es im Internet zu Hauf, darauf verzichte ich also.
Unter dem frisch installierten Betriebssystem habe ich mich erstmal darauf konzentriert den Treiber des Tuners zum Laufen zu bekommen. Sobald das läuft, hat man sich keine falschen Mühen mit der Kompilierung von TVHeadend gemacht. Als ersten Schritt muss man herausfinden, welchen Chip der USB-Tuner hat. Meistens kann man diesen dann bei Google eingeben und findet dazu passende Treiber für Linux. Gebt folgenden Befehl in die Shell ein:
1 2 | root@odroid:~# lsusb Bus 001 Device 002: ID 0572:0320 Conexant Systems (Rockwell), Inc. DVBSky T330 DVB-T2/C tuner |
Der DVBSky T330 Chip wird in sehr vielen USB-TV-Tunern verbaut. Es kann also gut möglich sein, dass du einen komplett anderen Stick erworben hast und dennoch den selben Chip vorfindest. In diesem Fall hast du Glück, denn Treiber für diesen Chip werden hervorragend für Linux gepflegt. Unter http://www.dvbsky.net/Support_linux.html findet man eine kurze Übersicht, was es zu installieren gibt. Ich habe jeweils den „Upstream Driver“ und die Firmware eingespielt. Dies geht wie folgt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # Upstream Driver installieren git clone git://linuxtv.org/media_build.git cd media_build ./build make install # Firmware installieren mkdir -p /tmp/dvbfw/ && cd /tmp/dvbfw/ apt update && apt install unzip wget http://www.dvbsky.net/download/linux/firmware.zip unzip firmware.zip chmod +x copy_firmware.sh ./copy-firmware.sh # Firmware durch Neustart laden reboot |
Nach erfolgtem Neustart sollte der Kernel die nötige Firmware und Treiber geladen haben. Am besten testen wir dies gleich. Genutzt habe ich dazu das Kommandozeilen-Programm „w-scan“. Es ist in den Paketquellen zu finden und wird wie folgt installiert.
1 | apt update && apt install w-scan |
Mit dem Befehl w_scan -c DE -fc -X lässt sich dann testen, ob wir auf den Fernseh-Frequenzen ein Signal finden. Mit -c DE setzen wir das Land, mit -fc nutzen wir DVB-C und mit -C UTF-8 setzen wir das Encoding. Falls man anstelle von DVB-C etwas anderes verwendet, gibt es noch folgende Möglichkeiten:
1 2 3 4 5 6 7 | root@odroid:~# w_scan --help -f type, --frontend type What programs do you want to search for? a = atsc (vsb/qam) c = cable s = sat t = terrestrian [default] |
Wenn alles funktioniert sieht es in etwa so aus (Auszug):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | root@odroid:~# w_scan -c DE -fc -C UTF-8 w_scan -c DE -fc -C UTF-8 w_scan version 20170107 (compiled for DVB API 5.10) using settings for GERMANY DVB cable DVB-C scan type CABLE, channellist 7 output format vdr-2.0 output charset 'UTF-8' Info: using DVB adapter auto detection. /dev/dvb/adapter0/frontend0 -> CABLE "Silicon Labs Si2168": very good :-)) Using CABLE frontend (adapter /dev/dvb/adapter0/frontend0) -_-_-_-_ Getting frontend capabilities-_-_-_-_ Using DVB API 5.10 frontend 'Silicon Labs Si2168' supports INVERSION_AUTO QAM_AUTO FEC_AUTO FREQ (42.00MHz ... 870.00MHz) SRATE (1.000MSym/s ... 7.200MSym/s) -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 73000: sr6900 (time: 00:00.024) sr6875 (time: 00:01.556) 81000: sr6900 (time: 00:06.128) sr6875 (time: 00:07.672) 113000: sr6900 (time: 00:12.240) signal ok: QAM_AUTO f = 113000 kHz S6900C999 (0:0:0) QAM_AUTO f = 113000 kHz S6900C999 (0:0:0) : updating network_id -> (0:41030:0) new transponder: (QAM_256 f = 634000 kHz S6900C0 (41030:41030:42)) 0x4044 new transponder: (QAM_64 f = 642000 kHz S6900C0 (1:41030:1093)) 0x4044 new transponder: (QAM_64 f = 650000 kHz S6900C0 (1:41030:1089)) 0x4044 new transponder: (QAM_256 f = 658000 kHz S6900C0 (1:41030:1011)) 0x4044 new transponder: (QAM_256 f = 666000 kHz S6900C0 (41030:41030:14)) 0x4044 new transponder: (QAM_256 f = 674000 kHz S6900C0 (41030:41030:15)) 0x4044 new transponder: (QAM_256 f = 682000 kHz S6900C0 (41030:41030:16)) 0x4044 new transponder: (QAM_256 f = 690000 kHz S6900C0 (41030:41030:47)) 0x4044 new transponder: (QAM_256 f = 698000 kHz S6900C0 (41030:41030:21)) 0x4044 new transponder: (QAM_256 f = 706000 kHz S6900C0 (41030:41030:19)) 0x4044 new transponder: (QAM_256 f = 714000 kHz S6900C0 (41030:41030:20)) 0x4044 new transponder: (QAM_256 f = 722000 kHz S6900C0 (133:41030:6)) 0x4044 new transponder: (QAM_256 f = 730000 kHz S6900C0 (133:41030:12)) 0x4044 new transponder: (QAM_256 f = 738000 kHz S6900C0 (133:41030:13)) 0x4044 new transponder: (QAM_256 f = 746000 kHz S6900C0 (1:41030:1201)) 0x4044 new transponder: (QAM_256 f = 754000 kHz S6900C0 (41030:41030:24)) 0x4044 new transponder: (QAM_256 f = 762000 kHz S6900C0 (41030:41030:25)) 0x4044 new transponder: (QAM_256 f = 770000 kHz S6900C0 (41030:41030:26)) 0x4044 new transponder: (QAM_256 f = 290000 kHz S6900C0 (41030:41030:36)) 0x4044 new transponder: (QAM_256 f = 306000 kHz S6900C0 (1:41030:1051)) 0x4044 new transponder: (QAM_256 f = 314000 kHz S6900C0 (41030:41030:31)) 0x4044 new transponder: (QAM_256 f = 322000 kHz S6900C0 (41030:41030:32)) 0x4044 new transponder: (QAM_256 f = 330000 kHz S6900C0 (1:41030:1025)) 0x4044 new transponder: (QAM_256 f = 362000 kHz S6900C0 (41030:41030:27)) 0x4044 new transponder: (QAM_256 f = 370000 kHz S6900C0 (1:41030:1019)) 0x4044 new transponder: (QAM_256 f = 378000 kHz S6900C0 (133:41030:9)) 0x4044 new transponder: (QAM_64 f = 386000 kHz S6900C0 (1:41030:1101)) 0x4044 new transponder: (QAM_64 f = 394000 kHz S6900C0 (1:41030:1079)) 0x4044 new transponder: (QAM_64 f = 402000 kHz S6900C0 (1:41030:1073)) 0x4044 new transponder: (QAM_256 f = 410000 kHz S6900C0 (133:41030:3)) 0x4044 new transponder: (QAM_256 f = 418000 kHz S6900C0 (133:41030:4)) 0x4044 new transponder: (QAM_256 f = 426000 kHz S6900C0 (133:41030:2)) 0x4044 [..] |
oDroid XU4 TVHeadend kompilieren
Nachdem wir uns nun vergewissert haben, dass die Treiber richtig laufen und der Stick ein Fernsehsignal einfangen kann, können wir uns endlich der Kernanwendung zuwenden: TVHeadend. Das oDroid XU4 TVHeadend Setup ist relativ einfach, leider ist aber eine selbstständige Kompilierung von Nöten, da zum aktuellen Zeitpunkt (24. August ’18) keine Pakete für Ubuntu 18.04 in den zuständigen Paketquellen sind. Aber alles halb so wild, es sind nur wenige Befehle die alles selbstständig erledigen. Zu aller erst installieren wir alle Abhängigkeiten:
1 | apt update && apt install git build-essential debhelper pkg-config fakeroot libavahi-client-dev libssl-dev zlib1g-dev liburiparser-dev python cmake dvb-apps libcurl14-gnutls-dev liburiparser-dev libavcodec-dev |
Und los geht’s:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # Git Repo herunterladen git clone https://github.com/tvheadend/tvheadend.git ~/build/tvheadend/master # In Ordner wechseln cd ~/build/tvheadend/master/ # wir wollen die letzte Stable Version (aktuell 4.2) # # um herauszufinden, welche die letzte Stable Version ist, # muss man sich die Branches der GitHub Seite ansehen git checkout release/4.2 # Kompiliervorgang starten ./configure AUTOBUILD_CONFIGURE_EXTRA=--disable-bintray_cache\ --disable-ffmpeg_static ./Autobuild.sh # auf dem oDroid XU4 TVHeadend installieren cd ~/build/tvheadend/ dpkg -i tvheadend_4.2.6-16~g42e737f28_armhf.deb |
Wie man sieht habe ich ffmpeg deaktiviert, da ich es damit leider nicht zum Laufen bekommen habe. Offenbar wird es u.A. zum Komprimieren (Transcoding) des Datenstroms verwendet. Da ich aber nur in meinem Heimnetz schaue, ist es in meinem Fall nicht nötig, da die Bandbreiten ausreichen. Sollte es jemand zum Laufen bekommen, kann derjenige sich aber gerne in den Kommentaren melden 🙂
Nun läuft auf dem oDroid XU4 TVHeadend. Sollte das nicht der Fall sein, kann man es mit systemctl start tvheadend starten. Das Autobuild-Skript legt nämlich ein Start/Stop Skript für uns an und sorgt gleichzeitig dafür, dass tvheadend unter einem eigenen Benutzer läuft.
Sendersuchlauf starten
Man kann das Web-Interface von TVHeadend fortan unter der IP des oDroids und dem Port 9981 erreichen. Zuerst loggt man sich mit den Zugangsdaten ein, die man im Installationsvorgang festgelegt hat und wird dann direkt von einem Einrichtungsassistenten begrüßt. Dieser begleitet einen durch den ersten Sendersuchlauf.
Ich habe mir die Zeit erspart und einfach die alten Konfigs meines Raspberry Pi 3 eingespielt. Für wen dies auch relevant ist: einfach den Ordner /home/hts/.hts vom alten Gerät auf den oDroid XU4 übertragen und TVHeadend neustarten. Beim normalen Weg mit dem Einrichtungsassistenten sollte man auf keine Probleme stoßen, solange die Treiber richtig laufen und w_scan Fernsehsignale entdecken kann.
Fazit
Nun ist auf unserem oDroid XU4 TVHeadend. Die Konfiguration für’s Aufnehmen und TimeShifting ist unkompliziert (Configuration -> Recording).
Ich denke bereits darüber nach mir einen zweiten USB-TV-Tuner zuzulegen, denn sobald der Stick genutzt wird um fern zu sehen oder etwas aufzunehmen, kann man keinen anderen Fernsehsender mehr betrachten.
Aber ansonsten sehe ich im Vergleich zu meinem RPi3 keine Fragmente mehr im Bild, also hat sich die Migration schon aus dem Grund gelohnt. Getestet habe ich das alles auf einer extra microSD-Karte. Zum Schluss musste ich also alles wieder auf meinen eMMC Speicher migrieren. Wie dies funktioniert, habe ich bereits in dem Beitrag oDroid XU4: Migration von microSD zu eMMC Speicher erläutert.
Kommentare (10)
Hi Dennis,
danke für die gute Anleitung, nach längerer Zeit habe ich mich wieder mit der Möglichkeit des tvh Einsatz grundsätzlich beschäftigt! Dank Dir mit vollem Erfolg 🙂
Zusätzlich sei bemerkt die Verbindung tvh (@odorid xu4) mit Kodi 17 & 18 ( jeweils OSMC Variante) @RPI3 & dem SAT>IP Tuner Digibit R1 läuft es nahezu perfekt!
Grüße
Matthias Laue
Hi Matthias,
ich nutze Kodi auf einem FireTV Stick und bin auch nahtlos zufrieden. Du sagst es läuft „nahezu“ perfekt – was stimmt denn bislang nicht?
VG
Vielen Dank für das schöne how-to. Ich habe mir vor einiger Zeit auch einen odroid xu4 besorgt, genau für diesen Zweck. Abgesehen davon, dass ich mit dem Ubuntu Mate 18.04 LTS Image arbeite habe ich alles so gemacht, wie hier beschrieben. Ich schaffe es jedoch nicht, TV über Kodi abspielen zu können, naja zumindest 90% der Sender nicht, da ich lediglich Zugriff auf die SD Sender habe, wähle ich einen solchen Sender an, dauert es ca. 5 sek. Bis der Bildschirm schwarz ist, einige Minuten später bin ich dann wieder auf dem Desktop, weil Kodi abgestürzt ist. Gibt es einen Trick mpeg2/4 korrekt auf dem aktuellen 18.04 Image abzuspielen? Ich habe bereits sehr viel probiert, bis hin zum komplilieren eines eigenen Kodis, leider auch hier ohne Erfolg.
Kannst du TV denn über das Web Interface von TVHeadend streamen?
Danke für die schnelle Antwort. Wenn ich die öffentlich rechtlichen hd sender anwähle geht das über das webinterface. (Chromium + h264ify) auch hier bleibt der player (bei egal welchen settings) einfach schwarz, und zeigt an, dass ein Fehler passiert ist. Es muss jedoch am odroid liegen, da ich mit Handy, TV, Tablet und Windows Computer (alle mit kodi) problemlos alle Sender schauen kann. Vlt sollte ich noch erwähnen, dass dies mein erstes wirkliches Linux Projekt ist und ich für jeden Tip, sollte er auch noch so selbstverständlich erscheinen dankbar bin.
Gruß, Sascha
Hi Sascha, ich verstehe leider nicht ganz. In der ersten Nachricht sagst du, dass Kodi nicht funktioniert und du es sogar selber kompiliert hast. In der letzten Nachricht schreibst du, dass im Webinterface nur die öffentlich rechtlichen Sender sehen kannst, mit Kodi hingegen aber alle sehen kannst. Was genau geht jetzt nicht? 😀
Generell würde ich immer empfehlen ins Log zu schauen, ob du dort genauere Informationen findest. Ich kann von der Arbeit aus leider nicht auf meinen oDroid zugreifen, um zu schauen, wo das Logfile genau liegt. Ich glaube es war unter /var/log/tvheadend.log. Ansonsten lässt sich das bestimmt schnell ergooglen 🙂
Entschuldige die Verwirrung. Ich versuchs nochmal klarzustellen.
Auf allen Geräten kann ich tv über das tvheadend auf dem odroid gucken, außer auf dem odroid selbst.
Über das TVHeadend Webinterface kann ich auf dem odroid nur die ö.R. HD Sender schauen. Habe noch nie versucht, dass webinterface von einem anderen client zu bedienen, werde ich aber heute Abend mal ausprobieren. Es wird aber nicht am tvheadend liegen (glaube ich zumindest), weil ich ja mit kodi auf allen anderen geräten sowohl (ö.R.) hd als auch sd tv gucken kann.
Alles was mir noch zu meinem Glück fehlt, ist dass ich über das Kodi auf meinem odroid auch die sd sender schauen kann und das kodi nicht crasht beim versuch einen sender an zu machen.
Ich gucke heut Abend mal was mir die tvheadend logs sagen und kann ggf. Auch posten was die crashlogs von kodi sagen.
Danke nochmal für die Unterstützung.
Behalte auch mal die Auslastung im Auge, womöglich liegt’s auch daran. Mit Streaming, Encoding, Decoding und Anzeige ist der oDroid womöglich überfordert? Eventuell kann es ja helfen, wenn du das Transcoding deaktivierst – falls es aktiviert ist. Um die Last im Auge zu behalten empfehle ich htop (in der Shell eingeben: apt update && apt install htop && htop).
Zur Info: mittlerweile gibt es ein gut funktionierendes, fertiges Repository mit dem man Tvheadend auf den Odroid XU4 bringt, ohne selber kompilieren zu müssen.
https://launchpad.net/~mamarley/+archive/ubuntu/tvheadend-git
Als Grundlage dient ebenfalls ein Ubuntu 18.04 Image (MINIMAL, BARE OS).
apt-get update
apt-get dist-upgrade
– – – – – – – – – –
Danach einbinden des Repository:
add-apt-repository ppa:mamarley/tvheadend-git (Tvheadend 4.3 unstable)
oder wer es etwas konservativer mag:
add-apt-repository ppa:mamarley/tvheadend-git-stable
apt-get update
apt-get install tvheadend
Damit ist Tvheadend installiert. Einrichten und Konfiguration wie im Artikel beschrieben. Die Hardwareunterstützung für diverse Codecs kann aktiviert werden.
– – – – – – – – – –
Da ich einen Hdhomerun DVB-C Tuner verwende war dieses Repository optimal, es beinhaltete ebenfalls die Treiber für diese Geräte:
apt-get install hdhomerun-config
apt-get install hdhomerun-config-gui
Sonst den entsprechende Treiber installieren wie im Artikel beschrieben.
Danke Stefan für den Hinweis! Ich werde das in den kommenden Tagen im Artikel anpassen.