Updated KabelDeutschland streaming proxy

What’s new

The last time, I released my KabelDeutschland streaming proxy as a result of the reverse-engineering of the KabelDeutschland API. There have been a few minor issues, mainly in using the proxy together with some other tools like Kodi / XBMC or some stream-recorder based on ffmpeg.

Today i’d like to announce a new version of the KabelDeutschland streaming proxy that solves these issues. We are now able to use it together with the media-center software.

The playlist-handling has been fully rewritten to avoid the multiple redirects during playback. This was the main problem why ffmpeg could not read the playlist and its streams and prevented the media-center from playing the channels.

You can now select the quality of the stream by adding this param to the call. There are 3 options available, low | medium | high. Load your desired quality by opening http://[ip-address]/medium. If there was no quality-selector given, it will return the medium streams. There is still the debug option available by adding /txt at the end of the url after the quality identifier http://[ip-address]/medium/txt.

Below you will find the binaries for all supported architectures but there was also an update at the PHP version of this tool. This update can be grabbed from github.

Download

Shared Folder at mega.co.nz (mirror at dropbox)

Use cases

The last time i mentioned that i was trying to get the proxy running in conclusion with Kodi / XBMC and some other useful tools. Here is a short description of how to get these tools to work with the KabelDeutschland streaming proxy.

Kodi / XBMC

To watch live TV using this proxy in Kodi or XBMC, you have to enable an add-on called PVR IPTV Simple Client. This can be found under the PVR-Clients section in the add-ons category. After enabling it, there needs to be one configuration to be set-up, the Url of the playlist has to be added as seen on the screens. Also the checkbox cache m3u at local storage has to be unchecked so it reloads the playlist every time Kodi starts. After enabling and configuring the add-on, the last step is to enable Live-TV at the Kodi settings by checking the box under Settings -> Live TV.

Now you should see an option at the main menu named TV. Select the channel sub-option and enjoy the program.

The first time, the loading of the channel-list could take up to one minute, so please be patient.

Tvstreamrecord

I crashed into this tool (http://pavion.github.io/tvstreamrecord/) by looking for some new stuff for my Synology DS215j. It has a prebuilt package so i decided to give it a try and installed it. I imported the generated playlist but unfortunately i was not able to record the stream. As i described in my introduction, the problem was ffmpeg that could not handle redirects in playlists but with the new version of the KabelDeutschland streaming proxy it was easy to get the recorder running. Nevertheless there are some tweaks you have to do before it works.

As a step by step introduction we will start by adding the playlist. Open http://[Synology]:8030, click on the Channels-tab and click the Import button. Select your generated playlist. After the upload, you will see a list of all channels. You can now grab the EPG information at one of the two EPG tabs. Now we have to change the configuration. Switch over to Config -> FFMPEG support and add http to the list of stream-type. Hit submit-changes.

Now the last step is to change the path for your recordings under the General tab.

Thats it, you are now able to create a scheduled record.

56 thoughts on “Updated KabelDeutschland streaming proxy

  1. Sebastian says:

    Hervorragend 😉 – läuft sehr gut.

    Um auf dem hohen Niveau zu merkern. Weißt du warum die Sender der RTL-Gruppe nicht angezeigt werden?

    Und schade das HD nicht klappt. Liegt wahrscheinlich ander Verschlüsselung, oder? Wenn ja, müssten dann nicht zu mindestens die öffentlichen Sender in HD sein.

    • Bei der RTL-Gruppe gibt es lizenzrechtliche Probleme. RTL verbietet einfach, dass Ihre Kanäle als Stream angeboten werden, da sie mit ihrem rtl-now ein bezahltes Konkurrenz-Produkt haben.

      Die HD-Signale werden von KabelDeutschland leider nicht eingespeist, sonst wäre dass das erste was ich umgesetzt hätte 😉

      Beste Grüße,
      André

    • Hi Martin,

      theoretisch ist dies möglich, aber gibt es von UnityMedia nicht Horizon als Streaming-Paket?
      Kenne mich bei UnityMedia nicht wirklich aus, da ich mit denen noch nie zu tun hatte.

      Beste Grüße,
      André

  2. Helge says:

    Auf OSX 10.10 kommt bei “Get channel list” stets ein Fehler im http-Server: “http: panic serving 127.0.0.1:61628: runtime error: invalid memory address or nil pointer dereference”

    Liegt’s an mir, an der Umgebung oder am Proxy? Die komplette Ausgabe ist hier: http://pastebin.com/aJjcFK5J

    • Hi Helge,

      das Problem tritt auf, wenn du nicht hinter einer KabelDeutschland Leitung hängst und versuchst die Streams abzufragen.
      Ich baue das Programm bei gelegenheit so um, dass eine sinvolle Fehlermeldung kommt, aber das wird leider auch nicht dazu führen, dass es bei dir läuft, da KabelDeutschland die streams nur aus dem eigenen Netz verfügbar macht.

      Beste Grüße,
      André

  3. Rene says:

    Bei der aktuellen PHP-Version bekomme ich VLC den Fehler
    VLC kann die MRL 'http://xxxxx/xxxxx/%2FCCURstream1064000.m3u8' nicht öffnen. Sehen Sie für Details im Fehlerprotokoll nach.
    ...

    Die m3u-Playlist bei Aufruf von kd.php sieht wie folgt aus:
    #EXTM3U
    #EXTINF:-1,Das Erste
    /CCURstream1064000.m3u8
    #EXTINF:-1,ZDF
    /CCURstream1064000.m3u8
    #EXTINF:-1,SAT.1
    /CCURstream1064000.m3u8
    ...

    Vielen Dank für den Support! Viele Grüße

    • Hi Rene,

      ich habe eben noch mal getestet.
      bei mir geht es problemlos.
      Du gehst bei VLC auf Datei -> Netzwerk öffnen und trägst als url http://localhost:8000/kd.php ein.
      Die Senderliste wird dann geladen und der Stream abgespielt.

      Bitte melde dich, falls du weiterhin Probleme haben solltest.

      Beste Grüße,
      André

      • Rene says:

        Hallo André,

        ich habe es auch so probiert, aber bringt mir eben die Fehler in VLC. Wenn ich mir die erstellte m3u-Playlist in einem Texteditor anschaue, dann fehlen die URLs.

        Ich war gestern beim debuggen soweit gekommen, dass in der function getLicensedLink in classes/KabelDeutschland.php $arr_link kein Element mainUrl enthalten. $arr_link ist leer:
        Array
        (
        [mainUrl] =>
        [altUrl] =>
        [status] =>
        )

        In der vorherigen PHP-Version hatte ich Probleme wenn die lizenzierten Links generiert worden sind, so dass ich die neue nutzen wollte. Die Binaries funktionieren übrigens auf dem RPi 2 B.

        Viele Grüße

        René

      • Rene says:

        Hallo André,

        ich glaube ich habe es: in der neuen Version des PHP-Scripts schreibst du die lizenzierten Links direkt in die Playlist und lässt nicht beim eigentlich Aufruf des Streams nochmal das Script arbeiten und dann erst den LicensedLink ausgeben.
        Da der LicensedLink nicht erstellt werden kann (siehe ja die Probleme u.a. bei caschy und noch anderen), gibt es eben keine mainURL und damit ist die Playlist kaputt. Also damit ist es scheinbar das bekannte Problem.

        Ich hab zwar Burp mir gestern mal angeschaut, aber kam noch nicht zur Auswertung.

        Viele Grüße

        René

        • Du hast recht, ich überprüfe an der Stelle nicht, ob die main_url auch zurück kommt.
          Leider ist das wirklich das selbe Problem wie bei cashy, wofür ich noch keine Lösung gefunden habe.

          Falls du Interesse hast, mir weiter zu helfen und die Burp-Auswertung angesehen hast, meld dich bitte. Oder forke den code auf github und schreibe eine Fix 🙂

          Welches Binary hast du auf dem Raspi 2 verwendet? Im anderen Post hat aktuell ein User das Problem, dass er die arm_v7 nicht zum laufen bekommt und ich habe keinen Raspi 2 zum testen.

          Beste Grüße,
          André

          • Rene says:

            Problem mit den Licensed Links gefunden: Die Standard-UDID in der Config hilft nicht weiter. Ich habe sie mal mit der UDID aus meinem Burp-Scan ersetzt und das Script generiert wunderbar die LicensedLinks.

            Wie erhälst du die UDID in der Binary?

            Viele Grüße

            REné

          • In der go-Version brauche ich keine udid.
            Was ich schon herausgefunden habe ist, dass KD anhand der UDID eine Gruppen-Id bereitstellt.
            Diese muss bei jedem Request mitgesendet werden. Im Binary ist diese fest verdrahtet. Bei der PHP-Version wird sie ausgelesen aus dem sign-in request. Da aber eine feste UDID eingetragen ist, führt das zu Problemen.
            Bisher fiel mir noch keine Lösung dafür ein.

            Beste Grüße,
            André

          • Rene says:

            Auf dem RPi 2 B habe ich weder mit der arm_v6 noch mit der arm_v7 Probleme. Ich konnte auch durch wildes Ändern der Config den Fehler aus dem anderen Post drüben nicht nachvollziehen.

            Viele Grüße

            René

  4. Christian says:

    Hallo,

    ich finde den Proxy super, echt klasse arbeit.

    ist es evtl möglich, den Proxy auch als richtigen Proxy zu nutzen, also nicht nur zum generieren der M3U List, sondern auch den Videostream drüber zuleiten?.

    Also so das in der M3U Liste die IP Adresse von dem Gerät läuft wo der KD_Proxy läuft und dieser das dann weiter leitet (über den KD Internetanschluss)

    • Theoretisch ist das möglich.
      Werde ich mir auf jeden Fall mal ansehen.

      Aktuell umgehe ich das Problem mittels VPN über die Fritz.box oder meine Synology.

      • Christian says:

        Hallo,

        stimmt ja, habe grade gar nicht dran gedacht das VPN nach Hause aufzubauen, um von unterwegs TV gucken zu können.

  5. Tom says:

    Ich wollte den Proxy auf dem Raspberry 2 mit Xbian testen. Mit der Binary “kd_proxy_arm_v7” erhalte ich allerdings die Fehlermeldung “Illegal instruction”.
    Ist die Binary fehlerhaft oder habe ich etwas übersehen?
    Linux xbian 3.18.8+ #1 SMP PREEMPT Thu Mar 5 03:13:36 CET 2015 armv7l GNU/Linux

    • Hi Tom,

      theoretisch sollte die armv7 version auf dem raspi 2 laufen, leider konnte ich es bisher nicht testen, da ich nur ziemlich viele raspi 1 habe.
      Ich schau aber noch mal rein, ob es beim cross-compilieren einen Fehler gab.

      Beste Grüße,
      André

      • Rene says:

        Ich hatte keine Probleme mit arm_v7 auf dem RPi 2 B, allerdings auf Raspbian. Das Problem könnte sein, dass der Xbian-Kernel evtl. nicht alles enthält, was benötigt wird – ist ja ein sehr abgespecktes Debian. Just my two cents

        @André Ich kann es erst nächste Woche mal ausprobieren.

        • Tom says:

          Hallo Rene,
          dein Kommentar hat mich jetzt stutzig gemacht, da Xbian auf Raspbian basiert. Ich habe jetzt nochmal geschaut und der Fehler liegt bei mir. Ich habe per Filezilla die Binary auf den Rpi übertragen. Dabei steht der Transfertyp standardmässig auf “Automatisch”. Durch die fehlende Endung klappt das wohl nicht und die Übertragung erfolgt per ASCII. Stelle ich dies manuell auf “Binär” klappt nun auch der Aufruf. Bitte entschuldigt den Fehlalarm.

          • Rene says:

            Es ist zwar ein Debian, aber arg entschlackt. Ich hatte leider auf deren Seite keine Infos über die tatsächlichen Änderungen gefunden :-/

  6. Hallo André,

    danke für die schöne Anleitung zu meinem tvstreamrecord 🙂
    Als Anmerkung, tvstreamrecord kann auch auf anderen NAS/Betriebssystemen laufen, wo es Python gibt. Bei Fragen dazu stehe ich gern zur Verfügung.

    Gruß
    Pav

    • Hey 😉
      Danke für deinen tvstreamrecorder. Ich werde deine Anmerkung in meinem Post noch ergänzen.

      Vielen Dank.

      Beste Grüße,
      André

  7. kai says:

    Großartig.
    Ich habe es auch für mich geschafft unter OpenElec auf dem Raspberry Pi B zum laufen zu bringen. Ungefähr so:
    Dateien runtergeladen, json editiert. Samba aktiviert, dort die kd_proxy_arm_v6 in den Downloads-Ordner geschoben und über Putty unter /storage/downloads/ mit ./kd_proxy_arm_v6 gestartet. Dann noch LiveTV aktivieren wie beschrieben.
    Wie schaffe ich es denn nun, dass bei jedem Neustart, der Proxy wieder gestartet wird? ich habs mit einem Eintrag in crontab (ist auch aktiviert) versucht: “@reboot /storage/downloads/kd_proxy_arm_v6” Das klappt aber so nicht. Wer kann mir helfen?

    • Hi Kai,

      versuche mal den proxy in einem screen zu starten über die crontab
      @reboot screen -d -m '/storage/downloads/kd_proxy'

      Beste Grüße,
      André

      • kai says:

        Vielen Dank für die schnelle Antwort. Leider funktioniert das nicht.
        Wenn ich folgendes mache, passiert das:
        Kodi-Pi:~ # /storage/downloads/kd_proxy_arm_v6
        == Checking credentials
        panic: runtime error: invalid memory address or nil pointer dereference
        [signal 0xb code=0x1 addr=0x0 pc=0x731a8]

        goroutine 1 [running]:
        kd.signIn()
        /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd/service.go:1 89 +0x180
        kd.Service(0x0)
        /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd/service.go:3 2 +0x30
        main.main()
        /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd.go:53 +0x460

        Ansonsten im richtigen Ordner, nach Anleitung ausgeführt, funktioniert es:
        Kodi-Pi:~/downloads # ./kd_proxy_arm_v6
        == Checking credentials
        done
        == Listening …
        http://192.168.0.104:8787

          • Hallo Ihr beiden,

            ich habe eben ein neues release erstellt.
            Das Problem war, dass der Proxy im aktuellen working directory nach der config gesucht hat. Nicht aber im Pfad des binary.
            Das ist nun behoben. Ihr könnt den @reboot cron mit screen nutzen.

            Beste Grüße,
            André

          • kai says:

            Danke André für die Mühe!
            Ich habe inzwischen rausgefunden, dass OpenElec das “@reboot” in crontab nicht unterstützt.
            Es gibt aber eine Alternative: http://wiki.openelec.tv/index.php?title=Autostart.sh
            Daher:
            nano /storage/.config/autostart.sh
            Dann habe ich dort in die neue leere Datei eintragen:
            (
            /storage/downloads/kd_proxy_arm_v6
            ) &

            und fertig. Den Pfad in dem script natürlich anpassen, wo auch immer man kd_proxy und die config gespeichert hat.
            Beim Neustart von Kodi dauert es ein paar Sekunden und dann erscheint auch “TV”.

  8. Sascha G. says:

    Hallo,

    ist es möglich, mit mehreren Clients gleichzeitig auf den Proxy zuzugreifen?
    Hab den hier auf nem Pi2 mit OpenElec installiert und komme sonst
    mit keinem anderen Gerät im Lan drauf..

    bye,
    S.G

    • Hi Sascha,
      der Zugriff ist von beliebig vielen Clients möglich. Der einzig limitierende Faktor ist deine Bandbreite.
      Der pi sonst muss dabei so gut wie nichts machen. Nur initial die play list erzeugen.

      Beste grüße
      André

  9. Dennis says:

    Cheers Sascha,
    in den letzten Wochen hat mir Dein Proxy so richtig das arbeiten hier versüsst und wir haben geplant auf Basis von Kodi uns endlich auch einen kleinen Fernsehschrank auf dem Balkon zu basteln.

    Seit gestern bekomm ich leider keiner Verbindung mehr. VLC haut die folgende Fehlermeldung raus:


    VLC kann die Medienadresse ‘http://This%20works%20only%20if%20you%20are%20using%20a%20KabelDeutschland%20Internet%20connection.’ nicht öffnen. Für Details bitte im Fehlerprotokoll nachsehen.
    Ihre Eingabe konnte nicht geöffnet werden: VLC kann die Medienadresse ‘Get http://83.169.141.242/live-spts/media/sat1/transmux/hls.m3u8?c=EXTERNEIP&e=2015-06-10T06%3A34%3A38Z&s=86609783&t=d69e781bba22b8ff9a50583afcb35d91eb569aaa: WSARecv tcp INTERNEIP:53539: Ein Verbindungsversuch ist fehlgeschlagen, da die Gegenstelle nach einer bestimmten Zeitspanne nicht richtig reagiert hat, oder die hergestellte Verbindung war fehlerhaft, da der verbundene Host nicht reagiert hat.’ nicht öffnen. Für Details bitte im Fehlerprotokoll nachsehen.

    Ich habe ende letzter Woche unser Heimnetzwerk um 2 Router (Nicht als Kaskade) im NAT Betrieb erweitert – auch der Server (Windows) auf dem kd_proxy_64 läuft befindet sich jetzt dahinter.
    Liegt es evtl. daran?

    Habe es danach auch von einem anderen Rechner der direkt mit dem Router verbunden war im WLAN probiert, mit dem selben Ergebnis.

    Die App auf dem iPad läuft dagegen einwandfrei.

    • Hi Dennis,
      du hast recht. KabelDeutschland hat etwas an seiner API Signatur geändert.
      Ich kann mich leider erst morgen daran setzen um zu schauen, was geändert wurde.

      Beste Grüße,
      André

      • Dennis says:

        Na dann bin ja schonmal beruhigt das es nicht an den beiden neuen NAT routern liegt 😀
        Lass Dir Zeit, es eilt ja nicht wirklich.

        • Ich konnte das Problem schon ein wenig eingrenzen.
          Kabeldeutschland scheint größere Probleme mit ihrem Netz und auch ihrem CDN zu haben.
          Mal kommen die Sender, mal liefert das CDN eine leere Antwort, was dann zu dem von dir genannten Fehler führt.

          • Dennis says:

            Solange Du es bei Dir auch nachvollziehen kannst, hilft es vermutlich nicht. Aber ich könnte Dir auch remote access auf einen meiner Rechner zum testen anbieten.

            Wo Du sagst das es probleme mit dem Netz von KD gibt – stimmt! Ich hab ab und an Verbindungsabbrüche, habe es bisher aber auf die Baurbeiten hier in den Häusern geschoben (Strom/Verstärker etc.)

            Merkwürdigerweise läuft die App auf dem iPad problemlos, auch ohne Update in den letzten Tagen.

            However, lass Dir Zeit und geniesse das Wetter solange es gut ist! Bei schlechtwetter kannste immer noch am proxy werkeln 😉

          • Dennis says:

            Das Problem scheint sich über die Nacht/Nächte von selbst behoben zu haben…
            Ich danke Dir an dieser Stelle trotzdem nochmal für dieses tolle Programm!

          • Ich tippe immer noch darauf, dass KabelDeutschland ziemliche Probleme in ihrem Netz hat. Meine Leitung daheim sollte 100Mbit haben, hatte sie auch bis vor 7 Wochen, jetzt nur noch 6Mbit.

          • Dennis says:

            Geschwindigkeitsschwankungen habe ich hier in der Form so nicht – Stabile 25 Mbit/s.

            Aber das es jetzt ohne Änderung bei mir wieder geht spricht ja genau dafür das ein Problem bei KD vorlag.

  10. Christian says:

    Hi,
    der Proxy läuft auf meinem Rasp2 mit OpenElec und Kodi super.
    Aber ich bekomm den Autostart nicht zum laufen.

    Hat da noch jemand eine Idee?

    • LuKe says:

      @André:
      Geniale Idee! Das ist genau das was ich schon die ganze Zeit versucht habe. Vielen Dank !!!

      @Christian:
      Ich habe selbiges Problem gehabt und von crontab bis rc.local und init.d alles probiert.
      Bei mir läuft OSMC, so dass die Variante mit Autostart.sh auch nicht realisierbar ist.

      Nach Stunden der Suche, endlich eine Lösung die auch bei mir funktioniert.
      Habe mir eine eigene Autostart.sh geschrieben die ich in /etc/rc.local mit folgendem Befehl ausführe:

      bash autostart.sh

      Der Inhalt der Autostart lautet:

      #!/bin/sh
      sleep 5
      /home/osmc/kd_proxy_arm_v7 -c /home/osmc/config.json &

      Der Sleep wird benötigt, da ich sonst die Rückmeldung ‘Credentials are wrong’ in der Log ausgegeben bekomme. Vermutlich sind zu Zeitpunkt der Ausführung des Scriptes die Netzwerktreiber noch nicht gestartet.

      Viel Erfolg!

  11. toby says:

    Kann es sein, dass es momentan nicht klappt? Habe mein Setup, das vor ca. 2 Monaten noch funktionierte wieder gestartet, Channel List wird offensichtlich geholt (im Output des Scripts steht auch “Get channellist” ), jedoch habe ich im Kodi nach der Auswahl eines Senders und einem kurzen Ladekringel keinerlei reaktion, gestartet wird nichts…
    Per VLC ergibt sich ein ähnliches Szenario, nach dem Einbinden via http://ip:8787 (angehängtes z.b. high bringt keinen Unterschied) sagt mir vlc nur folgendes:
    “VLC kann die Medienadresse ‘http://cache2.iptv.kabel-deutschland.de/live-spts/media/folxtv/transmux/CCURstream1064000.m3u8’ nicht öffnen. Für Details bitte im Fehlerprotokoll nachsehen.”
    Script läuft auf einem raspberri pi 2 bzw. testweise auf einem Window-Rechner (hier hatte es vor ca. 1-2 Monaten noch geklappt)

  12. Hi Toby,

    du hast leider recht, es gibt wieder massiv Probleme mit dem CDN von KabelDeutschland. Ich werde mir was einfallen lassen müssen und melde mich sobald es eine Lösung gibt.

    Beste Grüße,
    André

  13. gosch2912 says:

    Bei meinem lieben Friseur aus der Türkei, lief letzte Woche Kodi auf einem Fire Stick.

    Sah cool aus.

    Das mit dem Proxy ist schade das es nicht mehr geht. Neuerdings gibt es eine Android App von Vodafone mit der ich Kabelfernesehen kann. Gibt aber kein Rtl/Vox usw.

Leave a Reply

Your email address will not be published. Required fields are marked *