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 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 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() While pl2.State = Media.Playing Wait 0.01 Wend ' Essendo stato sollevato l'Evento "Application_Read()", si dovrà usare l'istruzione "Quit" per chiudere completamente il programma: Quit End ' Ponendo il puntatore del mouse nella console/terminale e premendo il tasto "Invio" della tastiera, si arresterà il programma. Public Sub Application_Read() pl1.Stop pl1.Close pl2.Stop pl2.Close End
Come il precedente codice, ma il test-video sarà dinamico e verrà mostrato all'interno di una "DrawingArea" usando il Metodo ".SetWindow()" della Classe MediaControl:
Private pl1 As MediaPipeline Private pl2 As MediaPipeline Public Sub Form_Open() Dim drawingArea1 As DrawingArea Dim Button1 As Button 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 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 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() End Public Sub Button1_Click() pl1.Stop pl1.Close pl2.Stop pl2.Close End