{"id":485,"date":"2017-07-29T21:00:38","date_gmt":"2017-07-29T19:00:38","guid":{"rendered":"https:\/\/www.anginf.de\/?p=485"},"modified":"2017-07-30T00:13:58","modified_gmt":"2017-07-29T22:13:58","slug":"vdr-auf-server-kompilieren-einbindung-von-iptv-und-steuerung-ueber-kodi-auf-einem-client","status":"publish","type":"post","link":"https:\/\/www.anginf.de\/?p=485","title":{"rendered":"VDR auf Server kompilieren, Einbindung von IPTV und Steuerung \u00fcber KODI auf einem Client"},"content":{"rendered":"<p>Server mit Netzwerkanschluss hinter einem T-Entertain-Anschluss. An den Fernsehern im Haus liegt bereits Netzwerk und jeweils ein Raspberry PI oder \u00e4hnliches, um als Empf\u00e4nger des VDR-Streams zu agieren. Auf den Clients l\u00e4uft ein KODI (teilweise unter OpenELEC), welcher die Integration des VDR erleichtern soll. Es steckt allerdings keine DVB-T\/DVB-C-Karte oder \u00e4hnliches im Server, sondern er soll die IPTV-Streams von der Telekom (T-Entertain\/T-Home) nutzen. Dieses Vorgehen ist v\u00f6llig legal. Einziger Nachteil bei dieser Vorgehensweise: Es gibt praktisch keine EPG-Daten aus dem Datenstrom, diese sind &#8211; bis auf &#8222;now&#8220; und &#8222;next&#8220; &#8211; verschl\u00fcsselt und k\u00f6nnen nur durch den von der Telekom bereitgestellten &#8222;Media Receiver&#8220; entschl\u00fcsselt werden.<\/p>\n<p>Der VDR wurde hierf\u00fcr selbst kompiliert, um die notwendigen Plugins direkt nutzen zu k\u00f6nnen. Da es einige Zeit und Nerven gekostet hat, eine vern\u00fcnftige L\u00f6sung hierf\u00fcr zu finden, ist hier ein  Skript zu finden, welches die vorausgesetzten Pakete installiert, alles herunterl\u00e4dt und kompiliert.<\/p>\n<pre lang=\"bash\">\r\n#!\/bin\/bash\r\n\r\n# Work directory\r\n### Warning: This script installs the resulting vdr to \/work\/vdr, yes, this is on the root level!\r\nMYCURRENTDIR=\"${PWD}\"\r\ncd \/work\/vdr\r\n\r\n#####\r\n## Install prerequisites\r\n#####\r\nsudo apt-get install build-essentials dialog libcap-dev libjpeg62-dev libfreetype6{,-dev} fontconfig{,-config} libfontconfig1{,-dev} libcurl4-gnutls-dev libcxxtools-dev libtntnet-dev\r\n\r\n#####\r\n## Changes these if newer versions are available (and these work)\r\n#####\r\nCURRVDRVER=\"2.2.0\"\r\nCURRIPTVVER=\"2.2.1\"\r\nCURRDIR=\"$(pwd)\"\r\n\r\n#####\r\n## Download everything which we don't already have\r\n#####\r\n\r\nif [ ! -e vdr-${CURRVDRVER}.tar.bz2 ]; then\r\n        wget -O vdr-${CURRVDRVER}.tar.bz2 ftp:\/\/ftp.tvdr.de\/vdr\/vdr-${CURRVDRVER}.tar.bz2\r\nfi\r\n\r\nif [ ! -d vdr-${CURRVDRVER} ]; then\r\n        tar xvfj vdr-${CURRVDRVER}.tar.bz2\r\n        ln -s \/work\/vdr\/vdr-${CURRVDRVER} \/work\/vdr\/vdr\r\nfi\r\n\r\nif [ ! -e vdr-iptv-${CURRIPTVVER}.tgz ]; then\r\n        wget -O vdr-iptv-${CURRIPTVVER}.tgz http:\/\/www.saunalahti.fi\/~rahrenbe\/vdr\/iptv\/files\/vdr-iptv-${CURRIPTVVER}.tgz\r\nfi\r\n\r\nif [ ! -d vdr-${CURRVDRVER}\/PLUGINS\/src\/iptv ]; then\r\n        mkdir -p vdr-${CURRVDRVER}\/PLUGINS\/src\/iptv\r\n        tar xvfz vdr-iptv-${CURRIPTVVER}.tgz -C vdr-${CURRVDRVER}\/PLUGINS\/src\/iptv --strip-components=1\r\nfi\r\n\r\n#####\r\n## Further Plugins\r\n#####\r\n\r\n### VNSI\r\n# https:\/\/github.com\/FernetMenta\/vdr-plugin-vnsiserver\r\nif [ ! -d vdr-${CURRVDRVER}\/PLUGINS\/src\/vdr-plugin-vnsiserver ]; then\r\n        cd vdr-${CURRVDRVER}\/PLUGINS\/src\r\n        git clone https:\/\/github.com\/FernetMenta\/vdr-plugin-vnsiserver\r\n        ln -s vdr-plugin-vnsiserver vnsiserver\r\n        cd \/work\/vdr\r\nfi\r\n\r\n### epgsearch (needed for VDR Live)\r\n# http:\/\/winni.vdr-developer.org\/epgsearch\/downloads\/vdr-epgsearch-1.0.0.tgz\r\nif [ ! -e vdr-plugin-epgsearch-2.2.0.tgz ]; then\r\n        wget -O vdr-plugin-epgsearch-2.2.0.tgz https:\/\/projects.vdr-developer.org\/git\/vdr-plugin-epgsearch.git\/snapshot\/vdr-plugin-epgsearch-2.2.0.tar.gz\r\nfi\r\n\r\nif [ ! -d vdr-${CURRVDRVER}\/PLUGINS\/src\/epgsearch ]; then\r\n        mkdir -p vdr-${CURRVDRVER}\/PLUGINS\/src\/epgsearch\r\n        tar xvfz vdr-plugin-epgsearch-2.2.0.tgz -C vdr-${CURRVDRVER}\/PLUGINS\/src\/epgsearch --strip-components=1\r\nfi\r\n\r\n### VDR Live\r\n# http:\/\/live.vdr-developer.org\/downloads\/vdr-live-0.3.0.tar.gz\r\nif [ ! -e vdr-plugin-live-release_0-3-0.tgz ]; then\r\n        wget -O vdr-plugin-live-release_0-3-0.tgz https:\/\/projects.vdr-developer.org\/git\/vdr-plugin-live.git\/snapshot\/vdr-plugin-live-release_0-3-0.tar.gz\r\nfi\r\n\r\nif [ ! -d vdr-${CURRVDRVER}\/PLUGINS\/src\/live ]; then\r\n        # mkdir -p vdr-${CURRVDRVER}\/PLUGINS\/src\/live\r\n        # tar xvfz vdr-plugin-live-release_0-3-0.tgz -C vdr-${CURRVDRVER}\/PLUGINS\/src\/live --strip-components=1\r\n  cd \/work\/vdr\/vdr-${CURRVDRVER}\/PLUGINS\/src\r\n        git clone https:\/\/projects.vdr-developer.org\/git\/vdr-plugin-live.git\/\r\n  mv \/work\/vdr\/vdr-${CURRVDRVER}\/PLUGINS\/src\/vdr-plugin-live \/work\/vdr\/vdr-${CURRVDRVER}\/PLUGINS\/src\/live\r\nfi\r\n\r\ncd \/work\/vdr\r\n\r\n#### Autotimer\r\n# http:\/\/phivdr.dyndns.org\/vdr\/vdr-autotimer\/vdr-autotimer-2.3.0.tgz\r\nif [ ! -e vdr-autotimer-2.3.0.tgz ]; then\r\n        wget -O vdr-autotimer-2.3.0.tgz http:\/\/phivdr.dyndns.org\/vdr\/vdr-autotimer\/vdr-autotimer-2.3.0.tgz\r\nfi\r\n\r\nif [ ! -d vdr-${CURRVDRVER}\/PLUGINS\/src\/vdr-autotimer ]; then\r\n        mkdir -p vdr-${CURRVDRVER}\/PLUGINS\/src\/autotimer\r\n        tar xvfz vdr-autotimer-2.3.0.tgz -C vdr-${CURRVDRVER}\/PLUGINS\/src\/autotimer --strip-components=1\r\nfi\r\n\r\n#####\r\n## Compile\r\n#####\r\n\r\ncd \/work\/vdr\/vdr-${CURRVDRVER}\r\n# Das CXXFLAGS=\"-std=gnu++03\" wird benoetigt, da das iptv-Plugin mit den neuen Makros nicht klar kommt (-std=gnu11)\r\nCXXFLAGS=\"-std=gnu++03\" make -j $(grep -c ^processor \/proc\/cpuinfo)\r\ncd ..\r\n\r\n# channels.conf (loading these from a forum where someone listed all channels...)\r\nif [ ! -e channels.conf ]; then\r\n  preString = \"pre\" # Workaround for wordpress-blogpost, it would end the code otherwise\r\n  wget -O - -q  http:\/\/www.vdr-portal.de\/board16-video-disk-recorder\/board5-vdr-konfiguration\/119211-iptv-t-home-entertain-channels-conf-aktuelle-eintr%C3%A4ge\/ | grep \"\\(IPTV:\\|<\/${prestring}>\\)\" | sed '1,1d; \/<\\\/pre>\/,$d' >channels.conf\r\nfi\r\ncd \/work\/vdr\/vdr-${CURRVDRVER}\r\nrm channels.conf\r\nln -s ..\/channels.conf channels.conf\r\n\r\nmkdir -p video\r\nmkdir -p resources\r\nmkdir -p cache\r\n\r\n# Webinterface\r\nsudo ln -s \/work\/vdr\/vdr\/PLUGINS\/src\/live\/live\/css \/work\/vdr\/vdr-2.2.0\/resources\/plugins\/live\/\r\nsudo ln -s \/work\/vdr\/vdr\/PLUGINS\/src\/live\/live\/img \/work\/vdr\/vdr-2.2.0\/resources\/plugins\/live\/\r\nsudo ln -s \/work\/vdr\/vdr\/PLUGINS\/src\/live\/live\/js \/work\/vdr\/vdr-2.2.0\/resources\/plugins\/live\/\r\nsudo ln -s \/work\/vdr\/vdr\/PLUGINS\/src\/live\/live\/themes \/work\/vdr\/vdr-2.2.0\/resources\/plugins\/live\/\r\n\r\n# setup.conf initial\r\n## sudo rm \/work\/vdr\/vdr-${CURRVDRVER}\/setup.conf\r\n\r\n# iptv configuration\r\n# 15.07.2014: Sollte der VDR die IPTV Kan\u00e4le mit der CAID \"4AE2\" versehen, im iptv-Plugin \"Deaktiviere Filter: 1 (PAT 0x00)\" definieren und Eintr\u00e4ge bereinigen\r\nsudo bash -c \"cat <<EOF >>setup.conf\r\niptv.DisabledFilters = 1\r\nEOF\r\n\"\r\n\r\n# vnsiserver configuration\r\nsudo mkdir -p \/media\/tv\r\n\r\nsudo bash -c \"cat <<EOF >>setup.conf\r\nvnsiserver.Timeshift = 2\r\nvnsiserver.TimeshiftBufferDir = \/media\/tv\r\nvnsiserver.TimeshiftBufferFileSize = 20\r\nvnsiserver.TimeshiftBufferSize = 30\r\nEOF\r\n\"\r\n\r\n\r\n# vnsiserver access rights\r\n# sudo cat >\/work\/vdr\/vdr-${CURRVDRVER}\/plugins\/vnsiserver\/allowed_hosts.conf <<EOF\r\nsudo bash -c \"cat <<EOF >\/work\/vdr\/vdr\/plugins\/vnsiserver\/allowed_hosts.conf\r\n#\r\n# allowed_hosts.conf  This file describes a number of host addresses that\r\n#                     are allowed to connect to the streamdev server running\r\n#                     with the Video Disk Recorder (VDR) on this system.\r\n# Syntax:\r\n#\r\n# IP-Address[\/Netmask]\r\n#\r\n\r\n127.0.0.1             # always accept localhost\r\n192.168.6.0\/24        # any host on the local net\r\n#204.152.189.113      # a specific host\r\n#0.0.0.0\/0            # any host on any net (USE THIS WITH CARE!)\r\nEOF\r\n\"\r\n\r\n# Plugins\r\ncd PLUGINS\/lib\r\nrm *\r\n\r\nfind ..\/ -iname '*.so' -exec ln -s {} . \\;\r\nfor file in *.so; do mv ${file} $(echo ${file} | sed \"s\/\\.so\/.so.${CURRVDRVER}\/\") ; done\r\n\r\ncd ..\/..\r\n\r\necho \"Starting VDR\"\r\ncd ..\r\necho \"Going back to ${MYCURRENTDIR}\"\r\ncd \"${MYCURRENTDIR}\"\r\n\r\n.\/run.sh\r\n<\/pre>\n<p>And for <code>run.sh<\/code>, I used this:<\/p>\n<pre lang=\"bash\">\r\n#!\/bin\/bash\r\ncd \/work\/vdr\/vdr && sudo \/work\/vdr\/vdr\/vdr --log=3 -v \/data\/Videos\/TV -c . -L \/work\/vdr\/vdr\/PLUGINS\/lib --plugin=iptv --localedir=\/work\/vdr\/vdr\/locale --resdir=\/work\/vdr\/vdr\/resources --cachedir=\/work\/vdr\/vdr\/cache -P'vnsiserver -t 5' -P'epgsearch' -P'live'\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Server mit Netzwerkanschluss hinter einem T-Entertain-Anschluss. An den Fernsehern im Haus liegt bereits Netzwerk und jeweils ein Raspberry PI oder \u00e4hnliches, um als Empf\u00e4nger des VDR-Streams zu agieren. Auf den Clients l\u00e4uft ein KODI (teilweise unter OpenELEC), welcher die Integration des VDR erleichtern soll. Es steckt allerdings keine DVB-T\/DVB-C-Karte oder \u00e4hnliches im Server, sondern er &hellip; <a href=\"https:\/\/www.anginf.de\/?p=485\" class=\"more-link\"><span class=\"screen-reader-text\">VDR auf Server kompilieren, Einbindung von IPTV und Steuerung \u00fcber KODI auf einem Client<\/span> weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,6],"tags":[],"class_list":["post-485","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-vdr"],"_links":{"self":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=485"}],"version-history":[{"count":13,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions"}],"predecessor-version":[{"id":521,"href":"https:\/\/www.anginf.de\/index.php?rest_route=\/wp\/v2\/posts\/485\/revisions\/521"}],"wp:attachment":[{"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.anginf.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}