Differenze tra le versioni di "Mostrare un segnale di test video mediante il Componente gb.media"
Riga 37: | Riga 37: | ||
src.LinkTo(xim) | src.LinkTo(xim) | ||
+ | |||
+ | pl.Play() | ||
End | End | ||
Riga 43: | Riga 45: | ||
Public Sub Button1_Click() | Public Sub Button1_Click() | ||
− | pl. | + | pl.Stop() |
− | + | pl.Close() | |
+ | |||
End | End | ||
Versione delle 18:16, 14 lug 2024
Per mostrare un segnale di test video mediante il Componente gb.media all'interno della superficie di un oggetto posto sul Form, è possibile adottare il seguente semplice codice:
Private pl As MediaPipeline Public Sub Form_Open() Dim DrawingArea1 As DrawingArea Dim Button1 As Button Dim src, xim As MediaControl With Me .W = 640 .H = 480 End With ' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video: With DrawingArea1 = New DrawingArea(Me) .X = 10 .Y = 10 .W = 320 .H = 240 .Background = Color.Transparent End With With Button1 = New Button(Me) As "Button1" .X = Me.W * 0.8 .Y = Me.H * 0.2 .W = Me.W * 0.1 .H = Me.H * 0.2 End With pl = New MediaPipeline src = New MediaControl(pl, "videotestsrc") xim = New MediaControl(pl, "ximagesink") ' Imposta la superficie dell'Oggetto, ove sarà mostrato il segnale di controllo video: xim.SetWindow(DrawingArea1) src.LinkTo(xim) pl.Play() End Public Sub Button1_Click() pl.Stop() pl.Close() End
Volendo invece ottenere un effetto di test video-audio, si potranno utilizzare due Pipeline di GStreamer: una dedicata alla gestione del test video, che sarà mostrato in una finestra esterna automaticamente generata dalle risorse di GStreamer; l'altra è invece dedicata alla gestione del test audio, per il quale sarà emesso un tono continuo.
Mostriamo un esempio questa volta con un'applicazione a riga di comando:
Public Sub Main() Dim pl1, pl2 As Mediapipeline Dim src1, src2, con, res, snk1, snk2 As MediaControl ' "Pipeline" dedicata al video: pl1 = New MediaPipeline src1 = New MediaControl(pl1, "videotestsrc") snk1 = New MediaControl(pl1, "ximagesink") src1.LinkTo(snk1) ' "Pipeline" dedicata all'audio: pl2 = New MediaPipeline src2 = New MediaControl(pl2, "audiotestsrc") con = New MediaControl(pl2, "audioconvert") res = New MediaControl(pl2, "audioresample") snk2 = New MediaControl(pl2, "alsasink") src2.LinkTo(con) con.LinkTo(res) res.LinkTo(snk2) pl1.play() pl2.play() Do Wait 0.01 Loop End
Il precedente codice, ma il test-video sarà dinamico e verrà mostrato all'interno di una "DrawingArea" usando il Metodo ".SetWindow()" della Classe MediaControl:
Public Sub Button1_Click() Dim pl1, pl2 As Mediapipeline Dim src1, src2, con, res, snk1, snk2 As MediaControl ' "Pipeline" dedicata al video: pl1 = New MediaPipeline src1 = New MediaControl(pl1, "videotestsrc") src1["is-live"] = True src1["horizontal-speed"] = 1 snk1 = New MediaControl(pl1, "xvimagesink") src1.LinkTo(snk1) snk1.SetWindow(drawingArea1) ' "Pipeline" dedicata all'audio: pl2 = New MediaPipeline src2 = New MediaControl(pl2, "audiotestsrc") con = New MediaControl(pl2, "audioconvert") res = New MediaControl(pl2, "audioresample") snk2 = New MediaControl(pl2, "autoaudiosink") src2.LinkTo(con) con.LinkTo(res) res.LinkTo(snk2) pl1.play() pl2.play() Do Wait 0.01 Loop End