Eseguire i file video con il Componente gb.media

Da Gambas-it.org - Wikipedia.
Versione del 4 ott 2016 alle 18:15 di Vuott (Discussione | contributi) (Creata pagina con "Il componente '''gb.media''' offre la possibilità di sfruttare le funzionalità della piattaforma multimediale modulare ''GStreamer'' per la gestione di file video. Si potr...")

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Il componente gb.media offre la possibilità di sfruttare le funzionalità della piattaforma multimediale modulare GStreamer per la gestione di file video.

Si potrà scegliere se far mostrare il video in un controllo GUI (ad esempio una DrawingArea) posto sul Form, oppure in una finestra automaticamente aperta dalle risorse del componente gb.media. Nel caso si utilizzi una DrawingArea, bisogna impostare un qualsiasi colore la sua proprietà .Background.

Eseguire il video in uno specifico controllo GUI posto sul form

Nel seguente esempio il video verrà mostrato in all'interno di uno specifico controllo GUI (ad esempio una DrawingArea) posto sul Form:

Private mp As MediaPlayer
  

Public Sub Form_Open()

 Dim da As DrawingArea
     
' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:
  With da = New DrawingArea(Me)
    .X = 10
    .Y = 10
    .W = 300
    .H = 300
    .Background = Color.Black
  End With
 
  AvviaPlugin(da)
     
End


Private Procedure AvviaPlugin(drar As DrawingArea)
 
 Dim uscitaVideo As MediaControl
  
  mp = New MediaPlayer
  mp.URL = Media.URL("/percorso/del/file/video")
  
' Istanzia il controllo di uscita video da usare. In questo caso sarà "ximagesink",
' un "videosink" basato sullo standard X, e che è esso stesso un plug-in:
  uscitaVideo = New MediaControl(mp, "ximagesink")
 
' Imposta il controllo dell'uscita video da usare:
  uscitaVideo.SetWindow(drar)
  mp.Video.Output = uscitaVideo
  
End


Public Sub Form_Activate()
 
' Esegue il file video:
  mp.Play()
  
  Do
' Una brevissima pausa consente di mostrare e di agire sugli eventuali oggetti posti sul Form:
    Wait 0.01
    TextLabel1.Text = "\rDurata del video: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & "   -   Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000))
  Loop Until mp.Position >= mp.Duration
 
End

 
Public Sub Button1_Click()
  
  mp.Stop
  
End


Public Sub ToggleButton1_Click()
  
  If ToggleButton1.Value Then
    mp.Pause
  Else
    mp.Play
  Endif
  
End


Eseguire il video in una finestra automaticamente aperta da Gstreamer

E' possibile far mostrare il video in una finestra automaticamente aperta da Gstreamer all'esterno del Form. Ovviamente non verrà impostato alcuno specifico controllo grafico GUI.

Anche questa finestra, volendo, può essere gestita mediante le Classi Desktop e DesktopWindow attivando i componenti gb.desktop e gb.desktop.x11.

Mostriamo un semplice esempio in ambiente grafico:

Private mp As New MediaPlayer
  

Public Sub Form_Open()
  
  mp.URL = Media.URL("/percorso/del/file/video")
  
End


Public Sub Form_Activate()
  
' Esegue il video:
  mp.Play()
  
  Do
' Una brevissima pausa consente di agire sugli eventuali oggetti posti sul Form:
    Wait 0.01
    TextLabel1.Text = "\rDurata del video: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & "   -   Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000))
  Loop Until mp.Position >= mp.Duration
  
  mp.Stop
 
End


Public Sub Button1_Click()
  
  mp.Stop
  
End


Public Sub ToggleButton1_Click()
  
  If ToggleButton1.Value Then
    mp.Pause
  Else
    mp.Play
  Endif
  
End


Eseguire un video in un'applicazione a linea di comando

Vediamo ora un esempio, nel uale si eseguirà un video in un'applicazione a linea di comando:

Public Sub Main()
 
 Dim mp As New MediaPlayer

  mp.URL = Media.URL("/percorso/del/file/video")
  
' Esegue il brano:
  mp.Play()
  
  Do
    Write #File.Out, "\rDurata del video: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Duration * 1000)) & "   -   Tempo trascorso: " & CStr(Date(0, 0, 0, 0, 0, 0, mp.Position * 1000))
  Loop Until mp.Position >= mp.Duration
  
  mp.Stop
 
End