Differenze tra le versioni di "Registrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 34: Riga 34:
 
   src["xid"] = DrawingArea1.Id
 
   src["xid"] = DrawingArea1.Id
 
   cnv = New MediaControl(pl, "videoconvert")
 
   cnv = New MediaControl(pl, "videoconvert")
  enc = New MediaControl(pl, "x264enc")
+
  enc = New MediaControl(pl, "x264enc")
 
   enc["pass"] = 5
 
   enc["pass"] = 5
 
   enc["quantizer"] = 26
 
   enc["quantizer"] = 26
Riga 41: Riga 41:
 
   mux["fragment-duration"] = 2048
 
   mux["fragment-duration"] = 2048
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato mkv (Matroska):''</font>
+
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato MP4:''</font>
 
   snk["location"] = "/tmp/video.mp4"
 
   snk["location"] = "/tmp/video.mp4"
 
    
 
    
Riga 56: Riga 56:
 
   
 
   
 
   If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4"
 
   If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4"
 
+
 
   pl.play
 
   pl.play
 
   
 
   
Riga 100: Riga 100:
 
   mux = New MediaControl(pl, "matroskamux")  
 
   mux = New MediaControl(pl, "matroskamux")  
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato mkv (Matroska):''</font>
+
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato MKV (Matroska):''</font>
 
   snk["location"] = "/tmp/video.mkv"
 
   snk["location"] = "/tmp/video.mkv"
 
+
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 
   src.LinkTo(cnv)
 
   src.LinkTo(cnv)
Riga 115: Riga 115:
 
   
 
   
 
   If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv"
 
   If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv"
 
+
 
   pl.play
 
   pl.play
 
   
 
   
Riga 163: Riga 163:
 
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato OGV-Theora:''</font>
 
  <FONT Color=gray>' ''Imposta il percorso finale del file di formato OGV-Theora:''</font>
 
   snk["location"] = "/tmp/video.ogv"
 
   snk["location"] = "/tmp/video.ogv"
 
+
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 
   src.LinkTo(cnv)
 
   src.LinkTo(cnv)
Riga 177: Riga 177:
 
   
 
   
 
   If Exist("/tmp/video.ogv") Then Kill "/tmp/video.ogv"
 
   If Exist("/tmp/video.ogv") Then Kill "/tmp/video.ogv"
 
+
 
   pl.play
 
   pl.play
 
   
 
   

Versione attuale delle 03:26, 3 lug 2024

Per mostrare la ripresa video di una webcam mediante il Controllo MediaView, si deve impostare il percorso del dispositivo che si riferisce alla webcam:

v4l2:///dev/videoN

laddove N è un numero di indice iniziale 0 (zero). [nota 1]

Va nche detto che 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 la particolare Proprietà "xid" del plugin "ximagesrc" cattureremo il video che essa mostra.

Mostriamo degli esempi, usando la Classe MediaPipeline, necessaria per catturare la ripresa video.
Va sottolineato che la registrazione attraverso le risorse della Classe MediaPipeline potrebbe iniziare con alcuni secondi di ritardo rispetto all'avvio della ripresa video del Controllo MediaView.

Creazione di un file video di formato MP4

Public Sub Form_Open()

 Me.Show

 MediaView1.URL = "v4l2:///dev/video0"

 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 l'Oggetto "DrawingArea", 'figlio' 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 identificativo dell'Oggetto "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 finale del file di formato MP4:
 snk["location"] = "/tmp/video.mp4"
  
' Collega i plugin del sistema audio "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

' Resta in attesa finché la registrazione non viene avviata dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Playing

 If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4"

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Ready

 pl.Stop
 pl.Close

 Print "Registrazione terminata !"

 Print "File video creato !"

End

Creazione di un file video di formato Matroska

Public Sub Form_Open()

 Me.Show

 MediaView1.URL = "v4l2:///dev/video0"

 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 l'Oggetto "DrawingArea", 'figlio' 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 identificativo dell'Oggetto "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 finale del file di formato MKV (Matroska):
 snk["location"] = "/tmp/video.mkv"

' Collega i plugin del sistema audio "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

' Resta in attesa finché la registrazione non viene avviata dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Playing

 If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv"

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Ready

 pl.Stop
 pl.Close

 Print "Registrazione terminata !"

 Print "File video creato !"

End

Creazione di un file video di formato OGV-Theora

Public Sub Form_Open()

 Me.Show

 MediaView1.URL = "v4l2:///dev/video0"

 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 l'Oggetto "DrawingArea", 'figlio' 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 identificativo dell'Oggetto "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 finale del file di formato OGV-Theora:
 snk["location"] = "/tmp/video.ogv"

' Collega i plugin del sistema audio "GStreamer":
 src.LinkTo(cnv)
 cnv.LinkTo(flt)
 flt.LinkTo(enc)
 enc.LinkTo(mux)
 mux.LinkTo(snk)

' Resta in attesa finché la registrazione non viene avviata dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Playing

 If Exist("/tmp/video.ogv") Then Kill "/tmp/video.ogv"

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente:
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Ready

 pl.Stop
 pl.Close

 Print "Registrazione terminata !"

 Print "File video creato !"

End


Note

[1] Vedere la seguente pagina della wiki: Mostrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form