RTMP-Streams von diversen Mediatheken speichern

In einem früheren Blog-Beitrag (HIER) hatte ich bereits beschrieben, wie man sich die Videos aus der N24-Mediathek lokal speichern konnte. Dies war aber ein sehr spezielles und individuelles Verfahren, deswegen möchte ich heute eine wesentlich elegantere Lösung vorstellen, welche auch theoretisch bei dem überwiegenden Teil aller Streaming-Seiten funktionieren sollte.

Außerdem funktioniert wohl die bisher beschriebene Methode auf der N24-Seite nicht mehr, da das HTML-Design grundlegend verändert wurde. Folgende Methode ist da etwas weniger anfällig für solche Änderungen.

Im Prinzip ist das hier nur eine Übersetzung folgenden englischen Blog-Beitrages:

http://stream-recorder.com/forum/use-rtmpdump-rtmpsrv-linux-t7661.html

Zuerst einmal muss man sich, wenn nicht bereits vorhanden, das Programm rtmpdump installieren:

sudo apt-get install rtmpdump

Nun öffnet man die Video-Seite, beispielsweise eine N24-Mediathek-Seite und pausiert das Video, falls es automatisch startet.

Nun konfiguriert man iptables (Firewall) so, dass der RTMP-Traffic vom folgenden Port umgeleitet wird:

sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT

Dann rtmpsrv starten (ist bei rtmpdump dabei):

rtmpsrv

Und nun einfach zurück zur Stream-Seite wechseln und diese neuladen, damit das Video geladen/gestartet wird. Nun sollte parallel durch rtmpsrv im Terminalfenster eine Menge Output entstehen.

Im Fall von der N24-Mediathek und eines beliebigen Beispiel-Videos kann das dann folgendermaßen aussehen:

XXX@XXX:~$ sudo iptables -t nat -A OUTPUT -p tcp --dport 1935 -j REDIRECT
[sudo] password for XXX:
XXX@XXX:~$ rtmpsrv
RTMP Server v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL

Streaming on rtmp://0.0.0.0:1935
WARNING: Trying different position for client digest!

rtmpdump -r "rtmp://pssimn24livefs.fplive.net/pssimn24/" -a "pssimn24/" -f "LNX 11,2,202,280" -W "http://www.n24.de/_swf/HomePlayer.swf?cachingVersion=2" -p "http://www.n24.de" -y "mp4:cm2013/cmp/8b10/0a6c/4f17/6e4b/e3cce7aa52bbda6abc745f97d3dc7b04_1000.mp4" -o e3cce7aa52bbda6abc745f97d3dc7b04_1000.flv

Closing connection... done!

RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
Duplicate request, skipping.
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
Closing connection... done!

ERROR: RTMP_ReadPacket, failed to read RTMP packet header

Das schöne an dieser Methode ist, dass uns gleich alle wichtigen Parameter für rtmpdump generiert werden und man eigentlich nur noch den langen Kommandozeilenbefehl in der Mitte kopieren und ausführen muss.

Vorher muss man aber ggf. per STRG+C rtmpsvr beenden und iptables wieder rekonfigurieren:

sudo iptables -t nat -D OUTPUT -p tcp --dport 1935 -j REDIRECT

Nun kann man wie gesagt den Befehl ausführen und das Video downloaden, somit entfällt das mühselige selber Zusammensuchen der einzelnen Parameter im Quelltext.

Das kann wie gesagt nicht immer funktionieren, z. B. wenn zusätzliche Schutzmaßnahmen vom Betreiber der Streaming-Site getroffen wurden oder wenn der Stream nicht über das RTMP-Protokoll basiert (z. B. Flash), aber meistens klappt es.
Ich habe das mal mit der RTMP Server Version 2.4 für diverse Portale getestet:

  • N24-Mediathek funktioniert (Live-Stream benötigt extra noch die Option -v, siehe unten)
  • VOX NOW-Mediathek funktioniert
  • ARTE-Mediathek funktioniert leider nicht
  • RTL NOW-Mediathek theoretisch ja, aber hier wird nur die Werbung gedownloadet, aber nicht der eigentliche Stream
  • Pro7-Mediathek leider nicht
  • ARD-Mediathek funktioniert

Ich möchte an der Stelle betonen, dass es unzählige Parameter gibt, die zum Erfolg führen. Manchmal reicht schon eine neue rtmpsrv-Version (falls vorhanden) als die, die in den Ubuntu-Repository ist (an Besten per git downloaden: http://rtmpdump.mplayerhq.hu/) oder es gibt diverse Workarounds für jede Seite oder es wurde einfach ein anderer Port als 1935 genutzt.
Die ARTE-Mediathek und die Dritten werden z. B. ausführlich auf der ubuntuuser-Seite behandelt:

http://wiki.ubuntuusers.de/Streams_speichern

Im zweiten Link oben wird z. B. noch eine Methode beschrieben, bei der man ein Speicherabbild des Flash-Prozesses erstellt und dieses durchsucht.
Ich sage mir immer, alles was ich im Browser angucken kann, dass kann ich auch auf dem Rechner speichern und da hindert mich kein Kopierschutz der Welt daran. Die Frage ist nur, wie schwer wird es einem dabei gemacht und wieviel technisches Wissen muss ich aufbringen.

Es ist sogar problemlos möglich den Live-Stream von N24 zu speichern. Wenn man hier wieder rtmpsrv wie beschrieben benutzt, dann erhält man folgenden Code:

rtmpdump -r "rtmp://pssimn24livefs.fplive.net/pssimn24live-live/" -a "pssimn24live-live/" -f "LNX 11,2,202,280" -W "http://www.n24.de/_swf/HomePlayer.swf?cachingVersion=2" -p "http://www.n24.de" -y "stream1" -o stream1.flv

An diesen Code muss man einfach nur noch die Option -v für Live-Stream anhängen und schon kann man den Stream speichern:

rtmpdump -r "rtmp://pssimn24livefs.fplive.net/pssimn24live-live/" -a "pssimn24live-live/" -f "LNX 11,2,202,280" -W "http://www.n24.de/_swf/HomePlayer.swf?cachingVersion=2" -p "http://www.n24.de" -y "stream1" -o stream1.flv -v

Wesentlich interessanter finde ich an der Stelle aber den Live-Stream per Pipe-Operator an VLC weiterzuleiten, so dass man nicht mal einen Browser braucht:

rtmpdump -r "rtmp://pssimn24livefs.fplive.net/pssimn24live-live/" -a "pssimn24live-live/" -f "LNX 11,2,202,280" -W "http://www.n24.de/_swf/HomePlayer.swf?cachingVersion=2" -p "http://www.n24.de" -y "stream1" -v | cvlc -

Es gibt nämlich auch diverse Seiten im Netz, bei denen man das normale TV-Programm über das Internet schauen kann. Solche Seiten finanzieren sich zum großen Teil über Werbung und wem das zu nervig ist, der kann das natürlich so leicht umgehen.

Möglich wäre auch den Stream per DLNA (siehe: http://wiki.ubuntuusers.de/MiniDLNA) auf den Fernseher des Vertrauens weiterzuleiten.
Dazu müsste man aber einen Weg finden, dass der Fernseher immer nur den letzten Teil des gespeicherten Streams wiedergibt oder man begnügt sich damit jedes mal im Stream nach vorne zu spulen, falls das überhaupt möglich ist (meistens ist das Seeking dann nämlich nicht möglich), da der Fernseher die Datei ja bereits wiedergeben muss, während sie noch gespeichert wird.
Außerdem würde natürlich bei entsprechender Dauer jedesmal eine immense Datenmenge auf dem Computer entstehen.

Aus Erfahrung weiß ich, dass das TV-Gerät eine unfertige Datei bereits wiedergibt, aber eben das Springen im Video nicht möglich ist.

Eine Möglichkeit wäre in folgendem Link beschrieben, bei der der Author ein FUSE-Dateisystem geschrieben hat, was das erforderliche Wiedergeben des letzten Teiles der Datei ermöglicht, allerdings konnte ich hiermit noch keine Erfolge verbuchen, da man das Skript wahrscheinlich anpassen müsste und ich kein Python beherrsche:

http://realmike.org/blog/2011/02/09/live-desktop-streaming-via-dlna-on-gnulinux

Aber ich kann auch ohne diese Möglichkeit leben. 🙂

Advertisements
Dieser Beitrag wurde unter Linux, Software, Tutorial, Ubuntu, Ubuntu 12.04 Precise Pangolin (64-Bit) abgelegt und mit , , , , , , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s