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

Da Gambas-it.org - Wikipedia.
Riga 18: Riga 18:
 
    
 
    
 
   Repeat
 
   Repeat
     Sleep 0.01
+
     Wait 0.01
 
   Until mp.Duration > 0
 
   Until mp.Duration > 0
 
    
 
    
Riga 47: Riga 47:
 
     .Video.Enabled = False
 
     .Video.Enabled = False
 
     Repeat   
 
     Repeat   
       Sleep 0.01
+
       Wait 0.01
 
     Until .Duration > 0
 
     Until .Duration > 0
 
      
 
      

Versione delle 14:52, 16 set 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 della funzione .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")
   .Play
   .Video.Enabled = False
 End With
  
 Repeat
   Wait 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
 
' Utilizza il plug-in "fakesink" per impedire che sia mostrata una finestra con il video:
 uscitaVideo = New MediaControl(mp, "fakesink")
  
 With mp = New MediaPlayer
   
' Imposta gli effetti del plug-in "fakesink" come uscita video:
   .Video.Output = uscitaVideo  
   .URL = Media.URL  ("/percorso/del/file/video")
   .Play
   .Video.Enabled = False
   Repeat   
     Wait 0.01
   Until .Duration > 0
    
   Print "Durata del video: " & CStr(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:

Public Sub Main()
 
 Dim pl As New MediaPipeline
 Dim src, bin, vid, vsk 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")
 vsk = New MediaControl(pl, "autovideosink")
 
 src.LinkTo(bin)
 bin.LinkLaterTo(vid)
 vid.LinkTo(vsk)
 
 pl.Play
 
 Repeat   
   Wait 0.01
 Until pl.Duration > 0
 
 Print "File video: "; filevideo
 Print "\nDurata:   \e[31m" & CStr(Time(0, 0, 0, pl.Duration * 1000))
 
 pl.Stop
 pl.Close
 
End