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.
 
(3 versioni intermedie di uno stesso utente non sono mostrate)
Riga 10: Riga 10:
 
<BR>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''.
 
<BR>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''.
  
 +
La registrazione del video terminerà nel momento in cui verrà fermata la ripresa video con la webcam, premendo sul tastino virtuale di arresto posto in basso a sinistra del Controllo ''MediaView''.
 
===Creazione di un file video di formato ''MP4''===
 
===Creazione di un file video di formato ''MP4''===
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
Riga 22: Riga 23:
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, cnv, enc, mux, snk As MediaControl
 
   Dim src, cnv, enc, mux, snk As MediaControl
 +
 +
  If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4"
 
   
 
   
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
Riga 54: Riga 57:
 
     Wait 0.01
 
     Wait 0.01
 
   Until MediaView1.State = Media.Playing
 
   Until MediaView1.State = Media.Playing
 
  If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4"
 
 
   
 
   
 
   pl.play
 
   pl.play
 
   
 
   
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente:''</font>
+
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":''</font>
 
   Repeat  
 
   Repeat  
 
     Wait 0.01
 
     Wait 0.01
Riga 85: Riga 86:
 
   Dim pl As MediaPipeline
 
   Dim pl As MediaPipeline
 
   Dim src, cnv, enc, mux, snk As MediaControl
 
   Dim src, cnv, enc, mux, snk As MediaControl
 +
 +
  If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv"
 
   
 
   
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
Riga 113: Riga 116:
 
     Wait 0.01
 
     Wait 0.01
 
   Until MediaView1.State = Media.Playing
 
   Until MediaView1.State = Media.Playing
 
  If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv"
 
 
   
 
   
 
   pl.play
 
   pl.play
 
   
 
   
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente:''</font>
+
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":''</font>
 
   Repeat  
 
   Repeat  
 
     Wait 0.01
 
     Wait 0.01
Riga 132: Riga 133:
 
  End
 
  End
  
===Creazione di un file video di formato ''OGV-Theora''===
+
===Creazione di un file video di formato ''OGG-Theora''===
 
  Public Sub Form_Open()
 
  Public Sub Form_Open()
 
   
 
   
Riga 145: Riga 146:
 
   Dim src, cnv, enc, mux, snk As MediaControl
 
   Dim src, cnv, enc, mux, snk As MediaControl
 
   Dim flt As MediaFilter
 
   Dim flt As MediaFilter
 +
 +
  If Exist("/tmp/video.ogg") Then Kill "/tmp/video.ogg"
 
   
 
   
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
 
  <FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
Riga 161: Riga 164:
 
   mux = New MediaControl(pl, "oggmux")
 
   mux = New MediaControl(pl, "oggmux")
 
   snk = New MediaControl(pl, "filesink")
 
   snk = New MediaControl(pl, "filesink")
  <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 "OGG-Theora":''</font>
   snk["location"] = "/tmp/video.ogv"
+
   snk["location"] = "/tmp/video.ogg"
 
   
 
   
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 
  <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
Riga 168: Riga 171:
 
   cnv.LinkTo(flt)
 
   cnv.LinkTo(flt)
 
   flt.LinkTo(enc)
 
   flt.LinkTo(enc)
 +
  enc.LinkTo(mux)
 +
  mux.LinkTo(snk)
 +
 +
<FONT Color=gray>' ''Il ciclo dura, finché la registrazione non viene avviata dall'utente::''</font>
 +
  Repeat
 +
    Wait 0.01
 +
  Until MediaView1.State = Media.Playing
 +
 +
  pl.play
 +
 +
<FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":''</font>
 +
  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 ''FLV''===
 +
Public Sub Form_Open()
 +
 +
  Me.Show
 +
 +
  MediaView1.URL = "v4l2:///dev/video<FONT Color=red>0</font>"
 +
 +
  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
 +
 +
  If Exist("/tmp/video.flv") Then Kill "/tmp/video.flv"
 +
 +
<FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
 +
  ob = MediaView1.Children[0]
 +
  pn1 = ob.Children[0]
 +
  pn2 = pn1.Children[0]
 +
  DrawingArea1 = pn2.Children[0]
 +
  pl = New MediaPipeline
 +
 +
  src = New MediaControl(pl, "ximagesrc")
 +
<FONT Color=gray>' ''Assegna alla Proprietà "xid" il numero identificativo dell'Oggetto "DrawingArea":''</font>
 +
  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, "flvmux")
 +
  snk = New MediaControl(pl, "filesink")
 +
<FONT Color=gray>' ''Imposta il percorso finale del file di formato "FLV":''</font>
 +
  snk["location"] = "/tmp/video.flv"
 +
 
 +
<FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 +
  src.LinkTo(cnv)
 +
  cnv.LinkTo(enc)
 
   enc.LinkTo(mux)
 
   enc.LinkTo(mux)
 
   mux.LinkTo(snk)
 
   mux.LinkTo(snk)
Riga 176: Riga 241:
 
   Until MediaView1.State = Media.Playing
 
   Until MediaView1.State = Media.Playing
 
   
 
   
   If Exist("/tmp/video.ogv") Then Kill "/tmp/video.ogv"
+
  pl.play
 +
 +
<FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":''</font>
 +
  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 ''AVI''===
 +
Public Sub Form_Open()
 +
 +
  Me.Show
 +
 +
  MediaView1.URL = "v4l2:///dev/video<FONT Color=red>0</font>"
 +
 +
  Dim ob As Object
 +
  Dim pn1, pn2 As Panel
 +
  Dim DrawingArea1 As DrawingArea
 +
  Dim pl As MediaPipeline
 +
  Dim src, cnv, mux, snk As MediaControl
 +
 +
   If Exist("/tmp/video.avi") Then Kill "/tmp/video.avi"
 +
 +
<FONT Color=gray>' ''Individua l'Oggetto "DrawingArea", 'figlio' del Controllo "MediaView":''</font>
 +
  ob = MediaView1.Children[0]
 +
  pn1 = ob.Children[0]
 +
  pn2 = pn1.Children[0]
 +
  DrawingArea1 = pn2.Children[0]
 +
  pl = New MediaPipeline
 +
 +
  src = New MediaControl(pl, "ximagesrc")
 +
<FONT Color=gray>' ''Assegna alla Proprietà "xid" il numero identificativo dell'Oggetto "DrawingArea":''</font>
 +
  src["xid"] = DrawingArea1.Id
 +
  cnv = New MediaControl(pl, "videoconvert")
 +
  mux = New MediaControl(pl, "avimux")
 +
  snk = New MediaControl(pl, "filesink")
 +
<FONT Color=gray>' ''Imposta il percorso finale del file di formato "AVI":''</font>
 +
  snk["location"] = "/tmp/video.avi"
 +
 
 +
<FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font>
 +
  src.LinkTo(cnv)
 +
  cnv.LinkTo(mux)
 +
  mux.LinkTo(snk)
 +
 +
<FONT Color=gray>' ''Resta in attesa finché la registrazione non viene avviata dall'utente:''</font>
 +
  Repeat
 +
    Wait 0.01
 +
  Until MediaView1.State = Media.Playing
 
   
 
   
 
   pl.play
 
   pl.play
 
   
 
   
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente:''</font>
+
  <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":''</font>
 
   Repeat  
 
   Repeat  
 
     Wait 0.01
 
     Wait 0.01
Riga 197: Riga 317:
  
 
=Note=
 
=Note=
[1] Vedere la seguente pagina della wiki: [[Mostrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form]]
+
[1] Vedere le seguenti pagine della wiki:
 +
* [[Catturare il video riprodotto in un Controllo MediaView del componente gb.media]]
 +
* [[Mostrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form]]

Versione attuale delle 18:28, 13 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.

La registrazione del video terminerà nel momento in cui verrà fermata la ripresa video con la webcam, premendo sul tastino virtuale di arresto posto in basso a sinistra 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

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

' 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

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":
 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

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

' 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

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":
 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 OGG-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

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

' 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 "OGG-Theora":
 snk["location"] = "/tmp/video.ogg"

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

' Il ciclo dura, finché la registrazione non viene avviata dall'utente::
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Playing

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":
 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 FLV

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

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

' 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, "flvmux")
 snk = New MediaControl(pl, "filesink")
' Imposta il percorso finale del file di formato "FLV":
 snk["location"] = "/tmp/video.flv"
  
' 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

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":
 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 AVI

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, mux, snk As MediaControl

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

' 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")
 mux = New MediaControl(pl, "avimux")
 snk = New MediaControl(pl, "filesink")
' Imposta il percorso finale del file di formato "AVI":
 snk["location"] = "/tmp/video.avi"
  
' Collega i plugin del sistema audio "GStreamer":
 src.LinkTo(cnv)
 cnv.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

 pl.play

' Resta in attesa che la registrazione venga interrotta dall'utente, cliccando sul tastino virtuale di arresto del Controllo "MediaView":
 Repeat 
   Wait 0.01
 Until MediaView1.State = Media.Ready

 pl.Stop
 pl.Close

 Print "Registrazione terminata !"

 Print "File video creato !"

End


Note

[1] Vedere le seguenti pagine della wiki: