ubugnu@ubugnu-laptop:~$ sudo apt-get install tshark rtmpdumpSi vous n'avez pas envie d'ajouter des dépôts pour installer rtmpdump, simplement installez ces deux paquets dans l'ordre:
- http://ubuntu.mirror.cambrium.nl/ubuntu//pool/universe/r/rtmpdump/librtmp0_2.3-2_i386.deb
- http://security.ubuntu.com/ubuntu/pool/universe/r/rtmpdump/rtmpdump_2.3-2_i386.deb
PS: pour les autres architectures simplement rechercher dans les mêmes dossiers.
On aura aussi besoin d'un lecteur vidéo qu'on puisse utiliser en ligne de commande, optez pour mplayer (léger mais j'ai remarqué qu'on ne pouvait pas rendre la vidéo plein-écran):
ubugnu@ubugnu-laptop:~$ sudo apt-get install mplayerou vlc (très complet):
ubugnu@ubugnu-laptop:~$ sudo apt-get install vlcSi vous optez pour mplayer il faudra mettre à la fin de chaque commande
mplayer -
pour lire le flux, si vous optez pour vlc préférez la version en ligne de commande cvlc en mettant à la fin de chaque commande | cvlc -
Maintenant voyons comment on a utilisé rtmpdump dans le billet précédant:ubugnu@ubugnu-laptop:~$ rtmpdump -qv -r rtmp://livestfslivefs.fplive.net/livestfslive-live/ -y "aljazeera_ar_medium?videoId=747084146001&lineUpId=&pubId=665003303001&playerId=751182905001&affiliateId=" -W "http://admin.brightcove.com/viewer/us1.24.04.08.2011-01-14072625/federatedVideoUI/BrightcovePlayer.swf" -p http://english.aljazeera.net/watch_now/ -a "aljazeeraflashlive-live?videoId=747084146001&lineUpId=&pubId=665003303001&playerId=751182905001&affiliateId=" | mplayer -
Analysons les paramètres:
-q
: mode silencieux (quit)-v
: pour dire qu'on regarde une vidéo en live-r
: correspondra au paramètre tcUrl qui apparaîtra dans l'analyse des paquets-y
: correspondra au chemin et apparaîtra après l'attribut play qui apparaîtra dans l'analyse des paquets-W
: correspondra au paramètre swfUrl qui apparaîtra dans l'analyse des paquets-p
: correspondra au paramètre pageUrl qui apparaîtra dans l'analyse des paquets-a
: correspondra au paramètre app qui apparaîtra dans l'analyse des paquets
cmd | mplayer -
demande à mplayer de lire le flux sortant (stdout) de cmd.Maintenant voyons comment on peut récupérer ces paramètres en utilisant le sniffer de paquets tshark:
- Lancer
tshark
pour sniffer le port 1935 (réservé au protocole rtmp) dont on veut capturer les paquets-f "port 1935"
, spécifier quelle interface réseau il faut utiliser-i eth0
, pour savoir quelle interface vous utilisez pour vous connecter à internet lancezifconfig
et voyez quelle interface porte votre adresse IP, restreindre le nombre de paquets à un nombre limité pour ne pas que ça dure trop longtemps (seulement les premiers paquets comportent les informations qui nous intéressent) avec-c 50
, spécifier qu'on veut voir l'output en hex et ascii-x
et enfin faire quelques manipulations pour ne garder que la partie ascii et supprimer les sauts de lignes. la deuxième partie de la commande permet alors d'extraire les informations voulues:
ubugnu@ubugnu-laptop:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
- Lancer le streaming de la chaîne (ou vidéo) voulu (par exemple http://www.livestation.com/channels/43-al-jazeera-arabic) dans un navigateur et attendre jusqu'à ce que l'image apparaisse, vous verrez alors que la commande précédente aura affiché quelque chose du genre:
ubugnu@ubugnu-laptop:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
[sudo] password for ubugnu:
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...live/..flashVer...LNX.
swfUrl..6http://www.livestation.com/flash/player/5.4/player.swf...
tcUrl...rtmp://media7.lsops.net/live/[email protected][email protected][email protected]..?........
pageUrl..8http://www.livestation.com/channels/43-al-jazeera-arabic..objectEncoding.ve......<.;.?..C........
.play.............aljazeer_ar_medium.sdp...........C.....5....getStreamLength.@...........aljazeer_ar_medi - Maintenant on a tout les paramètres dont on a besoin, mais faites attention, parfois un paramètre peut être "pollué" par des caractères non affichables qu'on retrouve alors incrusté sous forme de point ".", il faut savoir les repérer, dans notre exemple tout est clean:
app: live/-a
swfUrl: http://www.livestation.com/flash/player/5.4/player.swf-W
tcUrl: rtmp://media7.lsops.net/live/-r
pageUrl: http://www.livestation.com/channels/43-al-jazeera-arabic-p
path: aljazeer_ar_medium.sdp-y
- La ligne de commande pour voir ce streaming est donc:
ubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "live/" -W "http://www.livestation.com/flash/player/5.4/player.swf" -r "rtmp://media7.lsops.net/live/" -p "http://www.livestation.com/channels/43-al-jazeera-arabic" -y "aljazeer_ar_medium.sdp" | mplayer -
- On peut refaire la même opération avec plusieurs chaînes, voici quelques exemples de chaînes que j'ai trouvé ici:
ubugnu@ubugnu-laptop:~$ echo alarabia
À partir de ces informations on peut conclure que:
alarabia
ubugnu@ubugnu:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
[sudo] password for ubugnu:
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...live/..flashVer...LNX,154,17..
swfUrl..6http://www.livestation.com/flash/player/5.4/player.swf...
tcUrl...rtmp://media2.lsops.net/live/[email protected][email protected][email protected]..?.........
pageUrl..?http://www.livestation.com/channels/57-al-arabiya-arabic-arabic..objectEncoding...{.e....;[email protected]..
.play.............alarabiy_ar_medium.sdp......{.e....;[email protected]..([email protected].<..!.6...d.........Q..P...{.e....;.@..
ubugnu@ubugnu:~$ echo cnn
cnn
ubugnu@ubugnu:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...livestfslive-live/..flashVer...LNX10,2,154,17..
swfUrl..6http://www.livestation.com/flash/player/5.4./player.swf..
tcUrl..3rtmp://livestfslivefs.fplive.net/livestfslive-live/[email protected][email protected][email protected].?.........
pageUrl..8http://www.livestation.com/products/66-cnn-international..objectEncoding...............{.e....;.@
.play............jlivestfslive_cnn_en_veryhigh?start_time=20110320104231&end_time=20110320105231&token=0d9
ubugnu@ubugnu:~$ echo euronews
euronews
ubugnu@ubugnu:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...live/..flashVer...LNX,154,17..
swfUrl..6http://www.livestation.com/flash/player/5.4/player.swf...
tcUrl...rtmp://media2.lsops.net/live/[email protected][email protected][email protected]..?.........
pageUrl..7http://www.livestation.com/channels/12-euronews-franais..objectEncoding...........{.e....;[email protected]..
.play.............euronews_fr_medium.sdp.......;.@..{.e...E..i..@[email protected].!.6....33.tR.^.P....r........*.
.play.............euronews_fr_medium.sdp.......;.@..{.e...E..(..@[email protected].!.6....33..R.^.P...{.e....;.@..
ubugnu@ubugnu:~$ echo france24
france24
ubugnu@ubugnu:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...france24/fr/..flashVer...LNX
swfUrl..6http://www.livestation.com/flash/player/5.4/playe.r.swf..
tcUrl..$rtmp://media2.lsops.net/france24/fr/[email protected][email protected][email protected].?.........
pageUrl..6http://www.livestation.com/channels/5-france-24-french..objectEncoding..............{.e....;[email protected]
.play.............f24_livefr..{.e....;[email protected]..([email protected]....!.6...d....s...S..2P...{.e....;[email protected]@.1....!.6
Pour alarabiaubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "live/" -W "http://www.livestation.com/flash/player/5.4/player.swf" -r "rtmp://media2.lsops.net/live/" -p "http://www.livestation.com/channels/57-al-arabiya-arabic-arabic" -y "alarabiy_ar_medium.sdp" | mplayer -
Pour cnnubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "livestfslive-live/" -W "http://www.livestation.com/flash/player/5.4/player.swf" -r "rtmp://livestfslivefs.fplive.net/livestfslive-live/" -p "http://www.livestation.com/products/66-cnn-international" -y "jlivestfslive_cnn_en_veryhigh" | mplayer -
(ce dernier ne marche pas il faut encore un hack vu que cette chaîne est payante sur le site)
Pour euronewsubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "live/" -W "http://www.livestation.com/flash/player/5.4/player.swf" -r "rtmp://media2.lsops.net/live/" -p "http://www.livestation.com/channels/12-euronews-franais" -y "euronews_fr_medium.sdp" | mplayer -
Il est aussi possible d'aller chercher ces information dans le site même de la chaîne qui offre un streaming en live, on obtient:
ubugnu@ubugnu-laptop:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
Le commande sera donc (attention il y'avait un point incrusté dans le lien du swf, justement dans l'extension):
[sudo] password for ubugnu:
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...rtpeuronewslive..flashVer...LNX,2,154,17..
swfUrl..0http://fr.euronews.net/media/player_live_1_7.s.wf..
tcUrl..)rtmp://178.32.100.43:1935/[email protected][email protected][email protected].?.........
pageUrl..'http://fr.euronews.net/infos/en-direct/[email protected]_.d...m.....p{..7.YRz:
.play.............fre_euronews-flash-750.sdp.....{.e....;[email protected][email protected]..../.w/..3...............:(.%
ubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "rtpeuronewslive" -W "http://fr.euronews.net/media/player_live_1_7.swf" -r "rtmp://178.32.100.43:1935/rtpeuronewslive" -p "http://fr.euronews.net/infos/en-direct/" -y "fre_euronews-flash-750.sdp" | mplayer -
Pour france24ubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "france24/fr/" -W "http://www.livestation.com/flash/player/5.4/player.swf" -r "rtmp://media2.lsops.net/france24/fr/" -p "http://www.livestation.com/channels/5-france-24-french" -y "f24_livefr" | mplayer -
cette dernière ne donne que le son, mais il est possible de chercher ces informations depuis le site de la chaîne qui offre aussi un streaming en live, on obtient:
ubugnu@ubugnu-laptop:~$ t=$(sudo tshark -c 50 -i eth0 -f "port 1935" -x | awk '{print $18}' | tr -d '\n'); echo $t | grep -oP 'app((?!swfUrl).?){0,}|swfUrl((?!tcUrl).?){0,}|tcUrl((?!pageUrl).?){0,}|pageUrl(.?){100}|\.play\.(.?){100}'
La commande sera donc (attention au point incrusté dans le lien du swf!):
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
50 packets captured
app...france24_live/fr..flashVer...LNX0,2,154,17..
swfUrl..Ohttp://www.france24.com/fr/sites/all/modules/.maison/aef_player/flash/player.swf..
tcUrl..3rtmp://stream2.france24.yacast.net/france24_live/[email protected][email protected][email protected].?.........
pageUrl..<http://www.france24.com/fr/aef_player_popup/france.24_player#..objectEncoding...{.e....;[email protected]....
.play.............f24_livefr......{.e....;[email protected][email protected]................?.'{......@..ubugnu@ubugnu-laptop:~$ rtmpdump -qv -a "france24_live/fr" -W "http://www.france24.com/fr/sites/all/modules/maison/aef_player/flash/player.swf" -r "rtmp://stream2.france24.yacast.net/france24_live/fr" -p "http://www.france24.com/fr/aef_player_popup/france.24_player#" -y "f24_livefr" | mplayer -
Apparemment celui ci ne marche pas aussi, je crois donc qu'il faut modifier quelques paramètres de rtmpdump (si quelqu'un sait comment faire?) car il a l'air de ne pas pouvoir lire le flux - On remarque aussi que pour la plupart de ces chaînes d'informations, on peut changer deux paramètres dans la valeur de
-y
: la qualité et la langue, essayez de changer "medium" en "high" ou "veryhigh" si votre connexion vous le permet, ou alors il y'a aussi "low", pour la langue aussi il y'a les trois choix "ar", "fr" ou "en", l'étape suivante serait de créer un script qui prend comme arguments la chaîne, la qualité et la langue et nous donne la vidéo en direct, ce sera pour une prochaine fois inchaâ'Allah.
- Il est en théorie possible de remplacer
fshark
partcpdump
:ubugnu@ubugnu-laptop:~$ sudo tcpdump -XX -i eth0 -s 0 -v tcp src port 1935
Mais ça à l'air de ne pas prendre en considération la partie "Handshake part 3", celle là même où on retrouve toutes les informations dont a besoinrtmpdump
, si quelqu'un trouve une solution elle sera la bienvenue car elle nous évitera d'installertshark
- Parfois les sites de streming brouilles les pistes en renvoyant des refus de connexion puis des redirection au lecteur flash ainsi que des redéfinitions des paramètres (c'est le cas de http://tvweb360.com/), dans ce cas il serait préférable d'utiliser la version graphique de
fshark
à savoirwireshark
pour pouvoir bien chercher dans les paquets, si vous avez de la chance vous obtiendrez un paquet appelé "Handshake part 3" où se trouveront réunies et classées toutes les informations: - Mais parfois wireshark ne reconnait pas ce paquet et lui donne l'étiquette de "Audio Data[Malformed Paquet]" il faudra alors chercher les mots clé sois-même, dans tout les cas, le paquet se trouvera entre "Handshake part 2" et le premier "Invoke" (c'est dans ce dernier "Invoke" qu'il faudra chercher le paramètre <code>-y</code> et non pas dans "Handshake part 3"):