Differenze tra le versioni di "Registrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form"
Riga 1: | Riga 1: | ||
− | Per mostrare la ripresa video di una webcam mediante il Controllo MediaView, si deve impostare il percorso del dispositivo che si riferisce | + | 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/video<FONT Color=red>N</font> | v4l2:///dev/video<FONT Color=red>N</font> | ||
− | laddove N è un numero di indice iniziale 0 (zero). | + | laddove N è un numero di indice iniziale 0 (zero). <SUP>[[[#Note|nota 1]]]</sup> |
Va nche detto che il Controllo ''MediaView'' è composto da "Figli" (''Children'') e "sotto-figli" (...nipoti). | Va nche detto che il Controllo ''MediaView'' è composto da "Figli" (''Children'') e "sotto-figli" (...nipoti). | ||
Riga 7: | Riga 7: | ||
<BR>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. | <BR>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 | + | Mostriamo degli esempi, usando la Classe ''MediaPipeline'', necessaria per catturare la ripresa video. |
<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''. | ||
+ | |||
+ | ===Creazione di un file video di formato ''MP4''=== | ||
Public Sub Form_Open() | Public Sub Form_Open() | ||
Riga 20: | Riga 22: | ||
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, cnv, enc, mux, snk As MediaControl | Dim src, cnv, enc, mux, snk As MediaControl | ||
− | |||
<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 29: | Riga 30: | ||
pl = New MediaPipeline | 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, "mp4mux") | ||
+ | mux["fragment-duration"] = 2048 | ||
+ | snk = New MediaControl(pl, "filesink") | ||
+ | <FONT Color=gray>' ''Imposta il percorso finale del file di formato mkv (Matroska):''</font> | ||
+ | snk["location"] = "/tmp/video.mp4" | ||
+ | |||
+ | <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font> | ||
+ | src.LinkTo(cnv) | ||
+ | cnv.LinkTo(enc) | ||
+ | enc.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 | ||
+ | |||
+ | If Exist("/tmp/video.mp4") Then Kill "/tmp/video.mp4" | ||
+ | |||
+ | pl.play | ||
+ | |||
+ | <FONT Color=gray>' ''Resta in attesa che la registrazione venga interrotta dall'utente:''</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 ''Matroska''=== | ||
+ | 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 | ||
+ | |||
+ | <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") | src = New MediaControl(pl, "ximagesrc") | ||
Riga 39: | Riga 101: | ||
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"] = | + | 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> | ||
Riga 52: | Riga 114: | ||
Until MediaView1.State = Media.Playing | Until MediaView1.State = Media.Playing | ||
+ | If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv" | ||
+ | |||
pl.play | pl.play | ||
Riga 64: | Riga 128: | ||
Print "Registrazione terminata !" | Print "Registrazione terminata !" | ||
− | If Exist("/tmp/video. | + | Print "File video creato !" |
− | + | ||
+ | End | ||
+ | |||
+ | ===Creazione di un file video di formato ''OGV-Theora''=== | ||
+ | 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 | ||
+ | Dim flt As MediaFilter | ||
+ | |||
+ | <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") | ||
+ | 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") | ||
+ | <FONT Color=gray>' ''Imposta il percorso finale del file di formato OGV-Theora:''</font> | ||
+ | snk["location"] = "/tmp/video.ogv" | ||
+ | |||
+ | <FONT Color=gray>' ''Collega i plugin del sistema audio "GStreamer":''</font> | ||
+ | src.LinkTo(cnv) | ||
+ | cnv.LinkTo(flt) | ||
+ | flt.LinkTo(enc) | ||
+ | enc.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 | ||
+ | |||
+ | 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:''</font> | ||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Until MediaView1.State = Media.Ready | ||
+ | |||
+ | pl.Stop | ||
+ | pl.Close | ||
+ | |||
+ | Print "Registrazione terminata !" | ||
Print "File video creato !" | Print "File video creato !" | ||
End | 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]] |
Versione delle 02:59, 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.
Indice
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 mkv (Matroska): 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