Differenze tra le versioni di "Registrare la ripresa video di una webcam mediante l'oggetto MediaView del componente gb.media.form"
Riga 2: | Riga 2: | ||
v4l2:///dev/videoN | v4l2:///dev/videoN | ||
laddove N è un numero di indice iniziale 0 (zero). | laddove N è un numero di indice iniziale 0 (zero). | ||
+ | |||
+ | Va nche detto che il Controllo ''MediaView'' è composto da "Figli" (''Children'') e "sotto-figli" (...nipoti). | ||
+ | <BR>Uno di questi "sotto-figli" è una ''DrawingArea'', che è l'Oggetto grafico con cui il Controllo ''MediaView'' visualizza immagini e video. | ||
+ | <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 un semplice esempio, usando la Classe ''MediaPipeline'', necessaria per catturare la ripresa video. | Mostriamo un semplice esempio, usando la Classe ''MediaPipeline'', necessaria per catturare la ripresa video. | ||
Riga 11: | Riga 15: | ||
MediaView1.URL = "v4l2:///dev/video0" | MediaView1.URL = "v4l2:///dev/video0" | ||
+ | Dim ob As Object | ||
+ | Dim pn1, pn2 As Panel | ||
+ | Dim DrawingArea1 As DrawingArea | ||
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Dim src, cnv, enc, mux, snk As MediaControl | Dim src, cnv, enc, mux, snk As MediaControl | ||
Dim temporaneo As String | Dim temporaneo As String | ||
+ | <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 | pl = New MediaPipeline | ||
Riga 20: | Riga 32: | ||
src = New MediaControl(pl, "ximagesrc") | src = New MediaControl(pl, "ximagesrc") | ||
− | <FONT Color=gray>' '' | + | <FONT Color=gray>' ''Assegna alla Proprietà "xid" il numero identificativo dell'Oggetto "DrawingArea":''</font> |
src["xid"] = MediaView1.Id | src["xid"] = MediaView1.Id | ||
cnv = New MediaControl(pl, "videoconvert") | cnv = New MediaControl(pl, "videoconvert") |
Versione delle 09:57, 5 ott 2023
Per mostrare la ripresa video di una webcam mediante il Controllo MediaView, si deve impostare il percorso del dispositivo che si riferisce ala wbcam:
v4l2:///dev/videoN
laddove N è un numero di indice iniziale 0 (zero).
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 un semplice esempio, 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.
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 temporaneo As String ' 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 temporaneo = Temp src = New MediaControl(pl, "ximagesrc") ' Assegna alla Proprietà "xid" il numero identificativo dell'Oggetto "DrawingArea": src["xid"] = MediaView1.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"] = temporaneo ' 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: Repeat Wait 0.01 Until MediaView1.State = Media.Ready pl.Stop pl.Close Print "Registrazione terminata !" If Exist("/tmp/video.mkv") Then Kill "/tmp/video.mkv" Copy temporaneo To "/tmp/video.mkv" Print "File video creato !" End