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.
- PVR IPTV Simple Client
- PVR IPTV Simple Client configuration
- Kodi Live-TV configuration
- Channel overview
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.
- Playlist upload to tvstreamrecord
- Channel overview
- FFMPEG configuration
thumbs up! 🙂
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é
OK, schade :(.
Danke für die Info.
Gruß
Sebastian
Gibt es eine Chance etwas ähnliches für Unitymedia zu zaubern?
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é
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é
Die aktuelle Version bringt nun eine Aussagekräftige Fehlermeldung.
Beste Grüße,
André
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é
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é
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é
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é
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é
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.
Hallo,
stimmt ja, habe grade gar nicht dran gedacht das VPN nach Hause aufzubauen, um von unterwegs TV gucken zu können.
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é
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.
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.
Es ist zwar ein Debian, aber arg entschlackt. Ich hatte leider auf deren Seite keine Infos über die tatsächlichen Änderungen gefunden :-/
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é
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é
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
Selbes Problem hier. Wenn der autostart funktionieren würde, wäre viel gewonnen 😉
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é
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”.
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é
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é
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.
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 😉
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.
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.
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?
Für openelec gibt es die autostart.sh (http://wiki.openelec.tv/index.php?title=Autostart.sh)
ungetestet, aber eigentlich sollte es mit folgendem code gehen:
(
/full/path/to/kd_proxy -c /full/path/to/config.json
) &
@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!
Hi
gibt es eine Möglichkeit den Proxy auch auf den firestick zum laufen zu bringen ?
Der hat wohl ein Arm 9 cpu.
Lg
Dennis
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)
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é
Hey Andre,
danke für die schnelle Antwort, dann warte und hoffe ich einmal 😉
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.
Ist es möglich die Streams von der ANdroid App mittels Wireshark abzufangen?
Leider auch nicht.
Beide Apps, iOS und Android haben den neuen Zertifikats-Check integriert.
Aber ich bin dennoch voran gekommen mit einem Fix 😉
http://freshest.me/update-3-progress-on-fixing-the-problem/
Beste Grüße,
André
Hi,
gibt es schon etwas neues wegen dem “could not fetch” problem?
Danke schonmal im voraus 🙂