Simplified KabelDeutschland streaming proxy

Review

A few days go i wrote about How to reverse engineer the KabelDeutschland API. Attached to this post there was a PHP script hosted on github to get your own streaming proxy running.

After testing and spreading the word with some people i came to the decision that the procedure was far too complicated. The need of a webserver and the large number of configuration options were unnecessary.

That’s why i build a single binary version, written in go.

Limitation

This tool does not remove the restrictions made by KabelDeutschland. You will need an internet and a TV contract with them. It only give you the ability to use their streams besides the iOS app.

Download

Binaries for all major platforms can be found at the shared folder.

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

Select the binary suitable for your machine.

Tested environments

  • Macbook Pro Mid 2012, OSX 10.10.2
  • Synology DS215j (arm)
  • RaspberryPi (arm)
  • Windows XP 32bit

Please drop me a line if it works or not on your system.

Installation

Grab the config.json and edit it with your customer-service-center credentials. You can also change the port if you like.

On windows, double-click the executable file. On Linux/Mac you have to use your terminal, navigate to the folder you downloaded the binary and type the following command.

If you got a permission denied error, you have to set the executable bit for the binary

On all systems you will see the same output if everything went fine.

You will see the list of interfaces, the proxy listens to. All of them are ready to use to serve the channel playlist.

On certain Windows systems, it is not possible to display the interface list. The proxy will work nevertheless. Simply paste your known IP-Adress or one of your loopback addresses.

Installation on a Synology Diskstation

By now the easiest way to install the KabelDeutschland proxy is to download the arm-version of the binary and put it to your home-folder on the diskstation. Put the edited config.json next to it. Now you have to log into your nas  using ssh as your user and run the following command.

This creates a new screen, starts the proxy and immediately detaches the screen. That means the process runs in the background.

In order to be able to use the screen command, your box has to be bootsrapped. You can find the instructions to do this here: Bootrap the DS215j. Installation of screen will be done with this command as root.

You can connect to the proxy using the IP-address of your diskstation. http://[diskstation]:8787.

To stop the process, attach to the screen and press control+c. Attaching works using this command.

Predefined package

Synology has its own package manager and I’ll try to build a repository containing the proxy as a installable package. This will provide a way more easier solution. I will keep you updated.

Usage

Copy one of the links form the terminal output and paste it into your desired media player. It should load the playlist automatically. In VLC it looks like on the screenshot. You can now switch between the channels. The playlist contains links pointing to the proxy. This link handles the license generation, KabelDeutschland used to verify the stream.

165 thoughts on “Simplified KabelDeutschland streaming proxy

  1. Tom says:

    Wow, was für ne tolle Idee! Schade nur das meine Synology (DS212+) nicht unterstützt wird:

    runtime: this CPU has no floating point hardware, so it cannot run
    this GOARM=6 binary. Recompile using GOARM=5.

    • Hi Tom,

      Danke für den Hinweis 😉
      ich hab die binaries nun für arm v5, v6 und v7 kompiliert.
      Du findest sie im shared folder.

      Gib bescheid ob es bei dir nun läuft.

      Beste Grüße,
      André

      • Tom says:

        Wow, das war schnell 😉 Läuft aber leider nicht, scheint wohl doch etwas komplizierter zu sein:

        ds> ./kd_proxy_arm_v5
        Illegal instruction (core dumped)

        • Tom says:

          Allerdings scheint auch die Web/PHP Variant bei mir problematisch zu sein:

          Die Playlist wir erstellt, kann aber dann nicht abgespielt werden. VLC geht nur nach und nach die gesamte Wiedergabeliste durch…


          Can't get licensed link for Id: 3xxxx0 Link: http://cdn1.iptv.kabel-deutschland.de/live-spts/media/xxx/transmux/hls.m3u8

          • Tom says:

            ok, in all den Blogs und Texten ist mir der völlig entgangen:

            ou need to have two contracts with KD. One for cable-tv and one for internet over cable. The second one is necessary because the streams are only available inside of their own network.

            Somit ist klar warum es nicht funktionieren kann. Kein Internet via Kabel bei mir :-/

          • Schade, aber ich werde mir das Problem dennoch ansehen.
            Du bist nicht der einzige mit dem “illegal instruction” error.
            Vielleicht kannst du wenn ich eine neue Version habe dennoch kurz testen?

        • Auch wenn du es leider nicht nutzen kannst, ich habe das Problem mit der illegal instruction lösen können. Mein cross-compiler-script hat bei arm etwas durcheinander gebracht. Nun gehen die verschiedenen Versionen.

          Beste Grüße,
          André

      • Dennis says:

        Hi eine Frage läuft super auf PC nur fehlt RTL und rtl2 weißt du wieso?

        Kann man das Script auch auf ein Firestick installieren?

        Ist wohl eine Arm 9 Version

        Würde mich freuen von dir zu hören

        • Hey Dennis,

          das die RTL-Gruppe nicht vorhanden ist, liegt leider nicht an meinem Tool. RTL verbietet KabelDeutschland das streaming aller Sender der Gruppe. Auch in der App von KabelDeutschland fehlen die Kanäle.

          Zu deiner zweiten Frage.
          Generell wäre es möglich den Proxy auch auf dem Firetv laufen zu lassen. Von Go gibt es einen Compiler für iOS und Android (https://godoc.org/golang.org/x/mobile/app) aber es wir schwierig ohne GUI den Proxy zu starten.

          Ich werde es mir auf jeden Fall mal ansehen.

          Beste Grüße,
          André

    • Dennis says:

      Hi eine Frage läuft super auf PC nur fehlt RTL und rtl2 weißt du wieso?

      Kann man das Script auch auf ein Firestick installieren?

      Ist wohl eine Arm 9 Version

      Würde mich freuen von dir zu hören

    • You don’t need any special requirements.
      Thanks for your error trace, i will have a look and see how i can fix the problem.

      best regards,
      André

    • hi,

      I managed to find the problem.
      My cross-compilation-script did some mess-up handling all of the arm version.
      I rebuild them, now it should work (tested it on my raspbian running PI B+).
      Download the arm_v6 build again please.

      Best regards,
      André

  2. Sehr tolle Sache!

    Das 64-Bit-Linux-Binary funktioniert bei mir auf dem Client einwandfrei, Stream schauen ging mit VLC sofort, super!

    Auf meinem Homeserver (32 Bit Debian auf einem alten AMD Duron) lies sich das 32-Bit-Binary leider nicht starten: SIGILL: illegal instruction. Gibt es noch andere Compiler-Flags, damit das auf so alten Prozessoren noch läuft? Dummerweise ist Go ja recht modern :/

    Aber eigentlich wollte ich sowieso die PHP-Variante auf dem Homeserver haben, Infrastruktur ist eh schon da und das ist auch nicht so fett wie dieser Go-Klotz. Allerdings – es funktioniert leider nicht. Erzeugen der Playlist klappt, will ich aber dann einen der konkreten Links in der Playlist aufrufen, kommt nichts zurück, womit VLC etwas anfangen könnte. Rufe ich einen dieser Links mit curl auf, bekomme ich “Can’t get licensed link for Id … ” usw. In den Logfiles (log_level=debug) steht einiges, aber da weist nichts konkret auf einen Fehler hin.

    Ich vermute, es liegt nicht an den Credentials, die haben schließlich mit der 64-Bit-Binary funktioniert, kopiert habe ich sie auch richtig, mehrfach kontrolliert. Funktioniert das Aufbauen der Playlist theoretisch mit falschen Credentials? Wie kann ich die PHP-Version noch debuggen?

    • Hallo Heiko,

      Das abholen der Playlist ist auch ohne Credentials möglich.
      Zum generieren des lizensierten Links wird jedoch eine spezifische Gruppen-Id benötigt, welche KD über den Sign-In zur verfügung stellt.

      Mit dir und Carsten (stadt-bremerhaven.de) habe ich leider schon zwei Personen gefunden wo meine Abfrage dieser ID nicht das gewünschte Ergebnis bringt. Mit meinem eigenen Account kann ich den Fehler leider nicht reproduzieren und Carsten wollte, verständlicherweise, nicht seine Credentials zum Debuggen überlassen. Hättest du eventuell Interesse?

      Im Go-Binary ist eine Liste valider Gruppen-IDs fest integriert, daher funktioniert die Erzeugung des Links bei dir damit auch.

      Ich würde gern das PHP-Script um diesen Fehler bereinigen, komme aber mit meinen aktuellen Möglichkeiten nicht weiter.

      Den illegal instruction sigkill werde ich am Wochenende versuchen zu beheben. Ich schätze ich haben bei der cross-compilation einen Fehler gemacht.

      Beste Grüße,
      André

      • Heiko says:

        Nicht falsch verstehen, aber die Credentials sind einen Hauch zu zentral, das ist ja quasi der Masterkey zum KD-Zugang inklusive Mails, Vertragsänderungen etc.. Theoretisch könnten die auch Checks drin haben, ob die gleichen Credentials von verschiedenen Stellen aus genutzt werden und dann den Zugang sperren (Sie wurden gehackt!), das ist mir ein bisschen zu heikel.

        Ich führe gern Testcode aus und erstatte Bericht inklusive Logfiles, sofern das was nützt. Wobei man da bei den Logfiles auch nicht so recht sicher sein kann, in welchem Wert das Passwort wie kodiert drinsteht (UDID? ApiPass?).

        Ich habe auch nochmal die Logfiles angeschaut, beim Holen der LicensedLinks kommen mainUrl und altUrl leer zurück. Ich habe sogar nochmal mit curl den API-Aufruf nachgebaut, wie im Artikel “How to reverse-engineer …” gezeigt (hoffentlich korrekt), das gleiche Ergebnis. Schwer zu beurteilen, an welcher Stelle zum ersten Mal was schief läuft und was dann Folgefehler sind, so ohne richtige Fehlermeldung von der API.

        • Das kann ich voll und ganz verstehen.
          Das Problem ist die SiteGuid. Bisher kenne ich nur 2 Gruppen, welche es erlauben lizensierte Links zu erzeugen.
          Stimmt die Gruppe nicht, kommen leere Urls.

          Um dich ein wenig zu beruhigen. Das Api-Pass ist fest in die KD-App integriert und für jeden User gleich, UDID ist spezifisch pro User und wird in der App generiert, ähnlich der früheren UUID von Apple. Auch die ist aktuell fest verdrahtet, da ich diese bisher nicht zurückrechnen konnte.

          Hast du dich durch mein Tutorial zum reverse-engineering gearbeitet und alle calls in Burp zur Verfügung. Dann könnten wir diese durchsprechen, vielleicht lässt sich damit rausfinden, warum deine SiteGuid nicht valide ist, aber es in der iOS App (wie bei Carsten) dennoch möglich ist Streams zu sehen.

          • Phillip says:

            Ich hatte auch das Problem, dass die URLs leer zurück kamen. Nachdem ich meine UDID eingetragen habe, hat es funktioniert (einfach über den Proxy schnell gesucht). Die Frage ist, ob Kabel Deutschland nur eine gewisse Menge Accounts pro UDID zulässt, denn eig. ist die UDID pro Gerät unterschiedlich. Ich teste das mal mit ein paar iPods und einer frischen neu installierten App, was beim ersten Request mit der UDID über die API passiert. App löschen und neu installieren geht nicht, da sich die UDID nicht ändert.

          • Da hast du recht, es ist nicht die beste Lösung eine fixe UDID zu verwenden. Ich suche immer noch nach dem Algorithmus, welchen KabelDeutschland verwendet um seine UDID zu berechnen. Leider ist es keiner der Standardisierten und bekannten Wege.
            Bin dabei aber auf dem selben Stand wie du, die UDID scheint Hardwaregebunden zu sein, da sie sich auf einem Gerät nicht ändert.
            Von daher hoffe ich noch, dass sie sich an MAC-Adresse oder ähnlichen festen Informationen orientiert und man die Berechnung so zurückführen kann.
            Aber bisher noch erfolglos.

    • Sebi says:

      Hallo Andre,
      vielen Dank für dein Tool. Ich habe das gleiche Problem wie Heiko, dass sich das 32-Bit-Linux-Binary wegen des Fehlers “SIGILL: illegal instruction” auf meinem Home-Server mit Ubuntu 14.04 32 Bit nicht starten lässt. Das 64-Bit-Binary hingegen läuft bei mir unter Ubuntu 15.04 64 Bit fehlerfrei.
      Wäre echt super, wenn du das hinbekommst. Vielen Dank im Voraus!

      • Hi Sebi,

        ich habe es eben mit meiner Cross-Compile VM (ubuntu 14.04 32bit) getestet und es läuft problemlos.

        andre@ubuntu-compile ~ [10:24:52]
        > $ ./kd_proxy_32
        == Checking credentials
        done
        == Listening ...
        http://192.168.178.66:8787
        ^C%
        andre@ubuntu-compile ~ [10:25:04]
        > $ uname -a
        Linux ubuntu-compile 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:12 UTC 2014 i686 i686 i686 GNU/Linux

        Wie hast du das Binary auf den Server transferiert und wann hast du es geladen?

        Beste Grüße,
        André

  3. Sebastian says:

    Habe gerade auch einmal ein bisschen mit dem Proxy gespielt. Über meinen MAC und VLC klappt es super.

    Nun habe ich es versucht über Kodi zum laufen zu bekommen – leider ohne Erfolg. Ich nutze das PVR Plugin “PVR IPTV Simple Client”. Die Programmliste bekomme ich geladen. Nur wenn ich dann einen Kanal auswähle bekomme ich beim Proxy die Meldung “path requested: link/386632/aHR0cDovL2NkbjEuaXB0di5rYWJlbC1kZXV0c2NobGFuZC5kZS9saXZlLXNwdHMvbWVkaWEvcHJvNy90cmFuc211eC9obHMubTN1OA==:== Get licensed link” angezeigt und nichts passiert.

    In der Kodi-Log steht dazu “Open – Error, could not open file pvr://channels/tv/Alle Kanäle/3.pvr”.

    Ich muss zugeben ich bin noch relativ neu bzgl. PVR Clients/Plugins am Kodi. Mache ich ggfs. etwas falsch bzw. geht das überhaupt wie ich es mir vorstelle?

    • Hi Sebastian,

      das Problem mit Kodi kann ich reproduzieren. Der scheint den Link der Playlist nicht richtig aufzurufen.
      Du hast alles richtig gemacht, ich schau mir das noch mal an, warum es nicht geht.

      Generell gibt es gerade ein Problem bei. Ich bekomme gar keine Streams mehr. Gegenstelle antwortet nicht.
      Bei mir gibt es aber auch aktuell eine Großraum-Störung.

      Beste Grüße,
      André

    • Das Problem liegt leider an Kodi, der kommt mit den Playlists von KD nicht klar.
      Nachdem ich den Channel auf eine Playlist von KD auflöse kann Kodi mit dieser nicht mehr arbeiten.

      Die Playlist:
      #EXTM3U
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=564000
      CCURstream564000.m3u8
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1064000
      CCURstream1064000.m3u8
      #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1664000
      CCURstream1664000.m3u8

      Leider kann ich bisher keine Lösung dafür finden.

      • Sebastian says:

        Sehr schade. Das wäre ein nettes Setup. Meine Synology DS213j im Zusammenspiel mit Kodi.

        Trotzdem vielen Dank für die schnelle Rückmeldung. Ich werde die Seite immer mal wieder besuchen für den Fall das es was neues gibt.

  4. Marcus says:

    Hallo André,

    bin über Carsten auf dein Projekt gestoßen.
    Dein Programm funktioniert bei mir unter Windows 7 64 Bit problemlos, echt toll! Gute Arbeit. Nun besitze ich ein Synology DS 213+ mit FREESCALE QorIQ P1022 Prozessor. Habe versucht deine PHP Version zu betreiben, scheitere aber mit folgendem Fehler:

    Can’t get licensed link for Id: xxxxxx Link: http://cdn1.iptv.kabel-deutschland.de/live-spts/media/arte/transmux/hls.m3u8

    Bin wohl nicht der einzige laut den Kommentaren.. Kommst du mit dem Debugging vorran?

    Grüße

    • Hi Marcus,

      du hast leider das selbe Problem wie schon einige andere mit der SiteGuid.
      Leider hat sich bisher niemand bereit erklärt mir zum debuggen seine Account-Daten zur Verfügung zu stellen bzw. mit Burp die iOS zu loggen.
      Ohne dass komme ich aktuell nicht weiter, da es mit meinem Account funktioniert. Ich würde das Problem sehr gern lösen.

      Beste Grüße,
      André

  5. bshassmann says:

    Hi,

    bei mir gehts leider nicht. Ich bekomme nur die Meldung “Credentials are wrong”. Meine Daten habe ich aber korrekt eingeben. Mein System ist ein Win 8.1.

    LG

  6. Hi, liest sich richtig interessant! Klasse Idee.
    Aber gehe ich recht der Annahme, dass ich das Paket mit einer Ds214 play nicht nutzen kann? Die hat ja einen Intel Atom drin.
    Das wäre ja schade!

    Gruß Daniel

    • Hi Daniel,

      du solltest das Paket eigentlich problemlos auf der DS214play nutzen können.
      Der Intel Atom ist ein normaler X86 Prozessor, du kannst also die Linux Binaries verwenden.
      Ich gehe davon aus, das die 32bit Version die richtige ist.

      Gib bitte kurz bescheid ob es geklappt hat.

      Alternativ hast du bestimmt einen webserver auf der DiskStation am laufen, dann nutze die PHP-Version meines Programms.
      https://github.com/edi-design/kd-streaming-proxy

      Beste Grüße,
      André

      • Hi André,
        das klingt super.
        Ich habe es auf die Syno gepackt und installiert. Daraufhin wurde eine config.json in dem Verzeichnis erstellt. Wenn ich mir die ansehe, steht aber nur NULL drin. Was müsste da eigentlich stehen? chmod habe ich auf testweise auf 777 gesetzt aber da ist echt nichts drin.

        Danke für deine Hilfe!
        Daniel

        • das steht nur in der Log.txt:
          2015-05-06 20:35:11 OUT Using Python (python)…
          2015-05-06 20:35:12 OUT Starting tvstreamrecord v.1.0.5 with Python 2
          2015-05-06 20:35:12 OUT Logging output initialized
          2015-05-06 20:35:12 OUT Initializing database…
          2015-05-06 20:35:12 OUT New database created. Thank you for using this package.
          2015-05-06 20:35:12 OUT Initializing config…
          2015-05-06 20:35:12 OUT Checking internationalization…
          2015-05-06 20:35:12 OUT Initializing records…
          2015-05-06 20:35:12 OUT Initializing EPG import thread…
          2015-05-06 20:35:12 OUT Starting server on: 0.0.0.0:8030

          • Super danke. Das hat mir geholfen. Kleinere Probleme mit dem EPG aber das wird sich schon noch richten. Könnte jedenfalls schon Streams sehen.

            Was ich jetzt noch nicht ganz verstehe: dein Teil liefert die Senderliste wenn ich es per SSH starte mit ./KD… Diese importiere ich. Wenn ich jetzt Putty beende, läuft deins weiter? Oder ist das gar nicht mehr wichtig weil die URLs jetzt immer so bleiben?
            Sry für die Frage aber so groß bin ich jetzt nicht mit Linux unterwegs.
            Will nur wissen ob jetzt dauerhaft dort dein Programm auf der Synology laufen muss und ob das mit dem Befehl so ausreichend ist. Bei dem Synology Paket steht ja eigentlich etwas anderes in der Anleitung. (Term….) nur ich habe ja nun die Linux Variante genutzt und auch diese Befehle ausgeführt.

            Besten Dank für Erleuchtung.
            Gruß, Daniel

          • Mit der aktuellen Version wird eine Playlist generiert, welche auch ohne den Proxy funktioniert.
            Es kann jedoch sein, dass sich die Adressen der Streams ändern, daher ist der Proxy so eingestellt, dass er alle 24h erneut nach den Links fragt.
            Da solltest du nur im Hinterkopf haben, falls die Stream mal nicht mehr laufen, einfach die Playlist neu generieren.

            In der ersten Version war es wichtig, dass der Proxy dauerhaft lief, da die Links per direkten Aufruf an ihn generiert wurden. Das lief aber nicht mit Kodi.
            Jetzt ist es nur noch Bequemlichkeit indem man den Proxy als Playlist aufruft, kümmert er sich automatisch um das generieren neuer Links.

            Beste Grüße,
            André

          • Super André,
            Danke für den schnellen, wertvollen und informativen Support und vor allem deine Leistung für das Tool. Sehr lobenswert! Ich weiß, das hört man gerne 😉

    • Leider nein, ich wüsste nicht wie ich für die FritzBox binaries compilieren kann und leider läuft auch kein PHP-fähiger webserver auf ihr.

      Beste Grüße,
      André

  7. Tim says:

    Hi, ich bekomme im Terminal auf dem Mac nur “-bash: ./kd_proxy: Operation not permitted”. CHMOD habe ich mehrmals ausgeführt und auch die Zugriffsrechte repariert. Wie kann ich das Skript starten?

    • Hi Tim,

      kannst du bitte mal in dem Ordner folgenden Befehl ausführen.
      ls -la
      Es sieht im ersten Moment aus, als wenn du keine executable Rechte hast.
      chmod +x kd_proxy

      Beste Grüße,
      André

  8. Tim says:

    Der ls-Befehl bringt bei mir u.a. folgende Zeile: -rwxr-xrwx@ 1 Tim staff 6804932 6 Mai 14:35 kd_proxy
    Der untere CHMOD-Befehl bringt leider auch keine Besserung. Die Datei liegt direkt in meinem Benutzerordner. Es scheint mir, als hätte ich keine Admin-Rechte in dem Ordner. Wie könnte ich das beheben?

  9. Tim says:

    Problem gelöst 🙂 Bin auf die Idee gekommen, kd_proxy nochmals herunterzuladen, nun klappt es auf Anhieb mit dem chmod Befehl und ich hab wieder etwas über’s Terminal erklärt – auch wenn ich mir den Fehler nicht erklären kann 😉
    Danke für die Unterstützung!

  10. Tim says:

    Da ich Neukunde bei KD bin, funktionierten meine Zugangsdaten gestern noch nicht. Dies klappt nun, allerdings kommt nach Starten des Skripts folgender Fehler:

    == Checking credentials
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal 0xb code=0x1 addr=0x0 pc=0x6577d]

    goroutine 1 [running]:
    kd.signIn()
    /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd/service.go:189 +0x4fd
    kd.Service(0x0)
    /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd/service.go:32 +0x44
    main.main()
    /Volumes/Home/andre/Development/Sources/privat/kd-go/src/kd.go:53 +0x588
    mini:~ Tim$

    Muss im Skript noch etwas angepasst werden?

    • Rene says:

      Hast du eventuell einen Schreibfehler/Syntaxfehler in der config.json gehabt? Bei mir hat es dadurch auch die config.json zerhauen und Inhalt war “null”…

  11. Tim says:

    Hatte mir die config.json vom Mirror runtergeladen. Statt csc-username setze ich meinen Benutzernamen rein, richtig? Habe alles ausprobiert, nun kommt beim Starten des Proxys nur, dass ich meine Benutzerdaten eingeben solle und die config.json ist danach wieder leer (bzw. null). Ich komme da nicht weiter…

    • Eine leere Datei legt er eigentlich nur an, wenn er die config.json nicht finden kann.
      Kannst du bitte in dem Ordner wo config und kd_proxy liegen ein ls -la machen.
      Im ersten Augenschein hast du alles richtig gemacht.

      Was du auch versuchen kannst, einfach mal den Inhalt der richtigen json Datei in die neu angelegte zu kopieren, also das null auszutauschen und erneut starten.

      Beste Grüße,
      André

      • Jonas says:

        Hey André,

        Habe das gleiche Problem unter Mac OS X 10.11
        Bekomme als Ausgabe im Terminal nur “Please edit your configuration at…”

        Die config.json ist soweit aber richtig und liegt auch im selben Ordner wie die kd_proxy. Wird aber nach jedem ausführen durch den Inhalt “null” ersetzt.

        Gibts noch irgendeine andere Problemlösung?

        • Hey Jonas,

          das ist ein komischen Fehlerbild.
          Ich werde mir das mal ansehen.
          Hast du versucht das binary mal mit -c ./config.json auszuführen.
          Mit dem -c Parameter kannst du explizit angeben wo die config liegt.

          Beste Grüße,
          André

          • Hat deine config.json folgenden Inhalt (abgesehn davon dass dein user und pass drin steht) ?

            {
            "Service": {
            "Username": "##username##",
            "Password": "##password##",
            "Listen": ":8787"
            }
            }

          • Jonas says:

            Sieht genauso aus, nur ohne die Hashtags (#)
            Nur nachdem ich die kd_proxy über das Terminal ausführe, ist die config komplett leer, bis auf ein “null”

          • das ist echt strange.
            Hab eben noch mal alles getestet und kann mir nicht erklären woran das liegen kann.

            Folgendermaßen sieht es bei mir aus:

            > $ ll
            total 27160
            -rw-r--r-- 1 andre staff 113B Apr 24 08:41 config.json
            -rwxr-xr-x 1 andre staff 6.0M Oct 6 15:50 kd-proxy-386
            -rwxr-xr-x 1 andre staff 7.3M Oct 6 15:50 kd-proxy-amd64
            -rw-r--r-- 1 andre staff 6.1K Sep 16 10:38 playlist_medium.m3u

            > $ ./kd-proxy-amd64 -c config.json
            == Checking credentials
            done
            == Listening ...
            http://172.23.0.98:8787
            http://172.23.0.122:8787
            http://172.28.128.1:8787

            Kannst du mir bitte einen ähnlichen Auszug von deinem Set-Up schicken.

            Beste Grüße,
            André

    • Hi Thilo,

      sofern es im Plex auch möglich ist mit m3u Playlist zu arbeiten, dann sollte es laufen.
      Folgendes Plugin habe ich beim Suchen entdeckt: https://github.com/Cigaras/IPTV.bundle.

      Wenn du es zum laufen bekommen hast, dann schreibe bitte noch einmal. Dann kann ich die Anleitung um Plex erweitern 😉

      Beste Grüße,
      André

      • Markus says:

        Funktioniert mit dem o.g. Plugin perfekt.
        Einfach nach der Installationsanleitung vorgehen:
        – Archiv in das Plugins-Verzeichnis entpacken
        – In der Playlistadresse einfach “http://127.0.0.1:8787” eingetragen
        – Plex neustarten
        – Stream starten

        Das User Interface ist natürlich nicht so ideal, wie in der nativen KD-App, aber man kann die Streams wunderbar öffnen und sich ggf. auch außerhalb des Heimnetzwerks streamen…

  12. Tim says:

    Hi, das mit dem Austauschen habe ich schon erfolglos probiert. Hier ist das Ergebnis vom ls -la:

    -rw-r–r–@ 1 Tim staff 4 11 Mai 02:32 config.json
    -rwxr–r–@ 1 Tim staff 6804932 7 Mai 23:25 kd_proxy

    • Ich glaube, die größe der config.json ist definitiv zu klein mit 4byte.
      Schau bitte nochmal da rein, ob du wirklich den Inhalt wie folgt eingefügt hast:
      {
      "Service": {
      "Username": "csc-username",
      "Password": "csc-password",
      "Listen": ":8787"
      }
      }

      Bei mir sieht das ls -la so aus, config.json 122 byte:

      -rw-r--r-- 1 andre staff 112B 11 Mai 21:05 config.json
      -rwxr-xr-x 1 andre staff 6,5M 26 Apr 13:04 kd_proxy

      andre@mbp-andre ~/Development/Sources/private/kd-go/build/mac [21:05:19]
      > $ ./kd_proxy [±master ●●]
      == Checking credentials
      done
      == Listening ...
      http://192.168.178.23:8787

      Der proxy überschreibt die config, wenn sie nicht konform ist. Ich hoffe, dass hilft dir.

      Beste Grüße,
      André

  13. Tim says:

    Was soll ich sagen, nun läuft’s! 🙂
    Habe mit den Einstellungen von Textedit rumgespielt, kann sein, dass es an der Kodierung der config.json lag. Also vielen Dank nochmals für die Unterstützung und den Komfort, den der Proxy ermöglicht! Mache mich nun daran, den Proxy in Kodi einzubinden. Mal sehen, vielleicht klappt dies auch mit einem EPG.

    Viele Grüße

    Tim

    • Super, dass freut mich.
      EPG funktioiert, wenn man die Streams in tvheadend einträgt. Leider ist das ne bescheidene Handarbeit, daher habe ich noch keine Anleitung geschrieben wie das geht.

      Bestw Grüße,
      André

    • Seko says:

      So viel Hilfe bekommen und dann nicht mal den Lösungsweg teilen?!! Eine Antwort für Lars, wäre auch für mich sehr hilfreich.

      VG

  14. Ronny says:

    Hab das ganze mal unter Windows probiert mir ist nur aufgefallen das in der Wiedergabeliste z.B. RTL, RTL2, SuperRTL nicht angezeigt wird kann mir jemand sagen ob das bei euch auch so ist oder ist die Liste einfach in der Anzahl der Sender begrenzt?

    • KabelDeutschland darf die komplette RTL-Gruppe nicht als Stream anbieten. RTL verbietet es lizenzrechtlich, da sie mit RTL-Now ihr eigenes Angebot promoten wollen.

      Beste Grüße,
      André

  15. Heiko says:

    hi,
    ich bekomme jedes mal wenn ich den Befehl ./kd_proxy ausführe, dieses ergebnis: Please edit your configuration at: /Users/highco/Documents/config.json obwohl ich die daten geändert hatte, sagt er mir das jedes mal, mac variante. woran kann das liegen?

    vielen dank schon mal

    gruss
    heiko

    • Hi Heiko,

      mit welcher Version des Proxies arbeitest du gerade?
      ./kd_proxy --version

      Die config.json muss im selben Ordner wie das binary (kd_proxy) selbst liegen und so aussehen, wie das Beispiel in der Dropbox bzw. auf Mega.

      {
      "Service": {
      "Username": "username",
      "Password": "password",
      "Listen": ":8787"
      }
      }

      Beste Grüße,
      André

  16. Klausi says:

    Hi André,
    funktioniert super auf Mac. Nun wollte ich das Ganze auf meinem QNAP laufen lassen (QTS 4.1, TS-451S). Leider bekomme ich die Meldung “Credentials are wrong” – obwohl die selben auf dem Mac laufen.
    Hast Du eine Idee?
    Danke
    Klausi

    • Hi,

      versuch bitte die config noch einmal zu löschen und komplett neu anzulegen. Es gab einen anderen User, welcher das Problem hatte, dass das encoding der config beim Transfer auf sein NAS kaputt ging und er deshalb den selben Fehler bekam wie du.

      Falls das nicht hilft, melde dich bitte noch einmal.

      Beste Grüße,
      André

      • Klausi says:

        Danke für die schnelle Antwort.

        Nein es geht leider nicht.

        == Checking credentials
        Credentials are wrong

        Die Meldung kommt sehr schnell, so dass es scheint, als ob die credentials überhaupt nicht überprüft werden…
        Grüße
        Klaus

        • Hi Klaus,

          entschuldige bitte, dass es erst so spät wieder Antworte. Die Hitzewelle hat mich vom Rechner fern gehalten 😉

          Dass die Meldung so schnell kommt ist durchaus richtig. Das Programm fragt als allererstes bei KabelDeutschland nach einem validen Account mit deinen Zugangsdaten an. Was ich mir aber nicht erklären kann ist, dass es auf deinem Rechner funktioniert, auf dem NAS aber nicht.

          Kannst du bitte folgendes bei dir Aufrufen. Dies ist der Call, der an KabelDeutschland zum authentifizieren gesendet wird. Bitte führe den auf einem Terminal auf deinem NAS aus. Natürlich vorher mit deinem Benutzername und Password austauschen.

          curl -i -s -k -X 'POST' \
          -H 'Content-Type: application/json;charset=utf-8' -H 'User-Agent: TV 1.1.5 rv:1.2.2 (iPhone; iPhone OS 8.1.2; en_US)' \
          -b 'ASP.NET_SessionId=e2uy4v45t5fafz45pim0yx45' \
          --data-binary $'{\"password\":\"###DEIN PASSWORD###\",\"providerID\":0,\"userName\":\"###DEIN USERNAME###\",\"initObj\":{\"ApiUser\":\"tvpapi_181\",\"UDID\":\"D2AC633AFB644CF0A67505370578CDE5\",\"DomainID\":336085,\"Platform\":\"iPad\",\"ApiPass\":\"azNDLzsnTBTtArVW2SHR\",\"Locale\":{\"LocaleDevice\":\"null\",\"LocaleUserState\":\"Unknown\",\"LocaleCountry\":\"null\",\"LocaleLanguage\":\"null\"},\"SiteGuid\":\"638452\"}}' \
          'https://api-live.iptv.kabel-deutschland.de/v2_9/gateways/jsonpostgw.aspx?m=SSOSignIn&iOSv=8.1.2&Appv=1.1.5'

          Beste Grüße,
          André

          • Klausi says:

            Hallo André

            Danke für die Antwort. Ja die Hitze schafft einen…

            ich habe es ausprobiert und bekomme “dos charset ‘CP850’ unavailable – using ASCII” – mehr nicht.

            Was hättest Du erwartet? Was hätte kommen sollen?

            Grüße
            Klaus

          • Folgendes hätte so in etwa kommen sollen.

            HTTP/1.1 200 OK
            Cache-Control: private
            Content-Type: application/json; charset=utf-8
            Server: Microsoft-IIS/8.5
            Access-Control-Allow-Origin: *
            X-AspNet-Version: 2.0.50727
            X-Powered-By: ASP.NET
            Date: Sun, 05 Jul 2015 17:50:30 GMT
            Content-Length: 696

            {"SiteGuid":"679869","DomainID":336085,"LoginStatus":0,"UserData":{"m_oBasicData":{"m_sUserName":"###dein username###","m_sFirstName":"","m_sLastName":"","m_sEmail":"","m_sAddress":"","m_sCity":"","m_State":null,"m_Country":null,"m_sZip":"","m_sPhone":"","m_sFacebookID":"","m_sFacebookImage":"","m_bIsFacebookImagePermitted":false,"m_sAffiliateCode":"","m_CoGuid":"","m_ExternalToken":"","m_sFacebookToken":"","m_sTwitterToken":"","m_sTwitterTokenSecret":"","m_UserType":{"ID":null,"Description":"","IsDefault":false}},"m_oDynamicData":{"m_sUserData":[{"m_sDataType":"ext_status","m_sValue":"0"}]},"m_sSiteGUID":"679869","m_domianID":336085,"m_isDomainMaster":true,"m_eUserState":0,"m_nSSOOperatorID":0}}%

            Deine Fehlermeldung ist mir völlig unbekannt. Ein wenig googlen danach, zeigt mir, dass es ein Problem bei QNAP ist. Die Code-Page fehlt bei einer lib. Hast du auf deinem NAS einen webserver laufen, welcher PHP kann? Dann könntest du auf den PHP-Proxy von mir ausweichen (https://github.com/edi-design/kd-streaming-proxy).