Differenze tra le versioni di "Mostrare un segnale di test video mediante il Componente gb.media"
(Creata pagina con "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 semp...") |
|||
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 6: | Riga 6: | ||
Dim da As DrawingArea | Dim da As DrawingArea | ||
− | Dim | + | Dim src, xim As MediaControl |
<FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:''</font> | <FONT Color=gray>' ''Crea una "DrawingArea" come oggetto GUI da usare per l'uscita video:''</font> | ||
Riga 19: | Riga 19: | ||
pl = New MediaPipeline | pl = New MediaPipeline | ||
− | + | src = New MediaControl(pl, "videotestsrc") | |
xim = New MediaControl(pl, "ximagesink") | xim = New MediaControl(pl, "ximagesink") | ||
Riga 25: | Riga 25: | ||
xim.SetWindow(da) | xim.SetWindow(da) | ||
− | + | src.LinkTo(xim) | |
'''End''' | '''End''' | ||
Riga 34: | Riga 34: | ||
pl.Play() | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''"Pipeline" dedicata al video:''</font> | ||
+ | pl1 = New MediaPipeline | ||
+ | src1 = New MediaControl(pl1, "videotestsrc") | ||
+ | snk1 = New MediaControl(pl1, "ximagesink") | ||
+ | src1.LinkTo(snk1) | ||
+ | |||
+ | <FONT Color=gray>' ''"Pipeline" dedicata all'audio:''</font> | ||
+ | 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 | ||
+ | |||
+ | <FONT Color=gray>' ''"Pipeline" dedicata al video:''</font> | ||
+ | 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<FONT Color=#B22222>.SetWindow</font>(drawingArea1) | ||
+ | |||
+ | <FONT Color=gray>' ''"Pipeline" dedicata all'audio:''</font> | ||
+ | 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''' | '''End''' |
Versione attuale delle 09:28, 23 ago 2022
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