xuv's notebook

Side notes, howtos and random bits of information related to Julien Deswaef's projects

User Tools

Site Tools


tools:comment_telecharger_les_videos_de_mosaiktv

This is an old revision of the document!


Comment télécharger les vidéos en haute définition depuis Mosaik.tv

Le site mosaik.tv stream ses vidéos à travers un flash player depuis un serveur Adobe par l'intermédiaire du protocole RTMP.

Pour contourner le téléchargement direct de ses émissions, ils cryptent le fichier XML de configuration du FlashPlayer.

Voici la méthode pour décrypter ce fichier et récupérer le lien RTMP direct vers le flux en qualité HD.

1. Trouver la clef

Toutes les vidéos sont représentées par une clef unique que vous trouverez dans le code HTML de la page où se trouve la vidéo que vous cherchez à télécharger. Exemple d'un lien vers une vidéo dont la clef est “aBcDe12345” :

<a href="/index.php?video=aBcDe12345" class="marqueur">

Le flash player fait appel à la vidéo de cette manière :

http://www.mosaik.tv/hdr_visio/visio_v7.swf?key=aBcDe12345

Où la clef sert à appeler le fichier de configuration XML qui servira à donner les informations nécessaires au player pour jouer la vidéo ainsi que d'autres paramètres de configuration.

2. Récupérer le fichier de configuration

Le fichier XML crypté est appellé comme ceci:

http://www.mosaik.tv/hdr_visio/proprietes_visio_v6.php?key=aBcDe12345

Ce qui vous renvoie un texte (en une ligne) du style :

M7t477tw0t44Mtw0t449tMGtM7tw0t449t44Gt474twwt44MtMGtM7twwt4[…]

Enregistrez ce texte dans un fichier pour l'utiliser plus tard.

Pour décrypter ce texte, il m'a fallut décompiler le flashplayer et retrouver le bout de code qui assure la conversion de ce texte en un format XML lisible. Vous n'avez pas besoin de décompiler le flash player à nouveau. Vous pouvez passer directement à l'étape “Décryptage”. Mais l'information est notée ici juste au cas où le code aurait été changé entre temps.

En utilisant un service comme “Show My code”, voici le code complet du player visio_v7.swf http://www.showmycode.com/?8cf3a970abb6dda8b5a4bf86d2587369

À la ligne 1150, vous trouverez la classe Decrytpage{} dont la méthode Decrypter(_arg1:string):string{} peut être facidement convertie en javascript comme suit.

3. Décryptage

mosaik.js
var cle = "t4G3a9M0Zw7"; 
 
function Decrypter(_arg1){ 
	var _local; 
	var _local8; 
	var _local9; 
	var _local2 = String(cle.substr(0, 1)); 
	var _local3 = 0; 
	var _local4 = _arg1.length; 
	var _local5 = ""; 
	var _local6 = ""; 
	while (_local3 < _local4) { 
		_local7 = String(_arg1.substr(_local3, 1)); 
		if (_local7 == _local2){ 
			_local5 = (_local5 + String.fromCharCode(_local6)); 
			_local6 = ""; 
		} else { 
			_local8 = 1; 
			while (_local8 < cle.length) { 
				_local9 = String(cle.substr(_local8, 1)); 
				if (_local9 == _local7){ 
					if (_local8 == 10){ 
						_local8 = 0; 
					} 
					_local6 = (_local6 + String(_local8)); 
					break;
				}; 
				_local8++; 
			}; 
		}; 
		_local3++; 
	}; 
	return (_local5); 
}
 
var result = Decrypter("M7t477tw0t44Mtw0t449tMGtM7tw0t449[…]");
 
console.log(result);

En copiant et en faisant tourner ce code dans une console javascript (vous en avez une dans Chrome ou Firefox), et en remplaçant “M7t477[…]” par le texte que vous avez sauvé précédemment, vous obtiendrez un fichier XML en clair du type:

mosaik.xml
<datas>
	<aspect>
		<couleur_fond><![CDATA[0xb5b5b5]]></couleur_fond>
		<couleur_fond_boutons><![CDATA[0x444444]]></couleur_fond_boutons>
		<couleur_boutons><![CDATA[0xffffff]]></couleur_boutons>
		<couleur_rollover_boutons><![CDATA[0xfdcc00]]></couleur_rollover_boutons>
		<couleur_ombre><![CDATA[0xffffff]]></couleur_ombre>
		<corner_radius><![CDATA[0]]></corner_radius>
	</aspect>
	<menu>
		<afficher_partager><![CDATA[false]]></afficher_partager>
		<afficher_voter><![CDATA[false]]></afficher_voter>
		<afficher_playlist><![CDATA[true]]></afficher_playlist>
		<afficher_infos><![CDATA[true]]></afficher_infos>
		<afficher_tagger><![CDATA[false]]></afficher_tagger>
		<afficher_exporter><![CDATA[false]]></afficher_exporter>
	</menu>
	<commandes>
		<afficher_fullscreen><![CDATA[true]]></afficher_fullscreen>
		<afficher_temps><![CDATA[true]]></afficher_temps>
		<afficher_volume><![CDATA[true]]></afficher_volume>
		<afficher_menu><![CDATA[true]]></afficher_menu>
		<afficher_hq><![CDATA[false]]></afficher_hq>
		<afficher_fleches_chapitres><![CDATA[false]]></afficher_fleches_chapitres>
	</commandes>
	<options_videos>
		<mode_diffusion><![CDATA[ss]]></mode_diffusion>
		<url_fms><![CDATA[rtmpe://vod.mosaik.tv:80/vod/mosaiktv]]></url_fms>
		<instance_name><![CDATA[mp4:mosaiktv]]></instance_name>
		<video_width><![CDATA[920]]></video_width>
		<video_height><![CDATA[517]]></video_height>
		<afficher_toolbar><![CDATA[true]]></afficher_toolbar>
		<squeeze><![CDATA[non]]></squeeze>
	</options_videos>
	<incrustation>
		<logo_normal><![CDATA[false]]></logo_normal>
		<position_logo_normal><![CDATA[tr]]></position_logo_normal>
		<fichier_logo_normal><![CDATA[http://www.mosaik.tv/images/incrust_normal.png]]></fichier_logo_normal>
		<logo_fullscreen><![CDATA[false]]></logo_fullscreen>
		<position_logo_fullscreen><![CDATA[tr]]></position_logo_fullscreen>
		<fichier_logo_fullscreen><![CDATA[http://www.mosaik.tv/images/incrust_fullscreen.png]]></fichier_logo_fullscreen>
		<estampillage_export><![CDATA[false]]></estampillage_export>
		<fichier_estampillage><![CDATA[http://www.mosaik.tv/images/estampillage.png]]></fichier_estampillage>
		<lien_estampillage><![CDATA[http://www.mosaik.tv/video.php?key=EGZrzGmE2y]]></lien_estampillage>
	</incrustation>
	<options_lecture>
		<autoplay><![CDATA[true]]></autoplay>
		<loop><![CDATA[false]]></loop>
	</options_lecture>
	<url_envois>
		<partage><![CDATA[http://www.mosaik.tv/visionneuse/ajax/partagerVideo.php]]></partage>
		<tag><![CDATA[http://www.mosaik.tv/visionneuse/ajax/tagger.php]]></tag>
		<vote><![CDATA[http://www.mosaik.tv/visionneuse/ajax/voter.php]]></vote>
		<playlist_liste><![CDATA[http://www.mosaik.tv/visionneuse/ajax/playlist/get.php]]></playlist_liste>
		<playlist_ajout><![CDATA[http://www.mosaik.tv/visionneuse/ajax/playlist/addVideo.php]]></playlist_ajout>
		<playlist_suppression><![CDATA[http://www.mosaik.tv/visionneuse/ajax/playlist/removeVideo.php]]></playlist_suppression>
	</url_envois>
	<donnees_video>
		<fichier><![CDATA[ss]]></fichier>
		<imageBeforePlayDir><![CDATA[http://www.mosaik.tv/videoimages/grand/]]></imageBeforePlayDir>
		<imageBeforePlay><![CDATA[http://www.mosaik.tv/videoimages/grand/20131031.jpg]]></imageBeforePlay>
		<interdit><![CDATA[]]></interdit>
		<idVideo><![CDATA[EGZrzGmE2y]]></idVideo>
		<tcIn><![CDATA[]]></tcIn>
		<tcOut><![CDATA[]]></tcOut>
		<urlMarqueurs><![CDATA[http://www.mosaik.tv/visionneuse/ajax/marqueurs.php?key=EGZrzGmE2y]]></urlMarqueurs>
		<fichier_source><![CDATA[20131031/high.mp4]]></fichier_source>
	</donnees_video>
	<imagette>
		<largeurImage><![CDATA[160]]></largeurImage><hauteurImage><![CDATA[90]]></hauteurImage><nomImage><![CDATA[/videoimages/20131031.jpg]]></nomImage><imageDir><![CDATA[/videoimages/]]></imageDir><largeurImage_grande><![CDATA[920]]></largeurImage_grande><hauteurImage_grande><![CDATA[517]]></hauteurImage_grande><nomImage_grande><![CDATA[/videoimages/grand/20131031.jpg]]></nomImage_grande><imageDir_grande><![CDATA[/videoimages/grand/]]></imageDir_grande><urlUpload><![CDATA[http://www.mosaik.tv/admin/modules/vod/upload.php]]></urlUpload>
	</imagette>
	<smooth_files>
		<fichier qualite='500'>20131031/low.mp4</fichier>
		<fichier qualite='1000'>20131031/med.mp4</fichier>
		<fichier qualite='2000'>20131031/high.mp4</fichier>
	</smooth_files>
</datas>

4. Télécharger la video avec RTMPDump

Dans ce fichier XML, il faut repérer ces quelques informations utiles :

  • L'url du serveur de video (qui se trouve dans <url_fms>. À priori, cette info ne devrait pas trop changer) :
    rtmpe://vod.mosaik.tv:80/vod/mosaiktv
  • L' <instance_name> qui dans mon cas précis était mp4:mozaiktv (je doute aussi que cette information change souvent.
  • L'url de la vidéo en HD <fichier_source> : 20131031/high.mp4

Et à l'aide du programme rtmpdump, télécharger le fichier vidéo à l'aide de la ligne de commande suivante (en remplacant les valeurs aux endroits mentionnés:

rtmpdump -r "<url_fms>" -W "http://www.mosaik.tv/hdr_visio/visio_v7.swf" -y "<instance_name>/<fichier_source>" -o maVideo.mp4

un exemple concret :

rtmpdump -r "rtmpe://vod.mosaik.tv:80/vod/mosaiktv/" -W "http://www.mosaik.tv/hdr_visio/visio_v7.swf" -y "mp4:mosaiktv/20131031/high.mp4" -o 20130123.mp4 -V
tools/comment_telecharger_les_videos_de_mosaiktv.1383821305.txt.gz · Last modified: 2013/11/07 11:48 by Julien Deswaef