ubuntuusers.de

RTMPDump

Status: Gelöst | Ubuntu-Version: Ubuntu 8.04 (Hardy Heron)
Antworten |

ElZar

Anmeldungsdatum:
29. September 2007

Beiträge: 38

Moin Forum.

Ich schaffs leider nicht RTMPDump zu compilen, evtl hat hier jmd ne Idee. OpenSSL ist installiert, ka was für Verzeichnisse da gesucht werden.. Folgende Ausgabe erscheint:

make rtmpdump
g++ -Wall   -c -o rtmp.o rtmp.cpp
In Datei, eingefügt von rtmp.h:43,
                 von rtmp.cpp:36:
dh.h:21:24: Fehler: openssl/bn.h: No such file or directory
dh.h:22:24: Fehler: openssl/dh.h: No such file or directory
dh.h:24:25: Fehler: openssl/sha.h: No such file or directory
dh.h:25:26: Fehler: openssl/hmac.h: No such file or directory
dh.h:26:25: Fehler: openssl/rc4.h: No such file or directory
In file included from rtmp.h:43,
                 from rtmp.cpp:36:
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »y« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »p« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »q« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:31: Fehler: expected constructor, destructor, or type conversion before »*« token
dh.h:32: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:32: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: expected primary-expression before »*« token
dh.h:33: Fehler: »pubkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: expected primary-expression before »nPubkeyLen«
dh.h:33: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:34: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: expected primary-expression before »*« token
dh.h:34: Fehler: »privkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: expected primary-expression before »nPrivkeyLen«
dh.h:34: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:35: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: expected primary-expression before »*« token
dh.h:35: Fehler: »pubkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: expected primary-expression before »nPubkeyLen«
dh.h:35: Fehler: expected primary-expression before »*« token
dh.h:35: Fehler: »secret« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:36: Fehler: Variable oder Feld »DHFree« als »void« deklariert
dh.h:36: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:36: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
In file included from rtmp.cpp:36:
rtmp.h:94: Fehler: ISO-C++ verbietet Deklaration von »DH« ohne Typ
rtmp.h:94: Fehler: expected »;« before »*« token
rtmp.h:95: Fehler: ISO-C++ verbietet Deklaration von »RC4_KEY« ohne Typ
rtmp.h:95: Fehler: expected »;« before »*« token
rtmp.h:96: Fehler: ISO-C++ verbietet Deklaration von »RC4_KEY« ohne Typ
rtmp.h:96: Fehler: expected »;« before »*« token
rtmp.cpp: In member function »int RTMP_LIB::CRTMP::ReadN(char*, int)«:
rtmp.cpp:450: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyIn«
rtmp.cpp:451: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyIn«
rtmp.cpp:451: Fehler: »RC4« wurde in diesem Gültigkeitsbereich nicht definiert
rtmp.cpp: In member function »bool RTMP_LIB::CRTMP::WriteN(const char*, int)«:
rtmp.cpp:469: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyOut«
rtmp.cpp:471: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyOut«
rtmp.cpp:471: Fehler: »RC4« wurde in diesem Gültigkeitsbereich nicht definiert
make: *** [rtmp.o] Fehler 1

Den 2. Schritt hab ich dann auch versucht, kommt aber die selbe Meldung (was zu erwarten war):

make streams
g++ -Wall   -c -o rtmp.o rtmp.cpp
In Datei, eingefügt von rtmp.h:43,
                 von rtmp.cpp:36:
dh.h:21:24: Fehler: openssl/bn.h: No such file or directory
dh.h:22:24: Fehler: openssl/dh.h: No such file or directory
dh.h:24:25: Fehler: openssl/sha.h: No such file or directory
dh.h:25:26: Fehler: openssl/hmac.h: No such file or directory
dh.h:26:25: Fehler: openssl/rc4.h: No such file or directory
In file included from rtmp.h:43,
                 from rtmp.cpp:36:
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »y« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »p« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »BIGNUM« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: »q« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:30: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:31: Fehler: expected constructor, destructor, or type conversion before »*« token
dh.h:32: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:32: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: expected primary-expression before »*« token
dh.h:33: Fehler: »pubkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:33: Fehler: expected primary-expression before »nPubkeyLen«
dh.h:33: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:34: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: expected primary-expression before »*« token
dh.h:34: Fehler: »privkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:34: Fehler: expected primary-expression before »nPrivkeyLen«
dh.h:34: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:35: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: expected primary-expression before »*« token
dh.h:35: Fehler: »pubkey« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: expected primary-expression before »nPubkeyLen«
dh.h:35: Fehler: expected primary-expression before »*« token
dh.h:35: Fehler: »secret« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:35: Fehler: initializer Ausdrucksliste als zusammengesetzten Ausdruck behandelt
dh.h:36: Fehler: Variable oder Feld »DHFree« als »void« deklariert
dh.h:36: Fehler: »DH« wurde in diesem Gültigkeitsbereich nicht definiert
dh.h:36: Fehler: »dh« wurde in diesem Gültigkeitsbereich nicht definiert
In file included from rtmp.cpp:36:
rtmp.h:94: Fehler: ISO-C++ verbietet Deklaration von »DH« ohne Typ
rtmp.h:94: Fehler: expected »;« before »*« token
rtmp.h:95: Fehler: ISO-C++ verbietet Deklaration von »RC4_KEY« ohne Typ
rtmp.h:95: Fehler: expected »;« before »*« token
rtmp.h:96: Fehler: ISO-C++ verbietet Deklaration von »RC4_KEY« ohne Typ
rtmp.h:96: Fehler: expected »;« before »*« token
rtmp.cpp: In member function »int RTMP_LIB::CRTMP::ReadN(char*, int)«:
rtmp.cpp:450: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyIn«
rtmp.cpp:451: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyIn«
rtmp.cpp:451: Fehler: »RC4« wurde in diesem Gültigkeitsbereich nicht definiert
rtmp.cpp: In member function »bool RTMP_LIB::CRTMP::WriteN(const char*, int)«:
rtmp.cpp:469: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyOut«
rtmp.cpp:471: Fehler: »struct RTMP_LIB::LNK« hat kein Element namens »rc4keyOut«
rtmp.cpp:471: Fehler: »RC4« wurde in diesem Gültigkeitsbereich nicht definiert
make: *** [rtmp.o] Fehler 1

Ich hoffe ihr habt ne Ahnung woran das liegt, das RTMPDump Projekt gibts ja leider nicht mehr auf Sourceforge.

Grüße

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

Keiner ne Ahnung? Hab zwar Binaries gefunden, aber da ist rtmpe nicht mit drin.

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Sieht ganz so aus, als fehlten irgendwelche openssl-development-Header oder so. Schau mal, ob es ein openssl-dev-Paket gibt.

Nachtrag: Das Paket, das fehlt, ist libssl-dev.

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

Coole Sache, das wars.

Nu hab ich leider gleich das nächste Problem. Bin wohl zu doof das richtig zu benutzen. Wollte zb diesen Stream von MTV capturen: http://www.mtv.de/videos/20119251

Mit einem URL-Sniffer bin ich an diese Adresse gekommen: rtmp://cp22006.edgefcs.net/ondemand/mtviestor/_!/intlod/de/_flash/musikvideos/mando_diao/mando_diao_gloria_od_flv.flv

Wenn ich nun versuche den Stream zu capturen, kommt nur folgendes:

./get_iplayer -g 'rtmp://cp22006.edgefcs.net/ondemand/mtviestor/_!/intlod/de/_flash/musikvideos/mando_diao/mando_diao_gloria_od_flv.flv'
  get_iplayer v1.90, Copyright (C) 2009 Phil Lewis
  This program comes with ABSOLUTELY NO WARRANTY; for details use --warranty.
  This is free software, and you are welcome to redistribute it under certain
  conditions; use --conditions for details.


INFO: 0 Matching Programmes

Der Befehl "rtmpdump" ist irgendwie garnicht verfügbar... weißt du vlt auch wie ich das richtig benutze? ☺

THX schonmal :>

fnordschrat

Anmeldungsdatum:
17. Oktober 2007

Beiträge: 562

get_iplayer ist ausschließlich für das Onlineangebot der BBC. Wenn das Programm erfolgreich kompiliert wurde, müsste die Datei rtmpdump_x86 vorhanden sein.

./rtmpdump_x86 -r 'rtmp://cp22006.edgefcs.net/ondemand/mtviestor/_!/intlod/de/_flash/musikvideos/mando_diao/mando_diao_gloria_od_flv.flv' -o mtvkrach.flv

Grüße

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

Jo das wars, fettes THX an euch beide :>

BTW, "MTVKrach.flv" war ein guter Name für die Ausgabe *g* ...hab den Song nur für meine kleine Schwester gesaugt die "Gloria" heisst 😉 Aber für nen Song auf MTV ist der garnicht so schlecht, steh eigentlich auf so Retro-Sound :>

Wie auch immer, THX nochmal.

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Wir befreien Mando Diao - Gloria aus dem mtv-Video-Archiv

Vorab: Wir haben schon auf mtv.de/videos nach dem Video geschaut und die Adresse der Video-Seite herausgefunden. Sie lautet http://www.mtv.de/videos/20119251 . Wir merken uns die öffentliche ID 20119251.

Vorbereitungen: Wir installieren libssl-dev sowie curl und schnappen uns die Sources von rtmpdump

Ermitteln der rtmp-URI: 1. Wir schauen im im Quelltext von http://www.mtv.de/videos/20119251 nach der Zeile:

1
var uri = "mgid:uma:video:mtv.de:379829";

und merken uns die interne ID also 379829.2. Nun werfen wir einen Blick auf http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid=379829&hiLoPref=hi. (Die Zahl hinter vid= ist übrigens die interne ID.) In dieser xml-Datei befindet sich ein <src>-Tag, das die rtmp-URI enthält. Genau die brauchen wir.

Die beiden Schritte als shell-Befehl:

 
curl "http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid=$(curl http://www.mtv.de/videos/20119251 2>/dev/null | grep uri | cut -d: -f5 | cut -d\" -f1)&hiLoPref=hi" 2>/dev/null | grep rtmp | cut -d\> -f2 | cut -d\< -f1
 

Herunterladen der .flv-Datei:

./rtmpdump_x86 -r rtmp://cp22006.edgefcs.net/ondemand/mtviestor/_!/intlod/de/_flash/musikvideos/mando_diao/mando_diao_gloria_od_flv.flv -o mando_diao_gloria.flv

Alternativ: rtmp-URI ermitteln und flv herunterladen in einem Schritt

./rtmpdump_x86 -r $(curl "http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid=$(curl http://www.mtv.de/videos/20119251 2>/dev/null | grep uri | cut -d: -f5 | cut -d\" -f1)&hiLoPref=hi" 2>/dev/null | grep rtmp | cut -d\> -f2 | cut -d\< -f1) -o mando_diao_gloria_od_flv.flv

Viel Spaß damit (: (Übrigens bin ich auch über die mtv.de/videos auf rtmpdump gestoßen!)

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

also an die URL kommt man zb leichter mit URL Snooper. kenne davon zwar leider keine Linuxversion, aber man müsste es mal mit wine testen.. obwohl dein "Alternativ-Befehl" auch was für sich hat :>

ich bin übrigens hauptsächlich durch adobe auf rtmpdump aufmerksam geworden, hätten die nicht so einen aufstand geschoben, wäre das an mir vorbei gegangen :>

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Ich finde nicht, dass der URL Snooper einfacher ist als nen Konsolenbefehl. Der Grund, weswegen man das Video lädt ist ja, dass den Flashplayer bei rtmp unter 64bit Systemen abstürzt. Daher würde man auch mit dem URL Snooper nicht weit kommen (btw. Firebug für Firefox tut das gleiche wie der URL Snooper).

Der Alternativ-Befehl ist ja "nur" Ermitteln der rtmp-URI und herunterladen als ein einzelner Befehl. Das macht eigentlich Jedes zusätzliche Programm neben curl und rtmpdump überflüssig.

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

hm naja, jedesmal den befehl anzupassen erscheint mir irgendwie umständlicher als im urlsnooper (oder ähnlichem) die rtmp adresse zu kopieren und sie in die konsole mit "./rtmpdump_x86 -r 'adresse' ausgabe.flv" einzufügen. trotzdem danke für die lösung :>

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Bis ich die URI mit URL snooper rausgefunden hab, ist der Befehl zehn mal angepasst (:

Aber okeh. Hier meine mtv.sh:

1
2
3
4
5
6
7
8
9
#!/bin/sh
########################
##                    ##
## ~MTV Video Ripper~ ##
## 2009 Funatiker GPL ##
##                    ##
########################

./rtmpdump_x86 -r $(curl "http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid=$(curl http://www.mtv.de/videos/$1 2>/dev/null | grep uri | cut -d: -f5 | cut -d\" -f1)&hiLoPref=hi" 2>/dev/null | grep rtmp | cut -d\> -f2 | cut -d\< -f1) -o $1.flv

Dann musst du nur noch das Script gefolgt von der öffentlichen Video-ID aufrufen und schon landet die Datei auf deiner Festplatte. (In meinem Fall geht das z.B. mit ~/rtmpdump/mtv.sh 20119251 - je nachdem, wo du das Script gespeichert hast)

ElZar

(Themenstarter)

Anmeldungsdatum:
29. September 2007

Beiträge: 38

so gefällt mir das schon besser, danke dir ;>

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Bitte (: Man hilft doch, wo man kann..

A propos: Mir fällt grad ne Marktlücke auf: Es gibt schon tausende youtube → mp3 Seiten. Aber wo bleibt die mtv.de/video → ogg Seite 😀

Nachtrag: Wie mir SilverSurfer2009 mitteilte, funktioniert das Script zum Herunterladen von Musikvideos bei MTV.de nicht mehr. Vor einiger Zeit stellte ich schon fest, dass MTV manche Videos von rtmp auf http umgestellt hatte. Der Verdacht bestätigte sich: Genau wegen dieser Umstellung ist das Script nicht mehr zu gebrauchen. Ich passte das Script so an, dass es sowohl rtmp als auch http unterstützt. Erst danach bemerkte ich, dass quasi kein Video mehr über rtmp verfügbar ist… Wie dem auch sei. Hier das funktionierende Script:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/bin/sh
########################
##                    ##
## ~MTV Video Ripper~ ##
## 2009 Funatiker GPL ##
##                    ##
########################
uri=$(curl "http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid=$(curl http://www.mtv.de/videos/$1 2>/dev/null | grep uri\ \= | cut -d: -f5 | cut -d\" -f1)&hiLoPref=hi" 2>/dev/null | grep "<src>" | cut -d\> -f2 | cut -d\< -f1)
proto=$(echo $uri | cut -d\: -f1)
if [ "$proto" = "http" ]; then
    wget $uri -O $1.flv
elif [ "$proto" = "rtmp" ]; then
    ./rtmpdump_x86 -r $uri -o $1.flv
else
    echo FAIL $proto $uri
fi

danjoh

Anmeldungsdatum:
28. Januar 2010

Beiträge: 14

Ich hab mal noch ne Frage zu RTMPDump...

Ist es möglich in dem Skript auch eine "Auto Resume" Funktion für den rtmpdump Befehl einzubauen? Bei Streams von anderen Seiten bricht er bei mir zwischendurch ab und man muss den Befehl noch mit dem Parameter --resume aufrufen um den Stream weiter zu laden.

Ich hab schon probiert mit grep z.B. die Wörter "Download may be incomplete" abzufragen und falls sie gefunden werden den Befehl mit --resume zu wiederholen bis die Wörter in der Ausgabe nicht mehr erscheinen... sprich: der Download fertig ist. Aber irgendwie kann grep die Ausgabe von rtmpdump nicht verarbeiten. ☹

#!/bin/sh

RDUMP="$(~/MyApps/rtmpdump/rtmpdump_x86 -r rtmpe://... -s http://... -p http://... -y "..." -e -o "..." --resume)"

echo $RDUMP | grep "Download may be incomplete"

if [  $GREP  ]
	then
		echo "True"
	else
		echo "False"
fi

Es wird immer False angezeigt, obwohl die vorletzte Zeile von der rtmpdump Ausgabe "WARNING: Download may be incomplete (downloaded about 3.7%), try --resume!" heißt. Was mache ich falsch? ☺

Funatiker

Anmeldungsdatum:
24. November 2007

Beiträge: 123

Wohnort: Pirmasens

Erscheint die Fehlermeldung wirklich auf der Standardausgabe? (Also nicht als Fehler?) (Wenn das der Fall ist, müsste dein erster Echo-Befehl mindestens eine Rückgabe haben)

if [ $(echo $RDUMP | grep -c "Download may be incomplete") -gt 0 ]
then
…
fi
Antworten |