Differenze tra le versioni di "Conoscere la durata di un file video mediante il Componente gb.media"

Da Gambas-it.org - Wikipedia.
 
(10 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per conoscere la durata di un file video, il Componente ''gb.media'' fornisce la proprietà .''Duration'' della Classe "''MediaPlayer''" e della Classe "''MediaPipeline''". In particolare questa proprietà restituisce un valore di tipo ''Float'' che rappresenta la durata del video espresso in secondi.
+
Per conoscere la durata di un file video, il Componente ''gb.media'' fornisce la Proprietà ".Duration" della Classe ''MediaPlayer'' e della Classe ''MediaPipeline''. In particolare questa proprietà restituisce un valore di tipo ''Float'' che rappresenta la durata del video espresso in secondi.
  
Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione della funzione ''.Play( )'' .
+
Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione del Metodo ".Play()".
  
 
Mostriamo alcune modalità.
 
Mostriamo alcune modalità.
Riga 7: Riga 7:
 
==Uso della Classe "MediaPlayer"==
 
==Uso della Classe "MediaPlayer"==
 
Questa modalità utilizza la sola Classe ''MediaPlayer'':
 
Questa modalità utilizza la sola Classe ''MediaPlayer'':
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
   Dim mp As MediaPlayer
 
   Dim mp As MediaPlayer
 
+
 
 
   With mp = New MediaPlayer
 
   With mp = New MediaPlayer
     .URL = Media.URL("<FONT Color=gray>''/percorso/del/file/video''</font>")
+
     .URL = Media.URL ("<FONT Color=darkgreen>''/percorso/del/file/video''</font>")
    .Play
+
<FONT Color=gray>' ''E' opportuno anteporre la Proprietà ".Video.Enabled =  False" prima del Metodo ".Play()", per impedire che appaia per un attimo la finestra del video:''</font>
 
     .Video.Enabled = False
 
     .Video.Enabled = False
  End With
 
 
 
  Repeat
 
    Sleep 0.01
 
  Until mp.Duration > 0
 
 
 
  Print "Durata del video: " & CStr(Time(0, 0, 0, mp.Duration * 1000))
 
 
 
  mp.Stop
 
  mp.Close
 
 
 
'''End'''
 
 
 
==Uso delle Classi "MediaPlayer" e "MediaControl"==
 
Questa modalità utilizza le Classi ''MediaPlayer'' e ''MediaControl'':
 
'''Public''' Sub Main()
 
 
 
  Dim mp As New MediaPlayer
 
  Dim uscitaVideo As MediaControl
 
 
 
<FONT Color=gray>' ''Utilizza il plug-in "fakesink" per impedire che sia mostrata una finestra con il video:''</font>
 
  uscitaVideo = New MediaControl(mp, "fakesink")
 
 
 
  With mp = New MediaPlayer
 
   
 
<FONT Color=gray>' ''Imposta gli effetti del plug-in "fakesink" come uscita video:''</font>
 
    .Video.Output = uscitaVideo 
 
    .URL = Media.URL  ("<FONT Color=gray>''/percorso/del/file/video''</font>")
 
 
     .Play
 
     .Play
    .Video.Enabled = False
 
 
     Repeat   
 
     Repeat   
       Sleep 0.01
+
       Wait 0.01
     Until .Duration > 0
+
     Until .Duration > 0.0
 
      
 
      
     Print "Durata del video: " & CStr(Time(0, 0, 0, .Duration * 1000))
+
     Print "Durata del video: " & Str(Time(0, 0, 0, .Duration * 1000))
 
     .Stop
 
     .Stop
 
     .Close
 
     .Close
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
 
  
 
==Uso delle Classi "MediaPipeline" e "MediaControl"==
 
==Uso delle Classi "MediaPipeline" e "MediaControl"==
Questa modalità utilizza le Classi ''MediaPipeline'' e ''MediaControl'':
+
Questa modalità utilizza le Classi ''MediaPipeline'' e ''MediaControl''.
'''Public''' Sub Main()
+
<BR>In particolare usa il plugin ''decodebin'' di GStreamer.
 +
Public Sub Main()
 
    
 
    
 
   Dim pl As New MediaPipeline
 
   Dim pl As New MediaPipeline
   Dim src, bin, vid, vsk As MediaControl
+
   Dim src, bin, vid, fsk As MediaControl
 
   Dim filevideo As String
 
   Dim filevideo As String
 
    
 
    
   filevideo = "<FONT Color=gray>''/percorso/del/file/video''</font>"
+
   filevideo = "<FONT Color=darkgreen>''/percorso/del/file/video''</font>"
 
   
 
   
 
   pl = New MediaPipeline
 
   pl = New MediaPipeline
Riga 74: Riga 44:
 
   bin = New MediaControl(pl, "decodebin")
 
   bin = New MediaControl(pl, "decodebin")
 
   vid = New MediaControl(pl, "videoconvert")
 
   vid = New MediaControl(pl, "videoconvert")
   vsk = New MediaControl(pl, "autovideosink")
+
   fsk = New MediaControl(pl, "fakesink")   <FONT Color=gray>' ''Impedisce che si apra anche solo per un attimo la finestra del video''</font>
 
    
 
    
 
   src.LinkTo(bin)
 
   src.LinkTo(bin)
 
   bin.LinkLaterTo(vid)
 
   bin.LinkLaterTo(vid)
   vid.LinkTo(vsk)
+
   vid.LinkTo(fsk)
 
    
 
    
 
   pl.Play
 
   pl.Play
 
    
 
    
   Repeat 
+
   While pl.Duration < 0.1
 
     Wait 0.01
 
     Wait 0.01
   Until pl.Duration > 0
+
   Wend
 
    
 
    
 
   Print "File video: "; filevideo
 
   Print "File video: "; filevideo
   Print "\nDurata:  \e[31m" & CStr(Time(0, 0, 0, pl.Duration * 1000))
+
   Print "\nDurata:  \e[31m" & Str(Time(0, 0, 0, pl.Duration * 1000))
 
    
 
    
 
   pl.Stop
 
   pl.Stop
 
   pl.Close
 
   pl.Close
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 04:07, 16 nov 2023

Per conoscere la durata di un file video, il Componente gb.media fornisce la Proprietà ".Duration" della Classe MediaPlayer e della Classe MediaPipeline. In particolare questa proprietà restituisce un valore di tipo Float che rappresenta la durata del video espresso in secondi.

Poiché tale proprietà ritorna più precisamente la durata dei dati processati, essa potrà essere utilizzabile solo successivamente all'attivazione del Metodo ".Play()".

Mostriamo alcune modalità.

Uso della Classe "MediaPlayer"

Questa modalità utilizza la sola Classe MediaPlayer:

Public Sub Main()
 
 Dim mp As MediaPlayer
  
 With mp = New MediaPlayer
   .URL = Media.URL  ("/percorso/del/file/video")
' E' opportuno anteporre la Proprietà ".Video.Enabled =  False" prima del Metodo ".Play()", per impedire che appaia per un attimo la finestra del video: 
   .Video.Enabled = False
   .Play
   Repeat   
     Wait 0.01
   Until .Duration > 0.0
    
   Print "Durata del video: " & Str(Time(0, 0, 0, .Duration * 1000))
   .Stop
   .Close
 End With
  
End

Uso delle Classi "MediaPipeline" e "MediaControl"

Questa modalità utilizza le Classi MediaPipeline e MediaControl.
In particolare usa il plugin decodebin di GStreamer.

Public Sub Main()
 
 Dim pl As New MediaPipeline
 Dim src, bin, vid, fsk As MediaControl
 Dim filevideo As String
 
 filevideo = "/percorso/del/file/video"

 pl = New MediaPipeline
 
 src = New MediaControl(pl, "filesrc")
 src["location"] = filevideo
 bin = New MediaControl(pl, "decodebin")
 vid = New MediaControl(pl, "videoconvert")
 fsk = New MediaControl(pl, "fakesink")   ' Impedisce che si apra anche solo per un attimo la finestra del video
 
 src.LinkTo(bin)
 bin.LinkLaterTo(vid)
 vid.LinkTo(fsk)
 
 pl.Play
 
 While pl.Duration < 0.1
   Wait 0.01
 Wend
 
 Print "File video: "; filevideo
 Print "\nDurata:   \e[31m" & Str(Time(0, 0, 0, pl.Duration * 1000))
 
 pl.Stop
 pl.Close
 
End