Differenze tra le versioni di "Catturare il video riprodotto in un Controllo MediaView del componente gb.media"

Da Gambas-it.org - Wikipedia.
 
(Nessuna differenza)

Versione attuale delle 01:45, 3 lug 2024

Di seguito mostriamo un possibile codice per catturare il video (solo il video, senza audio) riprodotto in un Controllo MediaView del Componente gb.media. Da questi dati catturati verrà poi creato un file video in formato "Matroska".

Il Controllo MediaView è composto da "Figli" (Children) e "sotto-figli" (...nipoti).

Uno di questi "sotto-figli" è una DrawingArea, che è l'Oggetto grafico con cui il Controllo MediaView visualizza immagini e video.

Individueremo, dunque, il numero di identificazione di questa DrawingArea, costitutiva del Controllo MediaView, e con una particolare Proprietà del plugin "ximagesrc" cattureremo il video che essa mostra.
Si utilizzeranno le Classi MediaControl e MediaPipeline del Componente gb.media .

Assicurarsi che siano installati nel proprio sistema i seguenti plugin di GStreamer:

  • gstreamer1.0-plugins-good
  • gstreamer1.0-plugins-bad
  • gstreamer1.0-plugins-ugly
  • gst-libav

Creare un file video MP4

Event Evento


Public Sub Form_Open()

 Me.Show
 Wait 0.1

 MediaView1.URL = "/percorso/del/file/video/da/catturare"

 Repeat 
    Wait 0.01
 Until MediaView1.Position > 0.0
  
 Raise Evento

End


Public Sub Form_Evento()
 
 Dim ob As Object
 Dim pn1, pn2 As Panel
 Dim DrawingArea1 As DrawingArea
 Dim pl As MediaPipeline
 Dim src, cnv, enc, mux, snk As MediaControl
 
' Individua la "DrawingArea", "nipote" del Controllo "MediaView":
 ob = MediaView1.Children[0]
 pn1 = ob.Children[0]
 pn2 = pn1.Children[0]
 DrawingArea1 = pn2.Children[0]

 pl = New MediaPipeline 
 
 src = New MediaControl(pl, "ximagesrc")
' Assegna alla Proprietà "xid" il numero di identificazione della "DrawingArea":
 src["xid"] = DrawingArea1.Id
 cnv = New MediaControl(pl, "videoconvert")
 enc = New MediaControl(pl, "x264enc")
 enc["pass"] = 5
 enc["quantizer"] = 26
 enc["speed-preset"] = 6
 mux = New MediaControl(pl, "mp4mux")
 mux["fragment-duration"] = 2048
 snk = New MediaControl(pl, "filesink")
' Imposta il percorso del file finale avente formato MP4:
 snk["location"] = "/tmp/video.mp4"

' Collega i plugin di "GStreamer", per creare la pipeline:
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

 pl.play

 Wait MediaView1.Duration
  
 Print "File video MP4 creato !"

End

Creare un file video Matroska

Event Evento


Public Sub Form_Open()

 Me.Show
 Wait 0.1

 MediaView1.URL = "/percorso/del/file/video/da/catturare"

 Repeat 
    Wait 0.01
 Until MediaView1.Position > 0.0
  
 Raise Evento

End


Public Sub Form_Evento()
 
 Dim ob As Object
 Dim pn1, pn2 As Panel
 Dim DrawingArea1 As DrawingArea
 Dim pl As MediaPipeline
 Dim src, cnv, enc, mux, snk As MediaControl
 
' Individua la "DrawingArea", "nipote" del Controllo "MediaView":
 ob = MediaView1.Children[0]
 pn1 = ob.Children[0]
 pn2 = pn1.Children[0]
 DrawingArea1 = pn2.Children[0]

 pl = New MediaPipeline 
 
 src = New MediaControl(pl, "ximagesrc")
' Assegna alla Proprietà "xid" il numero di identificazione della "DrawingArea":
 src["xid"] = DrawingArea1.Id
 cnv = New MediaControl(pl, "videoconvert")
 enc = New MediaControl(pl, "x264enc")
 mux = New MediaControl(pl, "matroskamux") 
 snk = New MediaControl(pl, "filesink")
' Imposta il percorso del file finale avente formato mkv (Matroska):
 snk["location"] = "/tmp/video.mkv"

' Collega i plugin di "GStreamer", per creare la pipeline:
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

 pl.play

 Wait MediaView1.Duration
  
 Print "File video mkv creato !"

End

Creare un file video OGV-Theora

Event Evento


Public Sub Form_Open()

 Me.Show
 Wait 0.1

 MediaView1.URL = "/percorso/del/file/video/da/catturare"

 Repeat 
    Wait 0.01
 Until MediaView1.Position > 0.0
  
 Raise Evento

End


Public Sub Form_Evento()
 
 Dim ob As Object
 Dim pn1, pn2 As Panel
 Dim DrawingArea1 As DrawingArea
 Dim pl As MediaPipeline
 Dim src, cnv, enc, mux, snk As MediaControl
 Dim flt As MediaFilter
 
' Individua la "DrawingArea", "nipote" del Controllo "MediaView":
 ob = MediaView1.Children[0]
 pn1 = ob.Children[0]
 pn2 = pn1.Children[0]
 DrawingArea1 = pn2.Children[0]

 pl = New MediaPipeline 
 
 src = New MediaControl(pl, "ximagesrc")
' Assegna alla Proprietà "xid" il numero di identificazione della "DrawingArea":
 src["xid"] = DrawingArea1.Id
 cnv = New MediaControl(pl, "videoconvert")
 flt = New MediaFilter(pl, "video/x-raw,framerate=5/1")
 enc = New MediaControl(pl, "theoraenc")
 mux = New MediaControl(pl, "oggmux")
 snk = New MediaControl(pl, "filesink")
' Imposta il percorso del file finale avente formato ODV:
 snk["location"] = "/tmp/video.odv"

' Collega i plugin di "GStreamer", per creare la pipeline:
 src.LinkTo(cnv)
 cnv.LinkTo(flt)
 flt.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

 pl.play

 Wait MediaView1.Duration
  
 Print "File video ODV creato !"

End


Note

[1] Vedere anche questa pagina della wiki: Catturare con il Componente gb.media quanto mostrato dalla finestra di un programma o sulla Scrivania e farne un file video