#126 Le 02/08/2010, à 13:17
- Vermouth
Re : TVDownloader: télécharger les médias du net !
Arte: Émission trouvée /fr/videos/360_geo-3333124.html
DEPRECATED: Plugin.getPage()
Arte: ... videoRef : 3333162
Arte: ... Player : http://videos.arte.tv/blob/web/i18n/view/player_9-3188338-data-4755951.swf
DEPRECATED: Plugin.getPage()
Arte: ... Titre : 360° - GÉO
Arte: ... Date : Lun., 26. juil. 2010, 18h05
Arte: ... Lien : rtmp://artestras.fcod.llnwd.net/a3903/o35/MP4:geo/videothek/ALL/arteprod/A7_SGT_ENC_08_042394-000-A_PG_HQ_FR?h=3f1c346ca4f8ada38280c64316a5030c -W http://videos.arte.tv/blob/web/i18n/view/player_9-3188338-data-4755951.sw
Tu doit pas avoir une version incompatible du plugin arte.
Pour l'instant le prog évolu beaucoup donc ça pose problème niveau compatibilité des plugins.
Laissez nous quelque version pour stabiliser le truc.
T'as la version 0.3 je suppose...
De manière général, si vous voyer des DEPRECATED c'est que le plugin aurai besoin d'une mise à jour.
Les plugins compatible avec la version 0.2 ne le sous pas avec la 0.3 et inversement. C'est une petite erreur "stratégique" j'ai l'impression XD !
Android !
\_/°<
coin coin...
Hors ligne
#127 Le 02/08/2010, à 13:20
- albh
Re : TVDownloader: télécharger les médias du net !
Oui oui, il est bien coché, et je ne vois pas les émissions, la chaîne et les styles et tout ça s'affiche bien.
Hors ligne
#128 Le 02/08/2010, à 13:48
- Vermouth
Re : TVDownloader: télécharger les médias du net !
Oui oui, il est bien coché, et je ne vois pas les émissions, la chaîne et les styles et tout ça s'affiche bien.
Oaui bein c'est sûrement ce que je t'ai dit avant:
Tu doit pas avoir une version incompatible du plugin arte.
Mais c'est pas 100% imcompatible c'est pour ça que des trucs s'affiche...
Android !
\_/°<
coin coin...
Hors ligne
#129 Le 02/08/2010, à 13:52
- albh
Re : TVDownloader: télécharger les médias du net !
Hum je vais patienter alors:D
Hors ligne
#130 Le 02/08/2010, à 14:07
- ludovic889
Re : TVDownloader: télécharger les médias du net !
bon ben merci,
attendons la prochaine version
Ce n'est pas grave de ne pas avoir l'heure si on a le temps.
Hors ligne
#131 Le 02/08/2010, à 14:10
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Essayez cette version, elle devrait marcher pour Arte+7 et ArteLiveWeb.
Je viens encore de tester à l'instant :
#!/usr/bin/env python
# -*- coding:Utf-8 -*-
#########################################
# Licence : GPL2 ; voir fichier LICENSE #
#########################################
#~ Ce programme est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous).
#~ Ce programme est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.
#~ Vous devez avoir reçu une copie de la Licence Publique Générale GNU en même temps que ce programme ; si ce n'est pas le cas, écrivez à la Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis.
###########
# Modules #
###########
import os
from Plugin import Plugin
from Fichier import Fichier
from urllib import quote,unquote
import re,unicodedata
import time,rfc822 # for RFC822 datetime format (rss feed)
from htmlentitydefs import name2codepoint
##########
# Classe #
##########
class Arte( Plugin ):
"""Classe abstraite Plugin dont doit heriter chacun des plugins"""
# Nombre maximum de fichiers à rechercher (0 = aucune limite)
maxDepth = 0
##
## Arte Live Web
##
#
# A/ Recherche des émissions
#
# 1. On liste les catégories à partir de la page d'accueil.
# Chaque catégorie est une "émission" de la chaine Arte Live Web
#
# B/ Recherche des fichiers d'une émission
#
# 1. On recherche la page du flux RSS à partir de la page de la catégorie choisie.
# 2. On extrait la liste des fichiers (les pages de chaque enregistrement proposé)
# 3. On recherche le numéro eventID à partir de la page de l'enregistrement
# 4. On recherche les détails de l'enregistrement dans la page xml associée à l'eventID
#
##
## Arte+7
##
## Utilisation de la méthode de Pascal92
## http://www.encodage.org/phpBB/viewtopic.php?f=26&t=90
##
#
# A/ Recherche des émissions
#
# 1. On liste les chaines à partir de la page d'accueil.
# Chaque chaine est une "émission" de la chaine Arte+7
#
# B/ Recherche des fichiers d'une émission
#
# 1. On charge la page spéciale "videoArtePlusSeptChaineBaseUrl" contenant les fichiers de la chaine choisie
# 2. On extrait la liste des fichiers (les pages ainsi que nom et date de chaque enregistrement proposé)
# 3. On recherche le numéro de référence de la vidéo à partir de la page de l'enregistrement
# 4. On recherche les détails de l'enregistrement dans la page xml associée à la référence
#
##
## Arte Live Web
##
nomArteLiveWeb = "Arte Live Web"
# Page permettant de lister les catégories
listeArteLiveWebCategoriesUrl = "http://liveweb.arte.tv/"
# Expression régulière pour extraire les catégories
listeArteLiveWebCategoriesPattern = re.compile("<a href=\"http://liveweb.arte.tv/fr/cat/(.*?)\">(.*?)</a>", re.DOTALL)
# Rang dans le résultat de l'expression régulière précédente
categorieArteLiveWeb_LIEN = 0
categorieArteLiveWeb_NOM = 1
# Base de la page catégorie, permettant de retrouver le lien du flux RSS
videoArteLiveWebCategorieBaseUrl = "http://liveweb.arte.tv/fr/cat/"
# Expression régulière pour extraire le lien du flux RSS
videoArteLiveWebRSSPattern = re.compile("<a href=\"(http://download.liveweb.arte.tv/o21/liveweb/rss/home.*?\.rss)\"", re.DOTALL)
# Expression régulière pour extraire le lien vers la page de la video, ainsi que sa date
videoArteLiveWebVideosPattern = re.compile("<link>(http://liveweb.arte.tv/fr/video/.*?)</link>.*?<pubDate>(.*?)</pubDate>", re.DOTALL)
#~ videoArteLiveWebEventIDPattern = re.compile("eventID=(.*?)&")
#~ videoArteLiveWebEventIDPattern = re.compile("new LwEvent('(.*?)', '');")
videoArteLiveWebEventIDPattern = re.compile("/media/event/(.*?)/", re.DOTALL)
videoArteLiveWebInfosBaseUrl = "http://arte.vo.llnwd.net/o21/liveweb/events/event-" # ".xml"
videoArteLiveWebTitrePattern = re.compile("<nameFr>(.*?)</nameFr>", re.DOTALL)
videoArteLiveWebLienPattern = re.compile("<urlHd>(.*?)</urlHd>", re.DOTALL)
#~ videoArteLiveWebDatePattern = re.compile("<dateEvent>(.*?)</dateEvent>", re.DOTALL)
##
## Arte+7
##
nomArtePlusSept = "Arte+7"
# Page permettant de lister les chaines
listeArtePlusSeptChainesUrl = "http://videos.arte.tv/fr/videos/arte7"
# Expression régulière pour extraire les chaines
listeArtePlusSeptChainesPattern = re.compile("<a href=\"/fr/videos/chaines/(.*?)\".*?>(.*?)</a>", re.DOTALL)
# Rang dans le résultat de l'expression régulière précédente
categorieArtePlusSept_LIEN = 0
categorieArtePlusSept_NOM = 1
# Expression régulière pour extraire le channelID du lien de la chaine
chaineArtePlusSeptChannelIDPattern = re.compile(".*?/index-(.*?)\.html", re.DOTALL)
# Base de la page chaine, permettant de retrouver les fichiers (lien donné par "listViewUrl" dans la page principale)
videoArtePlusSeptChaineBaseUrl = "http://videos.arte.tv/fr/do_delegate/videos/arte7/index-3211552,view,asList.html?hash=fr/list/date//1/250/channel-%channel%-program-"
# Expression régulière pour extraire le lien vers la page de la video, son titre ainsi que sa date
videoArtePlusSeptVideosPattern = re.compile("<a href=\"(/fr/videos/.*?\.html)\"><span class=\"teaserTitle\">(.*?)</span></a>.*?<td class=\"col2\"><em>(.*?)</em></td>", re.DOTALL)
# Base de la page permettant de rechercher la référence de la video
videoArtePlusSeptVideoBaseUrl = "http://videos.arte.tv"
# Expression régulière pour extraire la référence de la vidéo à lire
videoArtePlusSeptVideoRefPattern = re.compile("addToPlaylistOpen {ajaxUrl:'/fr/do_addToPlaylist/videos/.*?-(.*?)\.html'}", re.DOTALL)
videoArtePlusSeptPlayerPattern = re.compile("<param name=\"movie\" value=\"(.*?\.swf)", re.DOTALL)
# Base de la page XML décrivant la vidéo, ses liens
videoArtePlusSeptXMLBaseURL = "http://videos.arte.tv/fr/do_delegate/videos/360_geo-%video%,view,asPlayerXml.xml"
videoArtePlusSeptLienPattern = re.compile("<url quality=\"hd\">(.*?)</url>", re.DOTALL)
# Ordre des éléments dans le tuple "chaine"
chaine_NOM = 1
chaine_LIEN = 0
nom = "Arte"
url = "http://www.arte.tv/"
def __init__( self ):
Plugin.__init__(self)
cache = self.chargerCache()
if cache:
self.listeChaines = cache
else:
self.listeChaines = {}
self.rafraichir()
self.listeFichiers = {}
def htmlentitydecode(self, s):
# http://wiki.python.org/moin/EscapingHtml
return re.sub('&(%s);' % '|'.join(name2codepoint),
lambda m: unichr(name2codepoint[m.group(1)]), s)
def rafraichir( self ):
self.afficher("Création de la liste des chaines...")
##
## Arte Live Web
##
self.afficher("Récupération de la liste des catégories "+self.nomArteLiveWeb+"...")
# On crée la chaine
self.listeChaines[self.nomArteLiveWeb] = []
# On recherche toutes les catégories
for item in re.findall(self.listeArteLiveWebCategoriesPattern, self.API.getPage(self.listeArteLiveWebCategoriesUrl)):
lien = item[self.categorieArteLiveWeb_LIEN]
nom = item[self.categorieArteLiveWeb_NOM]
#~ nom = unicode(nom, "iso-8859-1", "replace")
itemLive = []
itemLive.insert (self.chaine_LIEN, lien)
itemLive.insert (self.chaine_NOM, nom)
# On ajoute la catégorie trouvée si elle n'est pas déjà présente
if (itemLive not in self.listeChaines[self.nomArteLiveWeb]):
self.listeChaines[self.nomArteLiveWeb].append(itemLive)
##
## Arte+7
##
self.afficher("Récupération de la liste des chaines "+self.nomArtePlusSept+"...")
# On crée la chaine
self.listeChaines[self.nomArtePlusSept] = []
# On recherche toutes les catégories
for item in re.findall(self.listeArtePlusSeptChainesPattern, self.API.getPage(self.listeArtePlusSeptChainesUrl)):
lien = item[self.categorieArtePlusSept_LIEN]
nom = item[self.categorieArtePlusSept_NOM]
#~ nom = unicode(nom, "utf8", "replace")
#~ nom = self.htmlentitydecode(nom)
#~ nom = nom.encode("utf-8", "replace")
itemPlusSept = []
itemPlusSept.insert (self.chaine_LIEN, lien)
itemPlusSept.insert (self.chaine_NOM, nom)
# On ajoute la catégorie trouvée si elle n'est pas déjà présente
if (itemPlusSept not in self.listeChaines[self.nomArtePlusSept]):
self.listeChaines[self.nomArtePlusSept].append(itemPlusSept)
self.sauvegarderCache(self.listeChaines)
def getLienEmission(self, emission):
#~ emission = unicode( emission, "utf8", "replace" )
# Cherche dans quelle chaine se trouve l'émission
#~ self.afficher("Recherche de : "+emission)
#~ for chaine in self.listeChaines.keys():
#~ #~ self.afficher("Chaine : "+chaine)
chaine = self.derniereChaine
for item in self.listeChaines[chaine]:
s = item[self.chaine_NOM]
#~ self.afficher("Item : "+s)
if (cmp(s, emission)==0):
s = item[self.chaine_LIEN]
if (s==""):
return None
else:
return quote(s.encode( 'ascii','ignore' ))
def listerChaines( self ):
t = self.listeChaines.keys()
t.sort()
return t
def listerEmissions( self, chaine ):
t = []
self.derniereChaine = chaine
if self.listeChaines.has_key(chaine):
for item in self.listeChaines[chaine]:
s = item[self.chaine_NOM]
#~ t.append(s.decode("iso-8859-1"))
t.append(s)
t.sort()
return t
def listerFichiersArteLiveWeb( self, emission ):
"""Renvoi la liste des fichiers disponibles pour une emission donnnee"""
# Renvoi la liste des fichiers (utilisation de la classe Fichier)
# [ Fichier ( nom, date, lien) , Fichier( ... ), ... ]
if self.listeFichiers.has_key(emission):
return self.listeFichiers[emission]
lien = self.getLienEmission(emission)
if lien == None:
self.afficher ("Erreur de recherche du lien pour \""+emission+"\"")
else:
self.afficher("Récupération de la liste des fichiers pour \""+emission+"\"...")
# Reconstitution du lien complet
lien = self.videoArteLiveWebCategorieBaseUrl+lien
# On recherche l'adresse de la page RSS
self.afficher ("Recherche du flux RSS \""+emission+"\" à l'adresse "+lien)
feedURL = re.search(self.videoArteLiveWebRSSPattern, self.API.getPage(lien)).group(1)
# On recherche toutes les émissions contenues dans le flux RSS
self.afficher ("Recherche des émissions dans le flux : "+feedURL)
videos = re.findall(self.videoArteLiveWebVideosPattern, self.API.getPage(feedURL))
liste = []
if videos == None:
return liste
# Pour chacune des vidéos trouvées
curDepth = 0
for fichier in videos:
#~ curDepth = curDepth+1
curDepth += 1
if (self.maxDepth>0 and curDepth>self.maxDepth):
break
self.afficher ("Émission trouvée "+fichier[0])
# Recherche de l'eventID dans la page de l'emission
fichierInfosEventID_match = re.search (self.videoArteLiveWebEventIDPattern, self.API.getPage(fichier[0]))
if fichierInfosEventID_match == None:
continue
self.afficher ("... eventID : "+fichierInfosEventID_match.group(1))
# Chargement de la page XML de l'eventID trouvé
fichierInfos = self.API.getPage(self.videoArteLiveWebInfosBaseUrl+fichierInfosEventID_match.group(1)+".xml")
titre = re.search(self.videoArteLiveWebTitrePattern, fichierInfos)
if titre != None:
titre = titre.group(1)
else:
curDepth -= 1 # On n'est pas tombé sur une vidéo valide (pas de titre trouvé ?!)
continue
lien = re.search(self.videoArteLiveWebLienPattern, fichierInfos)
if lien != None:
lien = lien.group(1)
else:
curDepth -= 1 # On n'est pas tombé sur une vidéo valide (pas de lien, vidéo Live à venir ??)
continue
#~ date = re.search(self.videoDatePattern, fichierInfos)
date = fichier[1]
if date != None:
rfc_date = rfc822.parsedate(date)
# Format année/mois/jour, mieux pour effectuer un tri
date = str(rfc_date[0])+"/"+str(rfc_date[1]).zfill(2)+"/"+str(rfc_date[2]).zfill(2)
else:
continue
if not(lien):
continue
self.afficher ("... Titre : "+titre)
self.afficher ("... Date : "+date)
self.afficher ("... Lien : "+lien)
# On a le lien brut, il faut l'analyser pour pouvoir effectuer un téléchargement convenable avec rtmpdump
# un lien du type
# rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4
# est téléchargé avec la commande
# rtmpdump --host arte.fcod.llnwd.net --port 1935 --protocol RTMP --app a2306/o25 --playpath MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4 --flv 'Justin Adams & Juldeh Camara.mp4'
urlPattern = re.compile("rtmp://(?P<host>.*?)/(?P<app>.*?)/(?P<playpath>\w*?\:.*)", re.DOTALL)
urlParts = re.search(urlPattern, lien)
filePath = urlParts.group("playpath")
(dirName, fileName) = os.path.split(filePath)
#~ (fileBaseName, fileExtension)=os.path.splitext(fileName)
urlRtmpMask = "rtmpdump --host %host% --port 1935 --protocol RTMP --app %app% --playpath %playpath% --flv '%filename%'"
lien = urlRtmpMask
lien = lien.replace ("%host%", urlParts.group("host"))
lien = lien.replace ("%app%", urlParts.group("app"))
lien = lien.replace ("%playpath%", urlParts.group("playpath"))
#~ lien = lien.replace ("%filename%", titre+fileExtension)
lien = lien.replace ("%filename%", fileName)
self.afficher ("... Commande : "+lien)
self.API.ajouterFichier( Fichier( titre, date, lien ) )
liste.append(Fichier(titre, date, lien))
self.afficher(str(len(liste))+" fichiers trouvés.")
self.listeFichiers[emission] = liste
#~ return liste
def listerFichiersArtePlusSept( self, emission ):
"""Renvoi la liste des fichiers disponibles pour une emission donnnee"""
# Renvoi la liste des fichiers (utilisation de la classe Fichier)
# [ Fichier ( nom, date, lien) , Fichier( ... ), ... ]
if self.listeFichiers.has_key(emission):
return self.listeFichiers[emission]
# Code de la "chaine" Arte+7
channel = re.search (self.chaineArtePlusSeptChannelIDPattern, self.getLienEmission(emission)).group(1)
# Construction du lien contenant toutes les émissions de cette chaine
lien = self.videoArtePlusSeptChaineBaseUrl.replace ("%channel%", channel)
if lien == None:
self.afficher ("Erreur de recherche du lien pour \""+emission+"\"")
else:
self.afficher("Récupération de la liste des fichiers pour \""+emission+"\"...")
# On recherche toutes les émissions de la chaine
self.afficher ("Recherche des émissions de la chaine \""+emission+"\" à l'adresse "+lien)
videos = re.findall(self.videoArtePlusSeptVideosPattern, self.API.getPage(lien))
liste = []
if videos == None:
return liste
# Pour chacune des vidéos trouvées
curDepth = 0
for fichier in videos:
#~ curDepth = curDepth+1
curDepth += 1
if (self.maxDepth>0 and curDepth>self.maxDepth):
break
self.afficher ("Émission trouvée "+fichier[0])
fichierInfos = self.API.getPage(self.videoArtePlusSeptVideoBaseUrl+fichier[0])
# Recherche de la référence de la vidéo dans la page de l'emission
fichierInfosVideoRef_match = re.search (self.videoArtePlusSeptVideoRefPattern, fichierInfos)
if fichierInfosVideoRef_match == None:
continue
self.afficher ("... videoRef : "+fichierInfosVideoRef_match.group(1))
# Recherche l'adresse du player video, pour la suite
fichierInfosPlayer_match = re.search (self.videoArtePlusSeptPlayerPattern, fichierInfos)
if fichierInfosPlayer_match == None:
continue
self.afficher ("... Player : "+fichierInfosPlayer_match.group(1))
#~ # Chargement de la page XML de la référence trouvée
fichierInfos = self.API.getPage(self.videoArtePlusSeptXMLBaseURL.replace("%video%",fichierInfosVideoRef_match.group(1)))
#~ file = open(self.fichierCache+"_web", "w")
#~ file.write (fichierInfos)
#~ file.close()
titre = fichier[1]
lien = re.search(self.videoArtePlusSeptLienPattern, fichierInfos)
if lien != None:
#~ lien = lien.group(1)
# Workaround : on ajoute le nom du player directement ici
lien = lien.group(1)+" -W "+fichierInfosPlayer_match.group(1)
else:
continue
date = fichier[2]
if not(lien):
continue
self.afficher ("... Titre : "+titre)
self.afficher ("... Date : "+date)
self.afficher ("... Lien : "+lien)
self.API.ajouterFichier( Fichier( titre, date, lien ) )
liste.append(Fichier(titre, date, lien))
self.afficher(str(len(liste))+" fichiers trouvés.")
self.listeFichiers[emission] = liste
#~ return liste
def listerFichiers( self, emission ):
if (self.derniereChaine == self.nomArteLiveWeb):
#~ return self.listerFichiersArteLiveWeb (emission)
self.listerFichiersArteLiveWeb (emission)
elif (self.derniereChaine == self.nomArtePlusSept):
#~ return self.listerFichiersArtePlusSept (emission)
self.listerFichiersArtePlusSept (emission)
else:
self.afficher("Chaine non prise en compte actuellement")
Hors ligne
#132 Le 02/08/2010, à 14:15
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
- Une variable MaxDepth (ligne 33) permet de choisir le nombre maximum de fichier à rechercher par émission.
- Arte+7 télécharge les fichiers correctement, mais avec des noms du genre player_9-3188338-data-4755951.swf.
- Arte Live Web télécharge les fichiers, mais affiche une erreur en console, et dans le répertoire /usr/share/tvdownloader.
C'est le seul moyen actuellement d'arriver à télécharger les émissions. C'est lié aux problèmes d'utilisation de rtmpdump évoqués dans les topics précédents.
Hors ligne
#133 Le 02/08/2010, à 14:22
- albh
Re : TVDownloader: télécharger les médias du net !
Alors oui c'est mieux, bien mieux, juste le téléchargement qui se fait pas car il manque "://"
Arte: 12 fichiers trouvés.
RTMPDump v2.3
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
ERROR: RTMP URL: No :// in url!
WARNING: Couldn't parse the specified url (rtmpdump)!
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO: duration 4324.01
INFO: moovPosition 517461181.00
INFO: width 720.00
INFO: height 400.00
INFO: videocodecid avc1
INFO: audiocodecid mp4a
INFO: avcprofile 66.00
INFO: avclevel 30.00
INFO: aacaot 2.00
INFO: videoframerate 25.00
INFO: audiosamplerate 48000.00
INFO: audiochannels 2.00
INFO: tags:
INFO: ©too Lavf52.34.0
INFO: trackinfo:
INFO: length 108096.00
INFO: timescale 25.00
INFO: language und
INFO: sampledescription:
INFO: sampletype avc1
INFO: length 207552512.00
INFO: timescale 48000.00
INFO: language und
INFO: sampledescription:
INFO: sampletype mp4a
130.813 kB / 1.24 sec (0.0%)
Caught signal: 13, cleaning up, just a second...
ERROR: WriteN, RTMP send error 32 (42 bytes)
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 70545
133.403 kB / 1.24 sec (0.0%)
Download may be incomplete (downloaded about 0.00%), try resuming
Hors ligne
#134 Le 02/08/2010, à 14:44
- chaoswizard
Re : TVDownloader: télécharger les médias du net !
@BmD_Online :
La version 0.4 est en cours de développement et devrait permettre de faire ce que tu veux :
Dans la prochaine version du logiciel (0.4), 2 champs ont été ajoutés :
- Le premier permet de préciser toute la commande de téléchargement a lancer SAUF la partie qui concerne le nom du fichier de sortie (donc pas d'option -o)
- Le second permet de préciser le nom du fichier de sortie
Ces 2 champs sont optionnels.
Format :
self.API.ajouterFichier( Fichier( nom, date, lien, commande, nomFichierSortie ) )
Exemple d'utilisation :
self.API.ajouterFichier( Fichier( ...,
...,
rtmp://arte.fcod.llnwd.net/a2306/o25/MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4,
rtmpdump --host arte.fcod.llnwd.net --port 1935 --protocol RTMP --app a2306/o25 --playpath MP4:liveweb/stream/1399_Suds_Arles_JUSTIN_ADAMS_100715_hd.mp4,
Justin Adams & Juldeh Camara.mp4 ) )
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#135 Le 02/08/2010, à 14:49
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Il faudrait ajouter une gestion des versions des plugins.
Exemple à prendre chez Mozilla : Les addons ont un "minVersion" et un "maxVersion" qui indiquent quelles versions de l'application (firefox, thunderbird) est compatible avec l'addon.
Hors ligne
#136 Le 02/08/2010, à 14:52
- Vermouth
Re : TVDownloader: télécharger les médias du net !
Il faudrait ajouter une gestion des versions des plugins.
Exemple à prendre chez Mozilla : Les addons ont un "minVersion" et un "maxVersion" qui indiquent quelles versions de l'application (firefox, thunderbird) est compatible avec l'addon.
Pas bête oui.
Là je travail à rendre le développement de plugin plus facile et pérenne, à uniformiser un peu le tout.
Dernière modification par Vermouth (Le 02/08/2010, à 14:53)
Android !
\_/°<
coin coin...
Hors ligne
#137 Le 02/08/2010, à 14:52
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Alors oui c'est mieux, bien mieux, juste le téléchargement qui se fait pas car il manque "://"
Moi, j'ai le même message, mais ça télécharge.
RTMPDump v2.3
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
ERROR: RTMP URL: No :// in url!
WARNING: Couldn't parse the specified url (rtmpdump)!
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO: duration 3228.42
INFO: moovPosition 374137777.00
INFO: width 720.00
INFO: height 406.00
INFO: videocodecid avc1
INFO: audiocodecid mp4a
INFO: avcprofile 66.00
INFO: avclevel 30.00
INFO: aacaot 2.00
INFO: videoframerate 25.00
INFO: audiosamplerate 48000.00
INFO: audiochannels 2.00
INFO: tags:
INFO: ©too Lavf52.34.0
INFO: trackinfo:
INFO: length 80710.00
INFO: timescale 25.00
INFO: language und
INFO: sampledescription:
INFO: sampletype avc1
INFO: length 154963968.00
INFO: timescale 48000.00
INFO: language und
INFO: sampledescription:
INFO: sampletype mp4a
322102.333 kB / 2816.88 sec (87.2%)
Probablement une question d'accès en écriture dans /usr/share/tvdownloader.
Mais ne cherche pas, c'est pas normal de devoir écrire à cet emplacement.
Et, quoi qu'il en soit, ces problèmes devraient être résolus avec la 0.4.
Hors ligne
#138 Le 02/08/2010, à 17:51
- chaoswizard
Re : TVDownloader: télécharger les médias du net !
Bon, j'ai corrigé cette histoire de plugins dans le home (ça sera donc pour la version 0.4).
@BmD_Online : Toi qui a l'air de savoir faire marcher rtmpdump, comment tu transformes les liens pour M6 ?
Ex :
rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/m6_100-mag_56110_300720101850.mp4
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#139 Le 02/08/2010, à 18:15
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Bon, j'ai corrigé cette histoire de plugins dans le home (ça sera donc pour la version 0.4).
@BmD_Online : Toi qui a l'air de savoir faire marcher rtmpdump, comment tu transformes les liens pour M6 ?
Ex :rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/m6_100-mag_56110_300720101850.mp4
Youh, j'sais pas.
T'as essayé avec le modèle Arte que j'ai cité plus haut ?
Ca donnerait un truc du genre :
rtmpdump --host m6dev.fcod.llnwd.net --port 443 --protocol RTMP --app a3100/d1 --playpath m6_100-mag_56110_300720101850.mp4 --flv m6_100-mag_56110_300720101850.mp4
J'ai testé et ça ne marche pas.
Il faut voir avec Pascal92, il le fait dans son programme TVO, il doit avoir la méthode exacte.
Hors ligne
#140 Le 02/08/2010, à 21:17
- pascal92
Re : TVDownloader: télécharger les médias du net !
Bonsoir,
Rien de particulier pour M6 et W9, inutile de parser l'URL avant, juste le player à indiquer.
Pour reprendre votre exemple :
rtmpdump -r "rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/m6_100-mag_56110_300720101850.mp4" -W "http://groupemsix.vo.llnwd.net/o24/u/replayrelease/libs/StatPlaylibrary2.swf" -e -o "Votre_chemin\m6_100-mag_56110_300720101850.mp4"
@+
Dernière modification par pascal92 (Le 02/08/2010, à 21:17)
Hors ligne
#141 Le 03/08/2010, à 00:23
- olaf.10
Re : TVDownloader: télécharger les médias du net !
Bonsoir,
Rien de particulier pour M6 et W9, inutile de parser l'URL avant, juste le player à indiquer.
Pour reprendre votre exemple :rtmpdump -r "rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/m6_100-mag_56110_300720101850.mp4" -W "http://groupemsix.vo.llnwd.net/o24/u/replayrelease/libs/StatPlaylibrary2.swf" -e -o "Votre_chemin\m6_100-mag_56110_300720101850.mp4"
@+
Je me permets de corriger, il manque "/mp4:production/regienum/" :
rtmpdump -r "rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/mp4:production/regienum/m6_100-mag_56110_300720101850.mp4" -W "http://groupemsix.vo.llnwd.net/o24/u/replayrelease/libs/StatPlaylibrary2.swf" -e -o "Votre_chemin\m6_100-mag_56110_300720101850.mp4"
Dans µrecorder je n'indique aucun player (-W), j'imagine que je n'ai pas raison... je ferai des tests demain pour en avoir le coeur net.
Ça ne marche pas, sous Windows, sans cette option -W ?
Hors ligne
#142 Le 03/08/2010, à 05:01
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Je me permets de corriger, il manque "/mp4:production/regienum/" :
rtmpdump -r "rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/mp4:production/regienum/m6_100-mag_56110_300720101850.mp4" -W "http://groupemsix.vo.llnwd.net/o24/u/replayrelease/libs/StatPlaylibrary2.swf" -e -o "Votre_chemin\m6_100-mag_56110_300720101850.mp4"
Ah ben voilà. Du coup, la commande décomposée comme pour Arte fonctionne :
rtmpdump --host m6dev.fcod.llnwd.net --port 443 --protocol RTMP --app a3100/d1 --playpath mp4:production/regienum/m6_100-mag_56110_300720101850.mp4 --flv m6_100-mag_56110_300720101850.mp4
Hors ligne
#143 Le 03/08/2010, à 05:26
- pascal92
Re : TVDownloader: télécharger les médias du net !
Je me permets de corriger, il manque "/mp4:production/regienum/" :
rtmpdump -r "rtmpe://m6dev.fcod.llnwd.net:443/a3100/d1/mp4:production/regienum/m6_100-mag_56110_300720101850.mp4" -W "http://groupemsix.vo.llnwd.net/o24/u/replayrelease/libs/StatPlaylibrary2.swf" -e -o "Votre_chemin\m6_100-mag_56110_300720101850.mp4"
Dans µrecorder je n'indique aucun player (-W), j'imagine que je n'ai pas raison... je ferai des tests demain pour en avoir le coeur net.
Ça ne marche pas, sous Windows, sans cette option -W ?
Arf, je n'avais pas vérifié le lien original
Bon retour sieur Olaf
Concernant le player, je le met par sécurité, suivant les version de rtmpdump, il me semble que c'est préférable... (je suis descendu à la 2.2 sur TVO)
@+
Hors ligne
#144 Le 03/08/2010, à 08:17
- chaoswizard
Re : TVDownloader: télécharger les médias du net !
Ok, merci à vous 3 !
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#145 Le 03/08/2010, à 11:15
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
A propos de Pluzz, j'ai le même problème qu'avec TVO via Wine :
Seulement 195.9Mo sont téléchargés par fichier, puis plus rien. J'ai des émissions incomplètes.
Je viens de lancer manuellement msdl en mode verbose pour voir s'il y a un message d'erreur particulier. Je vous tiendrai au courant.
Hors ligne
#146 Le 03/08/2010, à 13:19
- pascal92
Re : TVDownloader: télécharger les médias du net !
Étonnant ce problème avec ce type de lien,
Le problème sur Akamaistream c'est de s'y connecter, et de nombreux outils de téléchargement se plantent à ce niveau (question de protocole). Après ça roule normalement.
Et le resume lui doit fonctionner en cas de pépin.(option -c).
Dernière modification par pascal92 (Le 03/08/2010, à 13:22)
Hors ligne
#147 Le 03/08/2010, à 15:07
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Étonnant ce problème avec ce type de lien,
Le problème sur Akamaistream c'est de s'y connecter, et de nombreux outils de téléchargement se plantent à ce niveau (question de protocole). Après ça roule normalement.
Et le resume lui doit fonctionner en cas de pépin.(option -c).
Pour Pluzz ?
Voici ce que donne msdl en mode verbeux :
msdl -v -c mms://a988.v101995.c10199.e.vm.akamaistream.net/7/988/10199/3f97c7e6/ftvigrp.download.akamai.com/10199/cappuccino/production/publication/Autre/Autre/2010/S30/149838_questionmaison_20100731.wmv -o 149838_questionmaison_20100731.wmv
download [ 149838_questionmaison_20100731.wmv ]
url: mms://a988.v101995.c10199.e.vm.akamaistream.net/7/988/10199/3f97c7e6/ftvigrp.download.akamai.com/10199/cappuccino/production/publication/Autre/Autre/2010/S30/149838_questionmaison_20100731.wmv
Host: [ 81.52.170.54:554 ] connected!
warning: No ETag!!
stream: video 0 RTP/AVP 96
stream: application 0 RTP/AVP 96
stream: audio 0 RTP/AVP 96
stream: video 0 RTP/AVP 96
file size = 211109571
play_duration = 2702
send_duration = 2698
# of packets = 73080
flags = 2
packet_size = 2888
min_packsize = 2888
video stream detected!!!!
audio stream detected!!!!
video stream detected!!!!
stream bitrate properties object
stream count = [0x3] [3]
audio streams: 1, video streams: 2
stream_id = [0x1] [1]
max bitrate = [0x10716] [67350]
is audio stream
stream_id = [0x2] [2]
max bitrate = [0x5f48c] [390284]
is video stream
stream_id = [0x3] [3]
max bitrate = [0x2e96c] [190828]
is video stream
resume "149838_questionmaison_20100731.wmv" : cannot open file for resume
just get file from beginning.
download protocol: rtsp - wms
DL: 205400289/205400289 B -- 100% 75.7K/s Complete
finished!!
FINISHED --00:45:24--
On a "file size = 211109571" mais le fichier final ne fait que 195.9Mo.
Et il précise "cannot open file for resume".
Hors ligne
#148 Le 03/08/2010, à 15:15
- BmD_Online
Re : TVDownloader: télécharger les médias du net !
Et il précise "cannot open file for resume".
En relançant la commande, il propose de reprendre où il en était. Mais ne fait rien.
Apparemment, le resume fonctionnerait mais il ne va pas plus loin que 195.9Mo :
Pour commencer :
resume "149838_questionmaison_20100731.wmv": try to resume from 2698s
Range: npt=2692.945-2702.560
download protocol: rtsp - wms
resume: seek OK, start writing from 205397401 [0xc3e1d99]
DL: 205397401/211109571 B -- 97%
Puis il dit avoir terminé, mais ne charge rien de plus.
Hors ligne
#149 Le 03/08/2010, à 16:01
- chaoswizard
Re : TVDownloader: télécharger les médias du net !
TVO utilise aussi msdl ?
Si oui, c'est pi être un bug de msdl qu'il faudrait soumettre aux développeurs.
Ubuntu ==> Debian ==> Archlinux
Hors ligne
#150 Le 03/08/2010, à 16:25
- pascal92
Re : TVDownloader: télécharger les médias du net !
Mais c'est normal
c'est la norme (erronée certes) du 1 Mo= 1024 Ko etc...
J'ai fait le download du même fichier avec la boite à outil de TVO,
Bizarrement j'ai une légère différence sur la taille du fichier :
download [ D:\Encodage\TVO\video\149838_questionmaison_20100731.wmv ]
Host: [ 80.15.233.140:554 ] connected!
cygwin warning:
MS-DOS style path detected: D:\Encodage\TVO\video\149838_questionmaison_201007
31.wmv
Preferred POSIX equivalent is: /video/149838_questionmaison_20100731.wmv
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
resume "D:\Encodage\TVO\video\149838_questionmaison_20100731.wmv" : cannot open
file for resume
just get file from beginning.
Speed: 5.000
DL: 205400289/205400289 B -- 100% 379.1K/s Complete
finished!!
FINISHED --00:09:03--
ce qui me donne sous mon affreux Windows :
195 Mo (205 400 289 octets) !!!
Au passage après indexation ce fichier fait :143 Mo (150 652 627 octets)
et le mediainfo final :
General
Complete name : D:\Encodage\TVO\video\149838_questionmaison_20100731_1.wmv
Format : Windows Media
File size : 144 MiB
Duration : 44mn 57s
Overall bit rate mode : Constant
Overall bit rate : 447 Kbps
Maximum Overall bit rate : 258 Kbps
Encoded date : UTC 2010-07-26 17:17:03.500
Encoder : MANREO Encoder
Profil : FTVI-350-16-9
Video #1
ID : 2
Format : VC-1
Format profile : MP@ML
Codec ID : WMV3
Codec ID/Info : Windows Media Video 9
Codec ID/Hint : WMV3
Description of the codec : Windows Media Video 9
Duration : 44mn 57s
Bit rate mode : Constant
Bit rate : 377 Kbps
Width : 384 pixels
Height : 216 pixels
Display aspect ratio : 16:9
Frame rate : 25.000 fps
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.182
Stream size : 121 MiB (84%)
Language : French
Video #2
ID : 3
Format : VC-1
Format profile : MP@LL
Codec ID : WMV3
Codec ID/Info : Windows Media Video 9
Codec ID/Hint : WMV3
Description of the codec : Windows Media Video 9
Duration : 44mn 57s
Bit rate mode : Constant
Bit rate : 177 Kbps
Width : 320 pixels
Height : 240 pixels
Display aspect ratio : 4:3
Frame rate : 29.970 fps
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.077
Stream size : 56.9 MiB (40%)
Language : French
Audio
ID : 1
Format : WMA
Format version : Version 2
Codec ID : 161
Codec ID/Info : Windows Media Audio
Description of the codec : Windows Media Audio 9.1 - 64 kbps, 44 kHz, stereo (A/V) 1-pass CBR
Duration : 44mn 57s
Bit rate mode : Constant
Bit rate : 64.0 Kbps
Channel(s) : 2 channels
Sampling rate : 44.1 KHz
Bit depth : 16 bits
Stream size : 20.6 MiB (14%)
Language : French
Fichier vérifié et bien complet en lecture
Alors pour ton resume qui ne se fait pas...
Il y a un stream qui n'est pas téléchargé par msdl :stream: application 0 RTP/AVP 96
d'où la différence de taille
Dernière modification par pascal92 (Le 03/08/2010, à 17:20)
Hors ligne