Differenze tra le versioni di "Riproduzione dell'audio di radio WEB mediante il Componente gb.media"
(9 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 5: | Riga 5: | ||
L'utilizzo della Classe ''MediaPlayer'' prevede l'uso del plug-in ''playbin''. | L'utilizzo della Classe ''MediaPlayer'' prevede l'uso del plug-in ''playbin''. | ||
− | Mostriamo un esempio pratico, nel quale basterà premere il tasto "Invio" per chiudere il programma. | + | Mostriamo un esempio pratico con un programma a ''riga di comando'', nel quale basterà premere il tasto "Invio" per chiudere il programma. |
Private bo As Boolean | Private bo As Boolean | ||
− | + | Public Sub Main() | |
Dim mp As MediaPlayer | Dim mp As MediaPlayer | ||
With mp = New MediaPlayer | With mp = New MediaPlayer | ||
− | .URL = "<FONT Color= | + | .URL = "<FONT Color=darkgreen>''http://indirizzo/web/del/'''flusso'''/radio/live''</font>" |
.Play | .Play | ||
End With | End With | ||
Riga 28: | Riga 28: | ||
Quit | Quit | ||
− | + | End | |
− | + | Public Sub Application_Read() | |
bo = True | bo = True | ||
− | ''' | + | End |
+ | Quest'altro esempio è pratico e in ambiente grafico. | ||
+ | <BR>Saranno mostrati anche i Metadati della radio web. | ||
+ | Private mp As MediaPlayer | ||
+ | Private Meta As New Collection | ||
+ | Private ss As New String[] | ||
+ | |||
+ | |||
+ | Public Sub ToggleButton1_Click() | ||
+ | |||
+ | If ToggleButton1.Value Then | ||
+ | TextArea1.Clear | ||
+ | With mp = New MediaPlayer As "MediaPlayer1" | ||
+ | .URL = "https://giosa.radioca.st/stream" | ||
+ | .Play | ||
+ | End With | ||
+ | Else | ||
+ | mp.Stop | ||
+ | mp.Close | ||
+ | Endif | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_Tag(tagList As MediaTagList) | ||
+ | |||
+ | For Each tag As String In tagList.Tags | ||
+ | If Not Meta.Exist(tag) Then | ||
+ | Meta[tag] = tagList[tag] | ||
+ | ss.Push(tag) | ||
+ | ss.Push(tagList[tag]) | ||
+ | Else | ||
+ | ss[ss.Find(tag) + 1] = tagList[tag] | ||
+ | Endif | ||
+ | Next | ||
+ | |||
+ | TextArea1.Clear | ||
+ | For c As Short = 0 To ss.Max Step 2 | ||
+ | TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine | ||
+ | Next | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_Position() | ||
+ | |||
+ | Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000)) | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_End() | ||
+ | |||
+ | ToggleButton1.Value = False | ||
+ | |||
+ | End | ||
+ | In questo esempio mostreremo da un indirizzo web di una radio on-line i suoi Metadati e l'effetto grafico di un visualizzatore audio di ''GStreamer''. | ||
+ | <BR>Per consentire l'uso dei [https://gstreamer.freedesktop.org/documentation/additional/splitup.html?gi-language=c plugin] dei visualizzatori audio, è necessario avere installati nel sistema i seguenti pacchetti dei [https://gstreamer.freedesktop.org/documentation/additional/splitup.html?gi-language=c plugin]: | ||
+ | <BR> - gstreamer1.0-plugins-bad | ||
+ | <BR> - gstreamer1.0-plugins-base | ||
+ | <BR> - gstreamer1.0-plugins-base-apps | ||
+ | <BR> - gstreamer1.0-plugins-good | ||
+ | <BR> - gstreamer1.0-plugins-ugly | ||
+ | Private mp As MediaPlayer | ||
+ | Private Meta As New Collection | ||
+ | Private ss As New String[] | ||
+ | |||
+ | |||
+ | Public Sub ToggleButton1_Click() | ||
+ | |||
+ | If ToggleButton1.Value Then | ||
+ | Dim plugVis As MediaControl | ||
+ | Dim tipoPlug As String[] = ["goom", "monoscope", "spacescope", | ||
+ | "spectrascope", "synaescope", "wavescope"] | ||
+ | TextArea1.Clear | ||
+ | With mp = New MediaPlayer As "MediaPlayer1" | ||
+ | plugVis = New MediaControl(mp, tipoPlug[5]) | ||
+ | plugVis["style"] = 2 | ||
+ | .Video.Output = New MediaControl(mp, "ximagesink") | ||
+ | .SetWindow(DrawingArea1) | ||
+ | .URL = "https://giosa.radioca.st/stream" | ||
+ | .Play | ||
+ | <FONT Color=gray>' ''La seguente riga deve stare "dopo" il Metodo ".Play()", altrimenti - in caso si arresti e poi si riavvii l'esecuzione del flusso audio - l'esecuzione si arresterà dopo qualche secondo:''</font> | ||
+ | .Video.Visualisation = plugVis | ||
+ | End With | ||
+ | Else | ||
+ | mp.Stop | ||
+ | mp.Close | ||
+ | Endif | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_Tag(tagList As MediaTagList) | ||
+ | |||
+ | For Each tag As String In tagList.Tags | ||
+ | If Not Meta.Exist(tag) Then | ||
+ | Meta[tag] = tagList[tag] | ||
+ | ss.Push(tag) | ||
+ | ss.Push(tagList[tag]) | ||
+ | Else | ||
+ | ss[ss.Find(tag) + 1] = tagList[tag] | ||
+ | Endif | ||
+ | Next | ||
+ | |||
+ | TextArea1.Clear | ||
+ | For c As Short = 0 To ss.Max Step 2 | ||
+ | TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine | ||
+ | Next | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_Position() | ||
+ | |||
+ | Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000)) | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub MediaPlayer1_End() | ||
+ | |||
+ | ToggleButton1.Value = False | ||
+ | |||
+ | End | ||
Riga 45: | Riga 169: | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
pl = New MediaPipeline(Null, "playbin") | pl = New MediaPipeline(Null, "playbin") | ||
− | pl["uri"] = " | + | pl["uri"] = "https://hirschmilch.de:7001/psytrance.mp3" |
pl.Play() | pl.Play() | ||
Riga 64: | Riga 188: | ||
Quit | Quit | ||
− | + | End | |
− | + | Public Sub Application_Read() | |
bo = True | bo = True | ||
− | + | End | |
==Uso delle Classi ''MediaPipeline'' e ''MediaControl''== | ==Uso delle Classi ''MediaPipeline'' e ''MediaControl''== | ||
Si potrà fare uso anche delle Classi ''MediaPipeline'' e ''MediaControl''. | Si potrà fare uso anche delle Classi ''MediaPipeline'' e ''MediaControl''. | ||
− | |||
L'esempio, che segue, prevede l'uso del plug-in "''playbin''". Basterà premere il tasto "Invio" per chiudere il programma. | L'esempio, che segue, prevede l'uso del plug-in "''playbin''". Basterà premere il tasto "Invio" per chiudere il programma. | ||
Riga 82: | Riga 205: | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 90: | Riga 213: | ||
src = New MediaControl(pl, "playbin") | src = New MediaControl(pl, "playbin") | ||
− | src["uri"] = "<FONT Color= | + | src["uri"] = "<FONT Color=darkgreen>''http://indirizzo/web/del/'''flusso'''/radio/live''</font>" |
pl.Play() | pl.Play() | ||
Riga 104: | Riga 227: | ||
Quit | Quit | ||
− | + | End | |
− | + | Public Sub Application_Read() | |
bo = True | bo = True | ||
− | + | End | |
− | |||
− | |||
Quest'altro esempio prevede l'uso dei plug-in "''uridecodebin''". Basterà premere il tasto "Invio" per chiudere il programma. | Quest'altro esempio prevede l'uso dei plug-in "''uridecodebin''". Basterà premere il tasto "Invio" per chiudere il programma. | ||
Private bo As Boolean | Private bo As Boolean | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 126: | Riga 247: | ||
src = New MediaControl(pl, "uridecodebin") | src = New MediaControl(pl, "uridecodebin") | ||
− | src["uri"] = " | + | src["uri"] = "http://94.130.113.214:8000/prog" |
cnv = New MediaControl(pl, "audioconvert") | cnv = New MediaControl(pl, "audioconvert") | ||
snk = New MediaControl(pl, "autoaudiosink") | snk = New MediaControl(pl, "autoaudiosink") | ||
Riga 145: | Riga 266: | ||
Quit | Quit | ||
− | + | End | |
− | + | Public Sub Application_Read() | |
bo = True | bo = True | ||
− | + | End | |
− | |||
− | |||
Quest'altro esempio prevede l'uso dei plug-in "''souphttpsrc''" e "''decodebin''". | Quest'altro esempio prevede l'uso dei plug-in "''souphttpsrc''" e "''decodebin''". | ||
− | <BR> | + | <BR>Basterà premere il tasto "Invio" per chiudere il programma. |
Private bo As Boolean | Private bo As Boolean | ||
− | + | Public Sub Main() | |
Dim pl As MediaPipeline | Dim pl As MediaPipeline | ||
Riga 168: | Riga 287: | ||
src = New MediaControl(pl, "souphttpsrc") | src = New MediaControl(pl, "souphttpsrc") | ||
− | src["location"] = " | + | src["location"] = "http://198.15.94.34:8006/stream/1/" |
dcd = New MediaControl(pl, "decodebin") | dcd = New MediaControl(pl, "decodebin") | ||
cnv = New MediaControl(pl, "audioconvert") | cnv = New MediaControl(pl, "audioconvert") | ||
Riga 189: | Riga 308: | ||
Quit | Quit | ||
− | + | End | |
− | + | Public Sub Application_Read() | |
bo = True | bo = True | ||
− | + | End | |
+ | Nel seguente esempio pratico in ambiente grafico saranno anche mostrati i Metadati della radio web: | ||
+ | Private pl As MediaPipeline | ||
+ | Private Meta As New Collection | ||
+ | Private ss As New String[] | ||
+ | |||
+ | |||
+ | Public Sub ToggleButton1_Click() | ||
+ | |||
+ | Dim src, dcb, con, snk As MediaControl | ||
+ | |||
+ | If ToggleButton1.Value Then | ||
+ | TextArea1.Clear | ||
+ | pl = New MediaPipeline As "PLine" | ||
+ | src = New MediaControl(pl, "souphttpsrc") | ||
+ | src["location"] = "https://giosa.radioca.st/stream" | ||
+ | dcb = New MediaControl(pl, "<Font color=red>decodebin</font>") | ||
+ | con = New MediaControl(pl, "audioconvert") | ||
+ | snk = New MediaControl(pl, "autoaudiosink") | ||
+ | |||
+ | src.LinkTo(dcb) | ||
+ | dcb.LinkLaterTo(con) | ||
+ | con.LinkTo(snk) | ||
+ | |||
+ | pl.Play | ||
+ | |||
+ | While pl.Position < 0.1 | ||
+ | Wait 0.01 | ||
+ | Wend | ||
+ | While pl.State == Media.Playing | ||
+ | Me.Title = Str(Time(0, 0, 0, pl.Pos * 1000)) | ||
+ | Wait 0.1 | ||
+ | Wend | ||
+ | pl.Close | ||
+ | Else | ||
+ | pl.Stop | ||
+ | pl.Close | ||
+ | Endif | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub PLine_Tag(tagList As MediaTagList) | ||
+ | |||
+ | For Each tag As String In tagList.Tags | ||
+ | If Not Meta.Exist(tag) Then | ||
+ | Meta[tag] = tagList[tag] | ||
+ | ss.Push(tag) | ||
+ | ss.Push(tagList[tag]) | ||
+ | Else | ||
+ | ss[ss.Find(tag) + 1] = tagList[tag] | ||
+ | Endif | ||
+ | Next | ||
+ | |||
+ | TextArea1.Clear | ||
+ | For c As Short = 0 To ss.Max Step 2 | ||
+ | TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine | ||
+ | Next | ||
+ | |||
+ | End | ||
Riga 206: | Riga 384: | ||
− | + | Public Sub Form_Open() | |
Dim usc As MediaControl | Dim usc As MediaControl | ||
With mp = New MediaPlayer | With mp = New MediaPlayer | ||
− | .URL = "<FONT Color= | + | .URL = "<FONT Color=darkgreen>''http://indirizzo/web/del/flusso/radio/live''</font>" |
End With | End With | ||
Riga 217: | Riga 395: | ||
mp.Audio.Output = usc | mp.Audio.Output = usc | ||
− | + | End | |
− | + | Public Sub ToggleButton1_Click() | |
If ToggleButton1.Value Then | If ToggleButton1.Value Then | ||
Riga 226: | Riga 404: | ||
While mp.State == Media.Playing | While mp.State == Media.Playing | ||
<FONT Color=gray>' ''Mostra nell'intestazione della finestra il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font> | <FONT Color=gray>' ''Mostra nell'intestazione della finestra il tempo trascorso dall'avvio del processo dei dati audio ricevuti:''</font> | ||
− | Me. | + | Me.Title = Format(Time(0, 0, 0, mp.Position * 1000), "hh:nn:ss.uuu") |
Wait 0.01 | Wait 0.01 | ||
Wend | Wend | ||
Riga 232: | Riga 410: | ||
mp.Stop | mp.Stop | ||
mp.Close | mp.Close | ||
− | Me. | + | Me.Title = "00:00:00.000" |
Endif | Endif | ||
− | + | End |
Versione attuale delle 18:49, 17 gen 2024
Le stazioni radio via WEB possono essere ascoltate in streaming anche utilizzando le risorse del Componente gb.media di Gambas.
Indice
Uso della Classe MediaPlayer
L'utilizzo della Classe MediaPlayer prevede l'uso del plug-in playbin.
Mostriamo un esempio pratico con un programma a riga di comando, nel quale basterà premere il tasto "Invio" per chiudere il programma.
Private bo As Boolean Public Sub Main() Dim mp As MediaPlayer With mp = New MediaPlayer .URL = "http://indirizzo/web/del/flusso/radio/live" .Play End With Repeat ' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Write "\rTempo trascorso: " & Str(Time(0, 0, 0, mp.Position * 1000)) Wait 0.01 Until bo = True mp.Stop mp.Close Quit End Public Sub Application_Read() bo = True End
Quest'altro esempio è pratico e in ambiente grafico.
Saranno mostrati anche i Metadati della radio web.
Private mp As MediaPlayer Private Meta As New Collection Private ss As New String[] Public Sub ToggleButton1_Click() If ToggleButton1.Value Then TextArea1.Clear With mp = New MediaPlayer As "MediaPlayer1" .URL = "https://giosa.radioca.st/stream" .Play End With Else mp.Stop mp.Close Endif End Public Sub MediaPlayer1_Tag(tagList As MediaTagList) For Each tag As String In tagList.Tags If Not Meta.Exist(tag) Then Meta[tag] = tagList[tag] ss.Push(tag) ss.Push(tagList[tag]) Else ss[ss.Find(tag) + 1] = tagList[tag] Endif Next TextArea1.Clear For c As Short = 0 To ss.Max Step 2 TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine Next End Public Sub MediaPlayer1_Position() Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000)) End Public Sub MediaPlayer1_End() ToggleButton1.Value = False End
In questo esempio mostreremo da un indirizzo web di una radio on-line i suoi Metadati e l'effetto grafico di un visualizzatore audio di GStreamer.
Per consentire l'uso dei plugin dei visualizzatori audio, è necessario avere installati nel sistema i seguenti pacchetti dei plugin:
- gstreamer1.0-plugins-bad
- gstreamer1.0-plugins-base
- gstreamer1.0-plugins-base-apps
- gstreamer1.0-plugins-good
- gstreamer1.0-plugins-ugly
Private mp As MediaPlayer Private Meta As New Collection Private ss As New String[] Public Sub ToggleButton1_Click() If ToggleButton1.Value Then Dim plugVis As MediaControl Dim tipoPlug As String[] = ["goom", "monoscope", "spacescope", "spectrascope", "synaescope", "wavescope"] TextArea1.Clear With mp = New MediaPlayer As "MediaPlayer1" plugVis = New MediaControl(mp, tipoPlug[5]) plugVis["style"] = 2 .Video.Output = New MediaControl(mp, "ximagesink") .SetWindow(DrawingArea1) .URL = "https://giosa.radioca.st/stream" .Play ' La seguente riga deve stare "dopo" il Metodo ".Play()", altrimenti - in caso si arresti e poi si riavvii l'esecuzione del flusso audio - l'esecuzione si arresterà dopo qualche secondo: .Video.Visualisation = plugVis End With Else mp.Stop mp.Close Endif End Public Sub MediaPlayer1_Tag(tagList As MediaTagList) For Each tag As String In tagList.Tags If Not Meta.Exist(tag) Then Meta[tag] = tagList[tag] ss.Push(tag) ss.Push(tagList[tag]) Else ss[ss.Find(tag) + 1] = tagList[tag] Endif Next TextArea1.Clear For c As Short = 0 To ss.Max Step 2 TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine Next End Public Sub MediaPlayer1_Position() Me.Title = Str(Time(0, 0, 0, mp.Pos * 1000)) End Public Sub MediaPlayer1_End() ToggleButton1.Value = False End
Uso della Classe MediaPipeline
L'utilizzo della Classe MediaPipeline prevede l'uso del plug-in "playbin".
Mostriamo un esempio pratico, nel quale basterà premere il tasto "Invio" per chiudere il programma.
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline pl = New MediaPipeline(Null, "playbin") pl["uri"] = "https://hirschmilch.de:7001/psytrance.mp3" pl.Play() Repeat ' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo = True pl.Stop pl.Close Quit End Public Sub Application_Read() bo = True End
Uso delle Classi MediaPipeline e MediaControl
Si potrà fare uso anche delle Classi MediaPipeline e MediaControl.
L'esempio, che segue, prevede l'uso del plug-in "playbin". Basterà premere il tasto "Invio" per chiudere il programma.
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "playbin") src["uri"] = "http://indirizzo/web/del/flusso/radio/live" pl.Play() Repeat ' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo = True pl.Stop pl.Close Quit End Public Sub Application_Read() bo = True End
Quest'altro esempio prevede l'uso dei plug-in "uridecodebin". Basterà premere il tasto "Invio" per chiudere il programma.
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, cnv, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "uridecodebin") src["uri"] = "http://94.130.113.214:8000/prog" cnv = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "autoaudiosink") src.LinkLaterTo(cnv) cnv.LinkTo(snk) pl.Play() Repeat ' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo = True pl.Stop pl.Close Quit End Public Sub Application_Read() bo = True End
Quest'altro esempio prevede l'uso dei plug-in "souphttpsrc" e "decodebin".
Basterà premere il tasto "Invio" per chiudere il programma.
Private bo As Boolean Public Sub Main() Dim pl As MediaPipeline Dim src, dcd, cnv, snk As MediaControl pl = New MediaPipeline src = New MediaControl(pl, "souphttpsrc") src["location"] = "http://198.15.94.34:8006/stream/1/" dcd = New MediaControl(pl, "decodebin") cnv = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "autoaudiosink") src.LinkTo(dcd) dcd.LinkLaterTo(cnv) cnv.LinkTo(snk) pl.Play() Repeat ' Mostra in console il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Write "\rTempo trascorso: " & Str(Time(0, 0, 0, pl.Position * 1000)) Wait 0.01 Until bo = True pl.Stop pl.Close Quit End Public Sub Application_Read() bo = True End
Nel seguente esempio pratico in ambiente grafico saranno anche mostrati i Metadati della radio web:
Private pl As MediaPipeline Private Meta As New Collection Private ss As New String[] Public Sub ToggleButton1_Click() Dim src, dcb, con, snk As MediaControl If ToggleButton1.Value Then TextArea1.Clear pl = New MediaPipeline As "PLine" src = New MediaControl(pl, "souphttpsrc") src["location"] = "https://giosa.radioca.st/stream" dcb = New MediaControl(pl, "decodebin") con = New MediaControl(pl, "audioconvert") snk = New MediaControl(pl, "autoaudiosink") src.LinkTo(dcb) dcb.LinkLaterTo(con) con.LinkTo(snk) pl.Play While pl.Position < 0.1 Wait 0.01 Wend While pl.State == Media.Playing Me.Title = Str(Time(0, 0, 0, pl.Pos * 1000)) Wait 0.1 Wend pl.Close Else pl.Stop pl.Close Endif End Public Sub PLine_Tag(tagList As MediaTagList) For Each tag As String In tagList.Tags If Not Meta.Exist(tag) Then Meta[tag] = tagList[tag] ss.Push(tag) ss.Push(tagList[tag]) Else ss[ss.Find(tag) + 1] = tagList[tag] Endif Next TextArea1.Clear For c As Short = 0 To ss.Max Step 2 TextArea1.Text &= ss[c] & ": " & ss[c + 1] & gb.NewLine Next End
Uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink
L'uso delle Classi MediaPlayer e MediaControl e del plug-in jackaudiosink richiede che sia preliminarmente avviato il programma server Jack.
Mostriamo un esempio questa volta in ambiente grafico:
Private mp As MediaPlayer Public Sub Form_Open() Dim usc As MediaControl With mp = New MediaPlayer .URL = "http://indirizzo/web/del/flusso/radio/live" End With usc = New MediaControl(mp, "jackaudiosink") mp.Audio.Output = usc End Public Sub ToggleButton1_Click() If ToggleButton1.Value Then mp.Play While mp.State == Media.Playing ' Mostra nell'intestazione della finestra il tempo trascorso dall'avvio del processo dei dati audio ricevuti: Me.Title = Format(Time(0, 0, 0, mp.Position * 1000), "hh:nn:ss.uuu") Wait 0.01 Wend Else mp.Stop mp.Close Me.Title = "00:00:00.000" Endif End