Mostrare un segnale di test video mediante il Componente gb.media
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 da As DrawingArea Dim src, xim As MediaControl ' Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video: With da = New DrawingArea(Me) .X = 10 .Y = 10 .W = 320 .H = 240 .Background = Color.Transparent 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(da) src.LinkTo(xim) End Public Sub Button1_Click() pl.Play() 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