Streaming Avec Progdvb


Messages recommandés

Salut livedraz,

J'ai aussi quelques fois le même problème, il faudrait en fait apporter quelques modifs au script python, entre autre un bouton permettant de lire le flux en cours. Je suis en train de me plonger dans python pour voir ça et le résultat ne devtrait pas tarder ^_^

En fait quand on sélectionne une chaine, MyTheatre zap et, comme les autres softs que j'ai pu essayer, c'est assez long (surtour si c'est une chaine à deshtroumfer), du coup time out et paf retour a la liste. Pour résoudre, une foi le zap ok, il faut ouvrir le lien strm (hors du script :( ) et ça fonctionne.

Lien vers le commentaire
Partager sur d'autres sites

  • Réponses 64
  • Created
  • Dernière réponse

Top Posters In This Topic

Content de t'entendre Gloup !

Le probleme exact en fait, c'est que dans un meme dossier de favoris (par exemple "Chaines Commerciales") une seule chaine fonctionne, celle que j'ouvre en premier en fait. Pour faire fonctionner les autres, je suis obligé de sortir du dossier en question, et ouvrir une autre chaine dans un autre dossier (genre "Sport") et de revenir dans le premier dossier ou je peux ouvrir une nouvelle chaine.

Mais bien sur, si je ferme la chaine je doit repartir ouvrir une chaine dans un autre dossier pour pouvoir zapper ...

(Pas a chaque fois, mais beaucoup trop souvent)

Bon c'est compliqué a expliquer et pas tres chouette a l'utilisation ...

J'hesite quand meme a me lancer dans le python ... ca mort non ?

Modifié par livedraz
Lien vers le commentaire
Partager sur d'autres sites

Voila le script MyTheatre avec les ptites modifs dont je parlais.

- frenchisation

- un bouton pour lire l'emission en cours, ne change pas de chaine

- en bonus, gestion des touches num de la télécommande pour aller directement sur les chaines préférées (TF1:1,Antenne2:2...etc). Bien sure il faut modifier avant le script car je doute que le chID soit le même chez vouz

:P

MyTheatre_1.0a.py

Modifié par gloup
Lien vers le commentaire
Partager sur d'autres sites

Je viens de telecharger ton script, je vais tester ca de suite ...

Mon probleme precisement c'est que en fait quand je dis qu'une chaine ne marche pas, elle s'ouvre pendant qq centiemes de secondes, juste le temps de voir un ecran et d'entendre un son.

J'ai mis le fichier strm donc la je peux pas tester ^_^

Mais il est tres possible que ce soit un probleme de timeout en fait car en insistant avec ton bouton 'emission en cours' ca passe ...

Edit :

Bon je viens de modifier, puis tester ton script ... conclusion il est d'enfer !

T'es trop fort dans le python, moi il veux me mordre :D

Nickel aussi la fonction 'emission en cours' ! Je vais essayer d'y attribuer un bouton direct de la telecommande !!

Mais bon j'ai quand meme 2 petites choses ...

- C'est dommage qu'on ne puisse pas changer de chaine alors qu'on est en traind 'en regarder une.

Je m'explique: on doit faire STOP puis taper le nouveau numero de chaine ...

Je pense que lorsque la video est en plein ecran, le script s'arrete, et le fait de faire stop relance le script ... me trompe-je ?

Car l'appuye sur les boutons nums agit comme dans la fonction 'Fullscreen Video specific actions'

- heuuuu ... ben je me rappelle plus la deuxieme ... j'etais tellement concentré sur la premiere ... si oui ... quid de la perte de la chaine (elle s'etaind) au bout d'un moment ...

Merci a toi quand meme pour tout :ok:

Modifié par livedraz
Lien vers le commentaire
Partager sur d'autres sites

wwwooaaww... ma xbox fait décodeur satélite  :marteau:

Jusqu'a présent j'utilisais le fameux progdvb pour zieuter la télé, ripper mes emissions préférées (pas les tv reality  :prout: ) etc. Et je viens de découvrir MyTheatre  wow

Pour résumer l'affaire, mytheatre couplé au plugin A/V broadcaster permet d'envoyer le flux DVB sur le réseau, et il sait transformé tout ça en flus XNS, HTTP, RTP, UDP... rien que ça. Y'a plein d'autre logiciel de streamer me direz-vous qui le font, vlc par exemple est très bien (light et efficace, on y reviendra).

Le GRRROOOSSSS avantage d'A/V broadcaster c'est qu'il sait récupéré le flus DVB en entrée. Malheureusement il ne fonctionne pas avec progdvb, mais qu'a cela ne tienne, mytheatre est aussi bien voir mieux  :D

Pour en revenir à vlc, l'interet (et pas minime svp) c'est qu'il peut transcoder le flux et l'envoyer.. sur le net.

Quand j'aurais un GRRROOOSSS tuyaud en upload, je pourrais vous envoyer la télé een live  :lol:  (ptetre qu'y en a qui seront pas d'accord !! sick , mais y z'ont anticipé la redevence se paye maintenant avec la taxe d'hab ) :fouf:

Bon j'ai passé ma soiré, je vais allé me coucher, en plus j'dis des conneries  sick

Pour être plus concret et motiver ceux qui sont équipé en carte sat :

Dans xboxmediacenter.xml

  <video>

    <bookmark>

     <name>Satélite XNS</name>

       <path>xns://adresse.du.pc:1400/</path>

    </bookmark>

  </video>

ça permet de zapper dans la liste des chaines favorites organiées par thème dans mytheatre.

ensuite il faut rajouter un liens (fichier.strm) dans vidéo avec ça dedans

http://adresse.du.pc:8000/dvbcore.mpg

On clic, ça charge a 200 a l'heure et la télé arrive :0

L'image est... ben numérique... au top, le son pareil :ok:

Bien sure il faut lancer Mytheatre sur le pc, pour un non initier à la carte sat c'est pas forcement de la tarte malgrès une nette amélioration par rapport à progdvb.<_<

Encore un bémole, c'est pour zapper, faut aller sur le partage XNS, choisir ça chaine puis revenir cliquer le lien strm ??

faut qu'on s'y mette a plusieurs, j'aimerais bien avoir des echos.

Tout les softs nécessaire sont sur le site de MyTheatre

est-ce que ca veut dire que tu capte les chaines classiques (tf1, frtv, eurosport, chaines cinéma, chaines série télé?

si oui donne nous la config complete en lien ou autre maniere de ton choix.

merci a toi

Lien vers le commentaire
Partager sur d'autres sites

Ben tu captes toutes les chaines du sat ...

et la config complete pour faire ca :

legalement il te faut

un pc :)

une carte sat

un abonnement sat

une parabole

sinon, j'ai entendu dire qu'il y aurait des gars qui feraient ca sans abonnement sat ...

et pour faire ca sur la xbox, il te faut en plus une xbox modée, en reseau avec le pc.

et tous les softs qui vont bien ...

(pc: mytheatre avec plug avbroadcaster, et xbox: xbmc avec script mytheatre.py)

@ Gugud (et aux autres utilisateurs)

Gloup viens de rajouter sur son site les etapes pour l'ajout d'un bouton dans xbmc pour lancer le script sans entrer dans les menus ...

c'est par ici : http://gloup.9online.fr/Tutos/

Modifié par livedraz
Lien vers le commentaire
Partager sur d'autres sites

Merci de ta réponse.

si tu as plus d'info sur la facon de capter les chaines avec box modée, hésite pas, on est preneur

ps : je cherche toujours a pouvoir capter eurosport par voie "classic" (stream)

je sais que c tres dur a trouver mais je ne desespere pas, ca doit surement exister.

Lien vers le commentaire
Partager sur d'autres sites

Merci pour ton script gloup, mais il veut pas marcher chez moi, car il trouve pas le liste des chaînes alorsqu'avec le script original de marplar, ça fonctionne. Je vois vraiment pas ou est le pb. Je vois nullepart dans le script un lien pointant vers une liste de chaînes.

Merci de m'aider.

Lien vers le commentaire
Partager sur d'autres sites

bha va falloir te mettre au python :fouf:

J'ose pas poser des questions bête comme ; as-tu modifier la variable URL au début du scripte ?

Franchement vu les modifications que j'ai fait ('ad rien au niveau accé http) je vois pas !

Lien vers le commentaire
Partager sur d'autres sites

  • 2 weeks later...

j'ai mis a off le screen saver sur xbmc cependant j'ai toujours le probleme sick

de plus ca arrive aleatoirement :(

que puis je vous donner comme info pour resoudre ce probleme !!!!

xbox 1.6

kernel 5838

xbmc du 1/12/2004

avec codec mplayer de la version xbmc du 23/11/2003

mytheatre 3.20.2 + a/v broadcast 0.12

voici le script mytheatre 1.0a.PY

#MyTheatre Python client for XBMC

#Version 1.0 by marplar

#Translate dialog and add little features by gloup v1.0a

############################################################

#Set the IP and port for the computer running MyTheatre here

URL = 'http://192.168.0.3:8000'

############################################################

import urllib, time, xbmc, xbmcgui

# Gestion de l'emulation

try:Emulating = "Emulating" in dir(xbmcgui)

except:Emulating = False

from HTMLParser import HTMLParser

#get actioncodes from keymap.xml

ACTION_PREVIOUS_MENU = 10

ACTION_SELECT_ITEM = 7

ACTION_REMOTE_BUTTON_0                  = 58

ACTION_REMOTE_BUTTON_1                  = 59

ACTION_REMOTE_BUTTON_2                  = 60

ACTION_REMOTE_BUTTON_3                  = 61

ACTION_REMOTE_BUTTON_4                  = 62

ACTION_REMOTE_BUTTON_5                  = 63

ACTION_REMOTE_BUTTON_6                  = 64

ACTION_REMOTE_BUTTON_7                  = 65

ACTION_REMOTE_BUTTON_8                  = 66

ACTION_REMOTE_BUTTON_9                  = 67

ACTION_PLAY_MUSIC                       = 79

#Reads AVBroadcaster web page and creates list of favorite groups or channels

class MyParser(HTMLParser):

    #Read tag

    def handle_starttag(self, tag, attrs):

        #Create dictionary of tag attributes

        attrdict=dict(attrs)

        if tag == 'html':

            #Initialse list

            self.parselist = []

            self.chtype = ''

        elif tag == 'a':

            #Hyperlink tag - get link

            self.href=attrdict['href']

        elif tag == 'td' and len(attrdict) == 2 and self.tag == 'tr':

            #Table tag - check colour to determine if encrypted

            if attrdict['bgcolor'] == '#00BF00':

                self.encrypt = ' '

            else:

                self.encrypt = '!'

        #Store tag type

        self.tag=tag

    #Read data (outside tag)  

    def handle_data(self,data):

        if self.tag == 'title':

            #Add title to list

            self.parselist.append(['Title', data])

            #Store title to determine if page is favorite group list or channels

            self.title = data

        elif self.tag == 'center':

            #Get channel type (V/R) and add to encrypted flag (!/ )

            self.chtype=data + self.encrypt + ' '

        elif self.tag == 'a':

            #Hyperlink data

            if self.href[:16] == '/list.htm?favid=':

                #Link is for favorite lists

                if data[:9] == 'Next page' and len(self.parselist) > 10:

                    #Add next page link to list

                    self.parselist.append(['NextPage', data, self.href])

                elif self.title == 'Favorite groups list':

                    # Add favorite group name and link to list

                    self.parselist.append(['FavList', data, self.href])

            elif self.href[:17] == '/set_ch.htm?chid=':

                #Link is for channel

                self.parselist.append(['Channel', self.chtype + data,self.href])

    def close(self):

        #Return list to caller

        return self.parselist

        self.close()

       

class MyClass(xbmcgui.Window):

    def __init__(self):

        if Emulating:xbmcgui.Window.__init__(self)

        #Set default mode

        self.TVRadioMode = 'TV et Radio'

        self.EncryptMode = 'Toutes les chaines'

        self.TVMode = 'Emission en cours'

        #Set up screen

        self.addControl(xbmcgui.ControlImage(0,0,800,600, 'background.png'))

        self.addControl(xbmcgui.ControlLabel(50, 100, 10, 100, 'my', 'font14', '0xFFFF2000'))

        self.addControl(xbmcgui.ControlLabel(75, 100, 100, 100, 'Theatre', 'font14', '0xFF000000'))

        self.strTitle = xbmcgui.ControlLabel(300, 50, 200, 200, '', 'font14', '0xFFA5FF00')

        self.addControl(self.strTitle)

        self.butTVRadio = xbmcgui.ControlButton(50, 200, 180, 35, self.TVRadioMode, 'button-focus.png', 'button-nofocus.png')

        self.addControl(self.butTVRadio)

        self.butEncrypt = xbmcgui.ControlButton(50, 260, 180, 35, self.EncryptMode, 'button-focus.png', 'button-nofocus.png')

        self.addControl(self.butEncrypt)

        self.butTV = xbmcgui.ControlButton(50, 320, 180, 35, self.TVMode, 'button-focus.png', 'button-nofocus.png')

        self.addControl(self.butTV)

        self.list = xbmcgui.ControlList(300, 100, 300, 400)

        self.addControl(self.list)

        self.list.controlLeft(self.butTVRadio)

        self.butTVRadio.controlRight(self.list)

        self.butTVRadio.controlDown(self.butEncrypt)

        self.butEncrypt.controlUp(self.butTVRadio)

        self.butEncrypt.controlDown(self.butTV)

        self.butEncrypt.controlRight(self.list)

        self.butTV.controlUp(self.butEncrypt)

        self.butTV.controlRight(self.list)

        #Get favorites group list

        self.MyParser=MyParser()

        self.file = '/list.htm'

        self.ParseList(URL)

        self.setFocus(self.butTV)

    #Read html page

    def GetList(self,URL,file):

        opener = urllib.FancyURLopener({})

        try:

            doc = opener.open(URL + file)

            webpage = doc.read()  # read file

            doc.close()

            self.MyParser.feed(webpage)

            listings=self.MyParser.close()

            return listings                     

        except:

            self.message('Liste des chaines introuvable')

            return ' '

    #Check if stream is being received

    def TestChannel(self, URL):

        opener = urllib.FancyURLopener({})

        try:

            doc = opener.open(URL + '/dvbcore.mpg')

            datacount = len(doc.readline())

            doc.close

            if datacount > 0:

                return 'OK'

            else:

                return ' '

        except:

            return ' '

                  

    #Display Listing

    def ParseList(self,URL):

        #Get listings

        self.listings =self.GetList(URL,self.file)

        #Check if list is complete

        while self.listings[len(self.listings)-1][0] == 'NextPage':

            nextpage = self.GetList(URL, self.listings[len(self.listings)-1][2])

            self.listings.pop(len(self.listings)-1)   #Remove NextPage from original list

            nextpage.pop(0)         #Remove Title from extended list

            self.listings.extend(nextpage)   #Join original and extended lists

        #Filter Channels to show TV/Radio and FTA/Encryted

        count = 0

        while count < len(self.listings):

            if self.listings[count][0] == 'Channel':

                if self.ParseCheckMode(self.listings[count][1]) == 0:

                    self.listings.pop(count)

                else:

                    count = count + 1

            else:

                count = count + 1

        #Populate list

        self.list.reset()

        for listing in self.listings:

                if listing[0] == 'Title':

                    self.strTitle.setLabel(listing[1])

                else:

                    self.list.addItem(listing[1])

       

      

    #Check Channel to show TV/Radio and FTA/Encryted

    def ParseCheckMode(self, listing):

        if self.TVRadioMode == 'TV' and listing[0:1] <> 'V':

            return 0

        elif self.TVRadioMode == 'Radio' and listing[0:1] <> 'R':

            return 0

        elif self.EncryptMode == 'chaines cryptees' and listing[1:2] =='!':

            return 0

        elif self.TVRadioMode == 'TV et Radio':

            if listing[0:1] <> 'V' and listing[0:1] <> 'R':

                return 0

            else:

                return 1

       

    #Handle user input              

    def onControl(self, control):

        if control == self.list:

            #User selected group/channel list

            try:

                listingspos = self.list.getSelectedPosition()+1

                if self.listings[listingspos][0] == 'Channel':

                    #User selected channel change

                    dialog = xbmcgui.DialogProgress()

                    dialog.create('MyTheatre', 'Recherche ' +  self.listings[listingspos][1][3:])

                    self.GetList(URL, self.listings[listingspos][2])

                    searchpos = 0

                    #Wait for stream to be detected

                    while searchpos <= 95 and dialog.iscanceled() == 0 and self.TestChannel(URL) != 'OK':

                        searchpos = searchpos + 5

                        dialog.update(searchpos)

                        time.sleep(1)

                   

                    if searchpos < 100 and dialog.iscanceled() == 0:

                        #Play stream

                        dialog.close()

                        xbmc.Player().play(URL + '/dvbcore.mpg')

                    elif dialog.iscanceled() == 0:

                        #Time out

                        dialog.close()

                        self.message("Chaine non decryptable ou pas d'emission")

                    else:

                        #User cancelled

                        dialog.close()

                else:

                    #User selected group list

                    self.file = self.listings[self.list.getSelectedPosition()+1][2]

                    self.ParseList(URL)

            except:

                self.message('Erreur au changement de chaine.')

               

        elif control == self.butTVRadio:

            #User selected TV/Radio mode button - toggle button and display list

            if self.TVRadioMode == 'TV et Radio':

                self.TVRadioMode = 'TV'

            elif self.TVRadioMode == 'TV':

                self.TVRadioMode = 'Radio'

            else:

                self.TVRadioMode = 'TV et Radio'

            self.butTVRadio.setLabel(self.TVRadioMode)

            self.ParseList(URL)

           

        elif control == self.butEncrypt:

            #User selected Encrypt mode button - toggle button and display list

            if self.EncryptMode == 'Toutes les chaines':

                self.EncryptMode = 'Chaines cryptess'

            else:

                self.EncryptMode = 'Toutes les chaines'

            self.butEncrypt.setLabel(self.EncryptMode)

            self.ParseList(URL)

        elif control == self.butTV:

            #User selected Play Stream - toggle button and play stream

            xbmc.Player().play(URL + '/dvbcore.mpg')

            print 'Lecture du stream'

           

    def onAction(self, action):

        #User selected back - show favourite groups or exit

            print str(action)

            if action == ACTION_PREVIOUS_MENU:

                if self.listings[1][0] == 'Channel':

                    self.file = '/list.htm'

                    self.ParseList(URL)

                    self.setFocus(self.list)

                else:

                    self.close()

############################################################

#Set the ID and Name for the prefered channel here (gloup) #

############################################################

        #User selected direct access channel - switch to define key/channel

            if action == ACTION_REMOTE_BUTTON_1:

                chaine = ('/set_ch.htm?chid=3432','TF1')

            if action == ACTION_REMOTE_BUTTON_2:

                chaine = ('/set_ch.htm?chid=93','France 2')

            if action == ACTION_REMOTE_BUTTON_3:

                chaine = ('/set_ch.htm?chid=95','France 3')

            if action == ACTION_REMOTE_BUTTON_4:

                chaine = ('/set_ch.htm?chid=2944','Canal +')

            if action == ACTION_REMOTE_BUTTON_5:

                chaine = ('/set_ch.htm?chid=92','France 5')

            if action == ACTION_REMOTE_BUTTON_6:

                chaine = ('/set_ch.htm?chid=3429','M6')

            if action >= 58 and  action  <= 67:

                #User selected channel change

                dialog = xbmcgui.DialogProgress()

                dialog.create('MyTheatre', 'Recherche ' +  chaine[1])

                self.GetList(URL, chaine[0])

                searchpos = 0

                #Wait for stream to be detected

                while searchpos <= 95 and dialog.iscanceled() == 0 and self.TestChannel(URL) != 'OK':

                    searchpos = searchpos + 5

                    dialog.update(searchpos)

                    time.sleep(1)

                if searchpos < 100 and dialog.iscanceled() == 0:

                    #Play stream

                    dialog.close()

                    xbmc.Player().play(URL + '/dvbcore.mpg')

                elif dialog.iscanceled() == 0:

                    #Time out

                    dialog.close()

                    self.message("Chaine non decryptable ou pas d'emission")

                else:

                    #User cancelled

                    dialog.close()

            

    #Display message

    def message(self, message):

            dialog = xbmcgui.Dialog()

            dialog.ok(" MyTheatre", message)

###############

#Main    

###############

mydisplay = MyClass()

mydisplay.doModal()

del mydisplay

   

Modifié par cr8825
Lien vers le commentaire
Partager sur d'autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Share

Annonces