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

Da Gambas-it.org - Wikipedia.
Riga 44: Riga 44:
 
   bin = New MediaControl(pl, "decodebin")
 
   bin = New MediaControl(pl, "decodebin")
 
   vid = New MediaControl(pl, "videoconvert")
 
   vid = New MediaControl(pl, "videoconvert")
   fsk = New MediaControl(pl, "fakesink")  <FONT Color=gray>''Impedisce che si apra anche solo per un attimo la finestre del video''</font>
+
   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)

Versione delle 00:20, 8 ott 2022

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

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
 
 Repeat   
   Wait 0.01
 Until pl.Duration > 0
 
 Print "File video: "; filevideo
 Print "\nDurata:   \e[31m" & Str(Time(0, 0, 0, pl.Duration * 1000))
 
 pl.Stop
 pl.Close
 
End