Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#2426 Le 23/11/2012, à 02:09

magestik

Re : TVDownloader: télécharger les médias du net !

Castle

Dernière modification par magestik (Le 23/11/2012, à 02:12)

Hors ligne

#2427 Le 23/11/2012, à 02:22

JUL1EN094

Re : TVDownloader: télécharger les médias du net !

magestik a écrit :

Testé à l'instant :
HQdmBrjDDEFOKL8G0+nytaXs+rVBvP5+pCofU/wYyRQ=

J'ai fait une copie d'écran mais je sais pas comment insérer une image

Hors ligne

#2428 Le 23/11/2012, à 02:28

magestik

Re : TVDownloader: télécharger les médias du net !

Je te crois, y'a pas de soucis là dessus. Mais j'ai rien inventé non plus hein ^^

D'ailleurs j'ai copié/collé les liens intéressant sur piratepad.

Je sais pas c'était peut-être temporaire ? Parce que c'était le même lecteur flash (je me souviens bien de l'URL wink )

De toute façon la solution que j'ai trouvée avec Jchb n'utilise pas du tout le hash du lecteur, donc c'est pas très grave ^^

Dernière modification par magestik (Le 23/11/2012, à 02:31)

Hors ligne

#2429 Le 23/11/2012, à 02:36

JUL1EN094

Re : TVDownloader: télécharger les médias du net !

magestik a écrit :

Je te crois, y'a pas de soucis là dessus. Mais j'ai rien inventé non plus hein ^^

D'ailleurs j'ai copié/collé les liens intéressant sur piratepad.

Je sais pas c'était peut-être temporaire ? Parce que c'était le même lecteur flash (je me souviens bien de l'URL wink )

De toute façon la solution que j'ai trouvée avec Jchb n'utilise pas du tout le hash du lecteur, donc c'est pas très grave ^^

smile:):)

J m doute kt'a rien inventé justement ca peut être interessant. ca pourrais vouloir dire qu'il y a d'autre paramètre.
Perso jveus les f4m. Sur mon addon les mms et les rtmp ca semble OK (je vérifierai 2m1 est un autre jour.).

Edit :

J vais me coucher - cerveau en bouillie lol. Bonne nuit on attend votre méthode 2m1 alors ?

Dernière modification par JUL1EN094 (Le 23/11/2012, à 02:38)

Hors ligne

#2430 Le 23/11/2012, à 02:53

magestik

Re : TVDownloader: télécharger les médias du net !

Notre méthode n'utilise ni les f4m, ni les mms ni les rtmp et fonctionnera sur toutes les vidéos.

Je viens de m'apercevoir que la méthode est pas si "nouvelle" que je le pensais puisqu'elle est déjà implémenté dans le code de pluzzdl : les m3u8. Faudra juste faire quelques modifications dans le code de pluzzdl au niveau de la classe de téléchargement des m3u8 mais ça devrait pas être un problème. Je verrai ça demain après-midi.

Juste je précise que nos m3u8 ne nécessite aucune clé et sont disponibles pour toutes les vidéos. On va dire que c'est une solution temporaire, le temps de trouver la nouvelle clé HMAC.

Apparemment les serveurs de téléchargement d'adobe remarchent donc je pourrais installer flash demain pour continuer ma recherche de la clé.

A propos de cette clé, j'ai un petit secret à vous dire. Je crois que c'est pas francetv qui la contrôle. Pour ceux qui ont regardé sur le lien piratepad que j'ai posté j'ai mis l'adresse d'un SWF (conviva) et c'est pas un lien au hasard. Je suis presque sur que la clé HMAC viens de conviva. Déjà c'est sur que la clé n'est pas dans le SWF du player : le hash n'a pas changé (à part pour moi ^^) ! Si le hash n'a pas changé il est impossible qu'ils aient fait des changements dans le code. En plus si vous regardez bien il est pas question de clé HMAC avant le chargement du SWF de conviva (ça pourrait être une coïncidence mais je suis sur que ça ne l'est pas).

Voilà les révélations de la soirée, j'espère que ce sera utile. Demain je m'occupe des m3u8 et avec un peu de chance je trouverai enfin la clé HMAC !

Hors ligne

#2431 Le 23/11/2012, à 03:03

JUL1EN094

Re : TVDownloader: télécharger les médias du net !

Oui les m3u8 sont de bonnes qualité,  un peu moins bien que les f4m qd même , mais c'est la meilleure qualité après les f4m...

récup sans token ... + réconstituer les fragment (dabidoo de habitv bosse aussi la dessus pour l'intégrer dans son soft ). En tout cas super et merci si vous le coder j'en connais plus d'un que ca va interesser ...

+1 Pour conviva . J'ai regardé un peu et c'est possible que ce soit lui qui fournisse la cle. J'ai malgré tout un peu l'impression qu'ils s'en servent comme analyseur de performance (un POST toutes les 20 sc+ qq signe qui m'y font pensé). Néanmoins faudrait vraiment savoir car j'ai vu des appels vers ces classes et leur lecteur flash sur le nouveau et l'ancien site de pluzz.
Je reste quand meme pour le moment plus sur les classes Akamai plutot que conviva mais ce n'est pas une piste   a écarter

Hors ligne

#2432 Le 23/11/2012, à 10:24

rimram31

Re : TVDownloader: télécharger les médias du net !

chaoswizard a écrit :

Ce n'est plus le sha256 du swf décompressé ?

La logique du contenu du pvtoken est identique, on le voit dans les fluxs, même si la clef du player a changée (perso, j'ai maintenant un truc qui finit en +pCofU/wYyRQ=), probablement toujours un sha256 mais la clef et peut-être la logique semble avoir changée. J'ai remarqué par exemple que la chaine User Agent était prise en compte (même url, navigateur différent -> 403), une url complète d'un segment avec token marche sur le navigateur qui l'a générée, mais retourne 403 avec un autre navigateur.

La piste des m3u est intéressante, apparemment c'est ce format que prennent les mobiles, si quelqu'un peut poser des traces du flux avec un mobile et le player pluzz (bien que je ne sais pas s'il marche très bien d'après les posts ...). Ce m3u n'est pas courant dans les manifest mais si je comprends bien les discussions, ils seraient dispo alors que non indiqué ?

Perso du coté de mon "embedded flash", avec appel de firefox+flashplayer et récupération du token, "ça marche". J'injecte donc dans PluzzDL le user agent et pvtoken retourné par le player pour une émission donnée. J'ai poussé le vice jusqu'à ajouter un serveur http pour délivrer le flux flv en cours de téléchargement (en gros un "proxy" pluzz qui prend en charge l'authentification :-)) quelques soucis en attente de téléchargement des fragments, "ça rame" chez moi. Le tout en python bien sûr (j'ai bien progressé dans les outils python pour fabriquer un serveur http :-))

Sur ubuntu, ça pourrait s'installer comme un "service" local ...

Sans rapport direct, j'ai trouvé mon problème d'adblock. Il bloque bien les pubs, mais apparemment ne conserve pas sa configuration quand c'est un autre profil. Du coup ça "vérouille" le profil du compte utilisé, pas cool.

Pour info, je pense que dans le principe ça doit être ça: http://frenchweb.fr/wp-content/uploads/ … ureHD1.pdf france tv fait a peu près ce qu'il veut et peut changer la façon dont les flux sont authentifiés.

Hors ligne

#2433 Le 23/11/2012, à 12:30

magestik

Re : TVDownloader: télécharger les médias du net !

@JULIEN oui c'est sur mais la on utilise pas les m3u d'origine.

Faudrait qu'on se croise sur IRC pour continuer nos investigations sur conviva. Je suis allé sur le site et ils ont pas l'air de faire du tracking même si c'est vrai qu'il y a des requêtes HTTP qui y font penser.

Quand j'ai vu ca l'autre jour je me suis imaginé que le player Pluzz charge le truc de conviva (comme un module). Conviva serait alors le fournisseur  de vidéo pour Pliez. Ca voudrait dire que c'est Conviva qui met les vidéos sur les CDN d'akamai. Donc ce serait bien le le TRUE de conviva qui ferait tout le boulot. Et finalement ca expliquerait le tracking de performances : conviva réalise un suivi de ce qu'il fournit a ses clients.

@rimram voilà tu as deviné : hier j'ai suivi les connexions de l'application pluzz sur Android. Donc voilà pourquoi je dis que toutes les vidéo sont disponibles. Et c'est du m3u8 donc déjà implémenté dans pluzzdl. Je m'occupe des modifications cette après midi et après je vous explique comment ca marche. Par contre je posterai pas les log parce que y'a pas que les communications de pluzz mais aussi celle du système android.

Tiens d'ailleurs l'application pluzz récupère nos coordonnées et utilise un site de météo pour récupérer notre code postal, le nom de la ville, le département et d'autres trucs!

Dernière modification par magestik (Le 23/11/2012, à 12:47)

Hors ligne

#2434 Le 23/11/2012, à 13:43

rimram31

Re : TVDownloader: télécharger les médias du net !

magestik a écrit :

@rimram voilà tu as deviné...

C'est ce que je suggérais sur le thread xbmc il y a quelques jours, car les mobiles n'embarquent pas nécessairement flash :-) donc il y a bien d'autres moyens de se connecter à la plateforme vidéo. De mon coté, j'ai été incapable d'installer l'application pluzz sur un émulateur android (j'ai un android 4 et qques sous virtual box), rien compris a google store, suis pas un pro android. Faudrait que je pique celui du fiston avec proxy en interne :-) c'est la méthode que tu utilises?

Plus qu'intéressant aussi le m3u pour xbmc car il est géré (s'il est a peu près "standard" ...) et donc peut-être "streamable" directement.

Dernière modification par rimram31 (Le 23/11/2012, à 13:45)

Hors ligne

#2435 Le 23/11/2012, à 14:43

magestik

Re : TVDownloader: télécharger les médias du net !

Non j'ai utilisé Wireshark sur Android. Plus simple smile

J'y connais rien en m3u mais je pense que c'est pas super bien fait. En fait les adresses des fragments dans le m3u sont des adresses relatives du coups c'est un peu chiant ... Aussi y'a un m3u "global" qui pointe vers les m3u des différentes qualités. D'après ce que je viens de voir le m3u est censé être un format de playlist, donc ce m3u de choix de qualité prendra toujours la première donc la moins bonne qualité.

Par contre le reste a l'air correct.

Hors ligne

#2436 Le 23/11/2012, à 15:07

rimram31

Re : TVDownloader: télécharger les médias du net !

magestik a écrit :

...J'y connais rien en m3u ...

A priori pas compliqué, c'est bêtement une playlist, une liste de fichier utilisée initialement en audio, le 8 c'est pour UTF-8. Une playlist est un fichier texte, le UTF-8 doit vouloir dire que le fichier est encodé en utf-8. L'avantage c'est que le format est pris en charge par quelques players, xbmc l'utilise par exemple, wamp ...

Les adresses relatives, ça fait partie du "standard", elles sont alors prises en relatif par rapport au m3u lui-même.

Hors ligne

#2437 Le 23/11/2012, à 15:13

magestik

Re : TVDownloader: télécharger les médias du net !

Ok, nickel alors.

Par contre il me faudrait un fichier master.m3u de ftvodhd-i.akamaihd.net, histoire de faire un truc portable. En gros que la class PluzzDLM3U soit capable de télécharger n'importe quel fichier dans la meilleure qualité disponible quelque soit le lien de la playlist. Alors que pour le moment c'est codé en dur avec des expressions régulières !

Donc si quelqu'un me trouve un master.m3u je pourrais parser les m3u correctement, sans expression régulière et donc lancer le téléchargement comme il faut, en utilisant des adresses relatives au fichier de playlist (alors que ça aussi c'est codé en dur apparemment).

Hors ligne

#2438 Le 23/11/2012, à 17:30

magestik

Re : TVDownloader: télécharger les médias du net !

Ça marche nickel big_smile Bon, la qualité est quand même limite quand y'a du noir, mais ça marche, je vais enfin pouvoir regarder mon épisode de Castle x)

Par contre là il me manque une ou deux petites choses avant de pouvoir poster le code. Mais ça arrive wink

Hors ligne

#2439 Le 23/11/2012, à 17:36

rimram31

Re : TVDownloader: télécharger les médias du net !

Heu ... comment dirais-je ... https://portfolio.assembla.com/spaces/habitv/wiki (et en particulier https://portfolio.assembla.com/code/hab … der/pluzz)

Edit: par contre format ts, ça m'inquiète un peu

Dernière modification par rimram31 (Le 23/11/2012, à 17:49)

Hors ligne

#2440 Le 23/11/2012, à 18:12

magestik

Re : TVDownloader: télécharger les médias du net !

Je viens de regarder Castle avec cette méthode, donc je vois pas en quoi c'est inquiétant tongue

Je suis en train de finaliser l'intégration dans pluzzdl, j'espère poster le code d'ici une heure.

Hors ligne

#2441 Le 23/11/2012, à 19:11

magestik

Re : TVDownloader: télécharger les médias du net !

Bon, alors, ça marche, j'arrive à télécharger les vidéos avec pluzzdl.

Par contre j'ai pas trop bien réussi à l'intégrer dans pluzzdl donc je vais mettre les morceaux de code modifiés ici comme ça le développeur principal (je sais même pas qui c'est ^^) de pluzzdl pourra l'intégrer comme il le voudra.

Donc il faut ajouter ces 3 lignes dans le init de la classe PluzzDL:

#utilisation du lien mobile
args = re.findall( "/(([0-9]{4})/S([0-9]{2})/J([0-9]{1})/([0-9]*)-([0-9]{6,8}))-", self.pageInfos )[0]
mobile_link = "http://medias2.francetv.fr//catchup-mobile/france-dom-tom/non-token/non-drm/m3u8/%s.m3u8" %(args[0])
downloader = PluzzDLM3U8(mobile_link, self.nomFichier, self.navigateur, self.stopDownloadEvent, self.progressFnct )

J'ai aucune idée de ou l'ajouter ... il faudrait que quand aucune autre vidéo n'est disponible (ou utilisable, comme actuellement) ça utilise la vidéo mobile. Et avec le code actuel c'est pas facile à faire. J'aurais bien fait les modifications nécessaires moi même mais y'a beaucoup de chose de changer donc je pense pas que ce soit à moi de le faire (c'est la première fois que je vous aide).

Maintenant le code de la classe PluzzDLM3U8 :

class PluzzDLM3U8( object ):
	"""
	Telechargement des liens m3u8
	"""

	def __init__( self, m3u8URL, nomFichier, navigateur, stopDownloadEvent, progressFnct ):
		self.m3u8URL           = m3u8URL
		self.nomFichier        = nomFichier
		self.navigateur        = navigateur
		self.stopDownloadEvent = stopDownloadEvent
		self.progressFnct      = progressFnct

		self.historique        = Historique()

		self.nomFichierFinal   = "%s.mkv" %( self.nomFichier[ : -3 ] )

	def ouvrirNouvelleVideo( self ):
		"""
		Creer une nouvelle video
		"""
		try :
			# Ouverture du fichier
			self.fichierVideo = open( self.nomFichier, "wb" )
		except :
			logger.critical( "Impossible d'écrire dans le répertoire %s" %( os.getcwd() ) )
			sys.exit( -1 )
		# Ajout de l'en-tête
		#	Fait dans creerMKV

	def ouvrirVideoExistante( self ):
		"""
		Ouvre une video existante
		"""
		try :
			# Ouverture du fichier
			self.fichierVideo = open( self.nomFichier, "a+b" )
		except :
			logger.critical( "Impossible d'écrire dans le répertoire %s" %( os.getcwd() ) )
			sys.exit( -1 )

	def creerMKV( self ):
		"""
		Creer un mkv a partir de la video existante (cree l'en-tete de la video)
		"""
		logger.info( "Création du fichier MKV (vidéo finale) ; veuillez attendre quelques instants" )
		try:
			commande = "ffmpeg -i %s -vcodec copy -acodec copy %s 1>/dev/null 2>/dev/null" %( self.nomFichier, self.nomFichierFinal )
			os.system( commande )
			os.remove( self.nomFichier )
			logger.info( "Fin !" )
		except:
			logger.error( "Impossible de créer la vidéo finale" )
			sys.exit( -1 )

	def telecharger( self ):

		if( re.match( "http://ftvodhd-i.akamaihd.net/[^\.]+", self.m3u8URL ) ):
			# Recupere le fichier master.m3u8
			self.m3u8 = self.navigateur.getFichier( self.m3u8URL )
			# Recupere le lien avec le plus gros bitrate (toujours 1205000 ?)
			try:
				self.listeFragmentsURL = re.findall( "http://ftvodhd-i\.akamaihd.net/.+?index_2_av\.m3u8.+", self.m3u8 )[ 0 ]
			except:
				logger.critical( "Impossible de trouver le lien vers la liste des fragments" )
				sys.exit( -1 )

			# Recupere la liste des fragments
			self.listeFragmentsPage = self.navigateur.getFichier( self.listeFragmentsURL )

			# Extrait l'URL de tous les fragments
			self.listeFragments = re.findall( "http://ftvodhd-i.akamaihd.net.+", self.listeFragmentsPage )

			# Nombre de fragments
			self.nbFragMax = float( len( self.listeFragments ) )
			logger.debug( "Nombre de fragments : %d" %( self.nbFragMax ) )
		else: # mobile
			quality = M3U(self.m3u8URL, self.navigateur)

			max_bandwith_val = -1
			max_bandwith_url = ""

			for f in quality.files:
				try:
					s = f.options['EXT-X-STREAM-INF'].split(',')
					b = s[1].split('=')
					if b[0] == 'BANDWIDTH':
						bandwidth = int(b[1])
				except:
					bandwidth = 0

				if bandwidth >= max_bandwith_val:
					max_bandwith_url = quality.getURL(f.name)
					max_bandwith_val = bandwidth

			self.listeFragmentsURL = max_bandwith_url
			#print max_bandwith_url


		#
		# Creation de la video
		#
		self.premierFragment    = 1
		self.telechargementFini = False
		video = self.historique.getVideo( self.listeFragmentsURL )
		# Si la video est dans l'historique
		if( video is not None ):
			# Si la video existe sur le disque
			if( os.path.exists( self.nomFichier ) or os.path.exists( self.nomFichierFinal ) ):
				if( video.finie ):
					logger.info( "La vidéo a déjà été entièrement téléchargée" )
					if( not os.path.exists( self.nomFichierFinal ) ):
						self.creerMKV()
					sys.exit( 0 )
				else:
					self.ouvrirVideoExistante()
					self.premierFragment = video.fragments
					logger.info( "Reprise du téléchargement de la vidéo au fragment %d" %( video.fragments ) )
			else:
				self.ouvrirNouvelleVideo()
				logger.info( "Impossible de reprendre le téléchargement de la vidéo, le fichier %s n'existe pas" %( self.nomFichier ) )
		else: # Si la video n'est pas dans l'historique
			self.ouvrirNouvelleVideo()

		# Ajout des fragments
		logger.info( "Début du téléchargement des fragments" )
		try:
			if( re.match( "http://ftvodhd-i.akamaihd.net/[^\.]+", self.m3u8URL ) ):
				i = self.premierFragment
				while( i <= self.nbFragMax and not self.stopDownloadEvent.isSet() ):
					frag = self.navigateur.getFichier( self.listeFragments[ i - 1 ] )
					self.fichierVideo.write( frag )
					# Affichage de la progression
					self.progressFnct( min( int( ( i / self.nbFragMax ) * 100 ), 100 ) )
					i += 1
				if( i == self.nbFragMax + 1 ):
					self.progressFnct( 100 )
					self.telechargementFini = True
					logger.info( "Fin du téléchargement" )
					self.creerMKV()
			else:
				playlist = M3U(max_bandwith_url, self.navigateur)
				i = 0
				for f in playlist.files:
					#print playlist.getURL(f.name)
					#print f.options

					frag = self.navigateur.getFichier(playlist.getURL(f.name))
					self.fichierVideo.write( frag )
					++i

				logger.info( "Fin du téléchargement" )
				self.creerMKV()

		except KeyboardInterrupt:
			logger.info( "Interruption clavier" )
		except:
			logger.critical( "Erreur inconnue" )
		finally :
			# Ajout dans l'historique
			self.historique.ajouter( Video( lien = self.listeFragmentsURL, fragments = i, finie = self.telechargementFini ) )
			# Fermeture du fichier
			self.fichierVideo.close()

Donc c'est un peu le bordel parce que j'ai préféré laisser l'ancien code pour le moment (en mettant plusieurs conditions). D'abord je sais pas à quoi ressemble le fichier master.m3u8 donc je voulais pas trop supprimer de code pour eviter de casser des choses qui marche actuellement. Si quelqu'un me donne un master.m3u8 je pourrais faire les modifications nécessaires pour fusionner les 2 codes (et donc enlever toutes les conditions). Ensuite j'ai utilisé plusieurs autres classes que j'avais faite en travaillant en local, pour tester plus rapidement. Et quand j'ai vu le code de PluzzDL j'ai bien vu que c'était pas la bonne solution puisqu'aucune autre classe de téléchargement n'utilise des classe extérieure pour les téléchargement.

Donc voilà le code de mes classes, dans lesquelles j'utilise des iterateurs, je trouvais que c'était assez sympa de les utiliser dans ce contexte :

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

from Navigateur import Navigateur
import StringIO

class M3U_file:
	def __init__(self, name, ext):
		self.name = name
		self.options = ext

	def __str__(self):
		return self.name

class M3U_iterator:
	def __init__(self, data):
		self.buf = StringIO.StringIO(data)

	def __next_line(self):
		l = self.buf.readline()

		if l == "":
			raise StopIteration

		return l.rstrip('\n\r')

	def next(self):
		l = self.__next_line()


		while l[0] == '#':
			ext = {}

			try:
				s = l.split(':')
				ext[s[0].lstrip('#')] = s[1]
			except:
				pass

			l = self.__next_line()

		return M3U_file(l, ext)


	def __iter__(self):
		return self

class M3U:
	def __init__(self, url, navigateur):
		splited = url.split('/')
		self.m3u = splited[-1]
		splited[-1] = ""
		self.basedir = '/'.join(splited)

		data = navigateur.getFichier(url)

		self.files = M3U_iterator(data)

	def getURL(self, filename):
		return self.basedir + filename

Je suis bien au courant que ce que j'ai fait aura besoin de beaucoup de modifications pour être intégrer avec les normes du projet, alors ne vous genez pas. J'ai trouvé une solution, je l'ai implémenté à ma façon et je l'ai partagé. A vous d'adapter selon vos habitudes wink

Et si vous voulez, je peux faire des modifications moi même si vous me dites ce que je dois faire tongue

Hors ligne

#2442 Le 23/11/2012, à 19:51

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Arf, dire qu'on y avait pensé à cette histoire de flux différents selon si on est sur PC/mobile/box...

Je viens de faire rapidement la modif ; je verrais ce WE pour faire mieux.

Merci à tous en tout cas !

(ça serait bien de faire un petit récapitulatif des pseudos parce qu'entre les différents forums, mails, ..., je ne sais plus qui est qui tongue)


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#2443 Le 23/11/2012, à 20:07

spixunl

Re : TVDownloader: télécharger les médias du net !

pour le moment ca marche pour moi

Hors ligne

#2444 Le 23/11/2012, à 20:14

magestik

Re : TVDownloader: télécharger les médias du net !

chaoswizard a écrit :

Arf, dire qu'on y avait pensé à cette histoire de flux différents selon si on est sur PC/mobile/box...

Je viens de faire rapidement la modif ; je verrais ce WE pour faire mieux.

Merci à tous en tout cas !

De rien. Si tu as besoin d'aide, dis le moi, je pourrais m'occuper de modifier des trucs si tu veux wink

chaoswizard a écrit :

(ça serait bien de faire un petit récapitulatif des pseudos parce qu'entre les différents forums, mails, ..., je ne sais plus qui est qui tongue)

Moi je suis que sur ce forum et la première fois que j'ai posté c'était y'a 2 jours. Donc je suis personne, ou juste un petit nouveau. Enfin tu comprends quoi ^^

Hors ligne

#2445 Le 23/11/2012, à 20:19

jchb

Re : TVDownloader: télécharger les médias du net !

Bon bha au final c'était plutôt constructif cette petite soirée IRC magestik ^^
De mon côté j'ai pas encore eu le temps d'y travailler. Je pensais pouvoir faire ça toute la journée puis en fait non.

Hors ligne

#2446 Le 23/11/2012, à 20:45

spixunl

Re : TVDownloader: télécharger les médias du net !

Deux choses :
- quel est l'interet de l'appel a ffmpeg ? A premiere vue le .ts se lit tres bien avec mplayer non ?
- il faudrait tester le retour de ffmpeg justement, le .ts a bien ete recupere pour moi, mais quelque chose a du foirer avec ffmpeg et le .ts a ete supprime comme si de rien n'etait...
Je regarde si c'est un pb uniquement pour ffmpeg chez moi ou pas.
Par contre faire un os.remove si le os.system n'a pas marche c'est un peu rude je pense.

EDIT: oui tout betement je pensais avoir ffmpeg d'installe mais non ... donc pour moi le DL n'aurait jamais "fonctionne" tel quel

Dernière modification par spixunl (Le 23/11/2012, à 20:54)

Hors ligne

#2447 Le 23/11/2012, à 21:02

magestik

Re : TVDownloader: télécharger les médias du net !

Ah oui c'est vrai j'ai oublié de préciser quand même que jchb était mon partenaire de la nuit pour cette découverte formidable big_smile
D'ailleurs c'est lui qui a eu l'idée de regarder les liens des vidéos de l'appli mobile.

Je vais en profiter pour vous faire un compte rendu de l'application mobile, comme promis.

Pour commencer l'application télécharge un fichier zip contenant un fichier JSON par chaine. Chaque fichier contient la liste des programmes disponibles en replay et pour chaque programme disponible il y a le lien vers la playlist m3u.
Voilà le lien du fichier :  http://webservices.francetelevisions.fr … x_main.zip
Normalement y'a un espèce de timestamp en paramètre pour ce zip mais je pense que c'est plus pour empêcher la mise en cache.

Je précise que je n'utilise pas cette archive dans mon code. J'ai trouvé une correspondance entre les liens c'est plus simple. Sinon il faudrait télécharger l'archive, ouvrir les fichier JSON un par un et les parcourir en essayant de trouver la correspondance entre le lien à télécharger et le programme dans le JSON.

Retour à l'application. Quand on clique sur un programme, l'application récupère le fichier m3u globale qui contient 4 playlist m3u, chacune ayant des fragments de différentes qualités (bande-passante). Les quatre qualités sont 150k, 240k, 440k et 840k. Exemple : http://medias2.francetv.fr/catchup-mobi … 21119.m3u8

Là on voit clairement quelque chose de connu à la fin : m3u8/2012/S47/J1/72780286-20121119.m3u8
Donc ce morceau je le récupère (regex powaaa) dans le getInfosOeuvre.php qui est toujours appelé au chargement de PluzzDL.

L'appli sélectionne la playlist (surement en déterminant la bande-passante disponible en se basant sur la vitesse de téléchargement du zip) et la récupère. La playlist spécifique pour la qualité a la même adresse de base que la playlist globale, en gros ils rajoute juste la qualité après la date : 72780286-20121119-840k.m3u8 Par exemple : http://medias2.francetv.fr/catchup-mobi … -840k.m3u8

Dans mon cas je sélectionne toujours la playlist ayant la plus haute bande-passante, sans utiliser de REGEX comme c'était avant sur le master.m3u. Ce qui est bien c'est que si le master.m3u a la même syntaxe que les m3u mobile alors on peut simplifier le code en supprimant la condition permettant l'expression régulière pour trouver la meilleure qualité pour ftvod, mon code utilise la playlist globale et lit chaque sous playlist et les options associés pour determiner celle qui a la meilleure qualité.

Finalement l'application récupère les fragments et les lis directement. Les fragments sont placés dans un sous dossier portant le nom de la playlist et sont nommé comme les playlist en ajoutant le numéro du fragment à la fin : 72780286-20121119-840k/72780286-20121119-0.ts Petit exemple : http://medias2.francetv.fr/catchup-mobi … 21119-0.ts

De mon côté je télécharge les fragments et je met tout dans le même fichier et à la fin je lance ffmpeg pour convertir en mkv pour que ce soit lisible : là j'ai rien inventé hein ^^ J'ai juste repris le code déjà existant dans pluzzdl.

Voilà, j'espère que c'était clair ^^

La seule hypothèse que j'utilise c'est qu'on peut trouver le nom de la playlist (via une regex uniquement) dans le getInfosOeuvres.php ... ce qui est toujours le cas normalement. Tout les reste fonctionne comme l'application pluzz du coups même si ils font des (petits) changements ça devrait pas tout casser.

Dernière modification par magestik (Le 23/11/2012, à 21:08)

Hors ligne

#2448 Le 23/11/2012, à 21:05

magestik

Re : TVDownloader: télécharger les médias du net !

spixunl a écrit :

Deux choses :
- quel est l'interet de l'appel a ffmpeg ? A premiere vue le .ts se lit tres bien avec mplayer non ?
- il faudrait tester le retour de ffmpeg justement, le .ts a bien ete recupere pour moi, mais quelque chose a du foirer avec ffmpeg et le .ts a ete supprime comme si de rien n'etait...
Je regarde si c'est un pb uniquement pour ffmpeg chez moi ou pas.
Par contre faire un os.remove si le os.system n'a pas marche c'est un peu rude je pense.

EDIT: oui tout betement je pensais avoir ffmpeg d'installe mais non ... donc pour moi le DL n'aurait jamais "fonctionne" tel quel

J'ai pas trop touché à ça. C'était déjà fait donc j'ai pas trop touché.

Et l'appel à ffmpeg (je crois qu'ils en parlaient vers la page 84) permet de faire un vrai mkv lisible correctement. En entré il prend un fichier dans lequel on a mis tout les fragments bout à bout (donc psa trop lisible) et en sortir on a un beau MKV qui fonctionne sans aucun problème. Mais c'est pas un ré-encodage ou quoi que ce soit, ça dure 1 seconde au maximum ^^

Hors ligne

#2449 Le 23/11/2012, à 21:09

chaoswizard

Re : TVDownloader: télécharger les médias du net !

Oui, l'appel a ffmpeg sert à construire l'en tête de la vidéo (certains lecteurs arrivent très à bien à fonctionner sans, d'autres non...).


Ubuntu ==> Debian ==> Archlinux

Hors ligne

#2450 Le 23/11/2012, à 21:19

spixunl

Re : TVDownloader: télécharger les médias du net !

Oui enfin MPGED-TS c'est pas mal, MKV c'est juste le conteneur...
Par contre je pense vraiment que faire un remove sans tester le retour du system avant c'est pas terrible.

Hors ligne