IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

lancer un lecteur vidéo


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut lancer un lecteur vidéo
    Bonjour à tous,
    Est - t'il possible à l'aide de python et sous linux, de lancer un lecteur vidéo ( par exemple xine ), et de piloter par exemple la naviguation de ce lecteur vidéo ( exemple : mettre en lecture, arrêter le lecteur...)
    Si oui comment procéder éventuellement..
    Merci d'avance
    a+

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 32
    Par défaut
    Il est possible d'intégrer un lecteur vidéo dans un programme python avec wxPython. Pour cela il suffit d'utiliser MediaCtrl.
    L'avantage est que vous contrôlez entièrement l'application car le lecteur multimédia est un composant de votre application.
    L'inconvénient est que vous devez utiliser et installer wxPython.

    Voici un exemple de démonstration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
     
    import wx
    import wx.media
    import os
     
    #----------------------------------------------------------------------
     
    class StaticText(wx.StaticText):
        """
        A StaticText that only updates the label if it has changed, to
        help reduce potential flicker since these controls would be
        updated very frequently otherwise.
        """
        def SetLabel(self, label):
            if label <> self.GetLabel():
                wx.StaticText.SetLabel(self, label)
     
    #----------------------------------------------------------------------
     
    class TestPanel(wx.Panel):
        def __init__(self, parent, log):
            self.log = log
            wx.Panel.__init__(self, parent, -1,
                              style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN)
     
            # Create some controls
            try:
                self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER,
                                             #szBackend=wx.media.MEDIABACKEND_DIRECTSHOW
                                             #szBackend=wx.media.MEDIABACKEND_QUICKTIME
                                             #szBackend=wx.media.MEDIABACKEND_WMP10
                                             )
            except NotImplementedError:
                self.Destroy()
                raise
     
            self.Bind(wx.media.EVT_MEDIA_LOADED, self.OnMediaLoaded)
     
            btn1 = wx.Button(self, -1, "Load File")
            self.Bind(wx.EVT_BUTTON, self.OnLoadFile, btn1)
     
            btn2 = wx.Button(self, -1, "Play")
            self.Bind(wx.EVT_BUTTON, self.OnPlay, btn2)
            self.playBtn = btn2
     
            btn3 = wx.Button(self, -1, "Pause")
            self.Bind(wx.EVT_BUTTON, self.OnPause, btn3)
     
            btn4 = wx.Button(self, -1, "Stop")
            self.Bind(wx.EVT_BUTTON, self.OnStop, btn4)
     
            slider = wx.Slider(self, -1, 0, 0, 0)
            self.slider = slider
            slider.SetMinSize((150, -1))
            self.Bind(wx.EVT_SLIDER, self.OnSeek, slider)
     
            self.st_size = StaticText(self, -1, size=(100,-1))
            self.st_len  = StaticText(self, -1, size=(100,-1))
            self.st_pos  = StaticText(self, -1, size=(100,-1))
     
     
            # setup the layout
            sizer = wx.GridBagSizer(5,5)
            sizer.Add(self.mc, (1,1), span=(5,1))#, flag=wx.EXPAND)
            sizer.Add(btn1, (1,3))
            sizer.Add(btn2, (2,3))
            sizer.Add(btn3, (3,3))
            sizer.Add(btn4, (4,3))
            sizer.Add(slider, (6,1), flag=wx.EXPAND)
            sizer.Add(self.st_size, (1, 5))
            sizer.Add(self.st_len,  (2, 5))
            sizer.Add(self.st_pos,  (3, 5))
            self.SetSizer(sizer)
     
            #self.DoLoadFile(os.path.abspath("data/testmovie.mpg"))
            wx.CallAfter(self.DoLoadFile, os.path.abspath("data/testmovie.mpg"))
     
            self.timer = wx.Timer(self)
            self.Bind(wx.EVT_TIMER, self.OnTimer)
            self.timer.Start(100)
     
     
     
        def OnLoadFile(self, evt):
            dlg = wx.FileDialog(self, message="Choose a media file",
                                defaultDir=os.getcwd(), defaultFile="",
                                style=wx.OPEN | wx.CHANGE_DIR )
            if dlg.ShowModal() == wx.ID_OK:
                path = dlg.GetPath()
                self.DoLoadFile(path)
            dlg.Destroy()
     
     
        def DoLoadFile(self, path):
            self.playBtn.Disable()
            #noLog = wx.LogNull()
            if not self.mc.Load(path):
                wx.MessageBox("Unable to load %s: Unsupported format?" % path,
                              "ERROR",
                              wx.ICON_ERROR | wx.OK)
            else:
                self.mc.SetInitialSize()
                self.GetSizer().Layout()
                self.slider.SetRange(0, self.mc.Length())
     
        def OnMediaLoaded(self, evt):
            self.playBtn.Enable()
     
        def OnPlay(self, evt):
            if not self.mc.Play():
                wx.MessageBox("Unable to Play media : Unsupported format?",
                              "ERROR",
                              wx.ICON_ERROR | wx.OK)
            else:
                self.mc.SetInitialSize()
                self.GetSizer().Layout()
                self.slider.SetRange(0, self.mc.Length())
     
        def OnPause(self, evt):
            self.mc.Pause()
     
        def OnStop(self, evt):
            self.mc.Stop()
     
     
        def OnSeek(self, evt):
            offset = self.slider.GetValue()
            self.mc.Seek(offset)
     
        def OnTimer(self, evt):
            offset = self.mc.Tell()
            self.slider.SetValue(offset)
            self.st_size.SetLabel('size: %s' % self.mc.GetBestSize())
            self.st_len.SetLabel('length: %d seconds' % (self.mc.Length()/1000))
            self.st_pos.SetLabel('position: %d' % offset)
     
        def ShutdownDemo(self):
            self.timer.Stop()
            del self.timer
     
    #----------------------------------------------------------------------
     
    def runTest(frame, nb, log):
        try:
            win = TestPanel(nb, log)
            return win
        except NotImplementedError:
            from Main import MessagePanel
            win = MessagePanel(nb, 'wx.MediaCtrl is not available on this platform.',
                               'Sorry', wx.ICON_WARNING)
            return win
     
     
    #----------------------------------------------------------------------
     
     
     
    overview = """<html><body>
    <h2><center>wx.MediaCtrl</center></h2>
     
    wx.MediaCtrl is a class that allows a way to convieniently display
    various types of media, such as videos, audio files, natively through
    native codecs.  Several different formats of audio and video files are
    supported, but some formats may not be playable on all platforms or
    may require specific codecs to be installed.
     
    <p>
    wx.MediaCtrl uses native backends to render media, for example on Windows
    there is a ActiveMovie/DirectShow backend, and on Macintosh there is a 
    QuickTime backend.
    <p>
    wx.MediaCtrl is not currently available on unix systems. 
     
    </body></html>
    """
     
     
     
    if __name__ == '__main__':
        import sys,os
        import run
        run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
    Sinon vous pouvez utiliser vlc (www.videolan.org) et le contrôler par une socket unix ou tcp (http://www.videolan.org/doc/play-how....html#id294146 -> RC/RTCI).

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 4
    Par défaut
    je suis moi-même en train de developer une application permettant de lire des flux videos. Je suis partie sur la GUI PyGTK et vlc comme lecteur.
    D'ailleurs vlc propose un python-bindings (http://wiki.videolan.org/Python_bindings). J'avoue que pour l'instant je ne l'utilise pas car je ne suis pas encore arrivé jusque là mais cela peut peut-être t'aider.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Par défaut
    Salut,
    oups ..j'ai faillit oublié de te remercier...mais tellement de choses en tête en ce moment..
    Merci pour ton code fabrice-102 ..

    J"'ai un tout petit peu testé l'autre jour le code...mais j'avais un message d'erreur..C'est peut être normal..n'étant pas un programmeur python..
    Mais je vais essayer de retester ce week end...et indiquerait le message d'erreur..

    En tous les cas ..encore merci
    a+

Discussions similaires

  1. Utiliser APN en lecteur vidéo, votre avis?
    Par dockurt2k dans le forum Vidéo
    Réponses: 3
    Dernier message: 09/09/2006, 11h21
  2. lecteur vidéo mais zone vidéo au premier plan
    Par Dsphinx dans le forum AWT/Swing
    Réponses: 20
    Dernier message: 12/08/2006, 19h07
  3. Choix du lecteur vidéo
    Par Xhéras dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 07/08/2006, 23h39
  4. format MPEG4 et lecteur vidéo
    Par zoidy dans le forum Vidéo
    Réponses: 4
    Dernier message: 02/06/2006, 10h45
  5. Lancer un fichier vidéo
    Par Arkadius dans le forum C++Builder
    Réponses: 2
    Dernier message: 30/09/2004, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo