Gambas France BETA


Pas de compte ? Incription

gst rtp

Ce sujet est résolu.

12
AuteurMessages
vuott#16 Posté le 31/7/2024 à 09:32:48
Ne cedere ineluctabili possimus
Pour certaines adresses cela marche bien :


Oui.
« Vita non suavis esse potest, nec Mors amara. »
vuott#17 Posté le 31/7/2024 à 09:35:01
Ne cedere ineluctabili possimus
Je peux ajouter ce bout de code dans le code général de mon logiciel ?

Tu parles de VLC ?
Il fonctionne certainement avec les ressources du Composant gb.media.
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#18 Posté le 31/7/2024 à 09:51:03
-- Unus Ex Altera --J'ai changé :
Library "libvlc:5.6.1" qui provoquait une erreur par Library "libvlc:5" et je n'ai pas d'erreur mais rien ne s'affiche mais rien ne bloque le programme même si celui-ci ne se ferme pas correctement.

Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
vuott#19 Posté le 31/7/2024 à 09:52:25
Ne cedere ineluctabili possimusVoici un code possible avec les classes "MediaPipeline" et "MediaControl" du composant gb.media:

Private pl As MediaPipeline
Private bo As Boolean


Public Sub Button1_Click()

Dim src, vcon, vsnk, asrc, acon, ares, asnk As MediaControl
Dim filevideo As String

filevideo = "http://web.onair-radio.eu:1935/Alpha-Host/Alpha-Host/playlist.m3u8"

pl = New MediaPipeline As "PLine"

' Définissez les éléments MediaControl nécessaires pour la partie vidéo:
src = New MediaControl(pl, "uridecodebin")
src["uri"] = filevideo
vcon = New MediaControl(pl, "videoconvert")
vsnk = New MediaControl(pl, "ximagesink")

src.LinkLaterTo(vcon)
vcon.LinkTo(vsnk)

' Configure les éléments MediaControl nécessaires pour la partie audio:
asrc = New MediaControl(pl, "uridecodebin")
asrc["uri"] = filevideo
acon = New MediaControl(pl, "audioconvert")
ares = New MediaControl(pl, "audioresample")
asnk = New MediaControl(pl, "autoaudiosink")

asrc.LinkLaterTo(acon)
acon.LinkTo(ares)
ares.LinkTo(asnk)

' Définir la surface graphique où afficher la vidéo:
vsnk.SetWindow(DrawingArea1)

pl.Play()

While Not bo
Wait 0.01
Wend

pl.Close

End


Public Sub PLine_Position()

' Affiche le temps écoulé depuis le démarrage de la vidéo:
Me.Title = "Tempus regit actum: " & Format(Time(0, 0, 0, pl.Position * 1000), "hh:nn:ss")

End


Public Sub PLine_End() ' Cet événement est déclenché, lorsque la conversion est terminée
bo = True

End
« Vita non suavis esse potest, nec Mors amara. »
vuott#20 Posté le 31/7/2024 à 10:05:26
Ne cedere ineluctabili possimus...en utilisant la classe "MediaPlayer" du composant gb.media:

Public Sub ToggleButton1_Click()

Dim mp As MediaPlayer

mp = New MediaPlayer

With mp
.URL = "http://web.onair-radio.eu:1935/Alpha-Host/Alpha-Host/playlist.m3u8"
.SetWindow(DrawingArea1)
.Play
End With

While ToggleButton1.Value
Write "\rtemps écoulé: " & Str(Time(0, 0, 0, mp.Position * 1000))
Wait 0.01
Wend

mp.Stop
mp.Close

End
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#21 Posté le 31/7/2024 à 10:16:42
-- Unus Ex Altera --J'utilise déjà la class MediaPlayer dans LecteurMultiBase2, d'ailleurs pour cette adresse j'ai un bel écran tout vert avec le son qui fonctionne très bien.
Je pense que c'est une question de délai dans le plugin de gstreamer mais je ne sais pas le régler automatiquement pour qu'il s'adapte de lui-même.

Juste pour mémoire, ceci ne fonctionne que dans le cas des vidéos ou des morceaux de musique avec une durée définie :
1
2
3
4
REPEAT
WRITE "\rtemps écoulé: " Str(Time(0, 0, 0, mp.Position * 1000))
WAIT 0.01
UNTIL bo = TRUE


dans le cas de flux continus, radios ou télévisions la durée est à zéro : MediaPlayer.Duration = 0 et il faut faire autrement. Du style :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PRIVATE SUB Etat()

IF $bChoix THEN '<------------------------------------' choix = radio, durée = 0
cbxRadio.Enabled = TRUE
$slider1.Visible = FALSE
ENDIF

IF bMedia THEN '<---------------------------------------' choix autre que radio, durée connue
cbxRadio.Enabled = FALSE
$slider1.Visible = TRUE
$slider1.Value = 0
ENDIF

IF bMedia AND hMP.Duration = 0 AND hMP.State = Media.Playing AND NOT $bFlux THEN '<------------------' cas des images, durée = 0
$slider1.Visible = FALSE
tbDiapo.Visible = TRUE
ELSE
tbDiapo.Visible = FALSE
ENDIF

IF bMedia AND hMP.Duration = 0 AND hMP.State = Media.Playing AND $bFlux THEN '<--------------------' cas des flux continus, durée = 0
$slider1.Visible = FALSE
ENDIF

DefTrayIcon()

END
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
vuott#22 Posté le 31/7/2024 à 19:27:11
Ne cedere ineluctabili possimus
Juste pour mémoire, ceci ne fonctionne que dans le cas des vidéos ou des morceaux de musique avec une durée définie :
1
2
3
4
REPEAT
WRITE "\rtemps écoulé: " Str(Time(0, 0, 0, mp.Position * 1000))
WAIT 0.01
UNTIL bo = TRUE


Ehmmm....pas dans mon exemple (que j'ai modifié depuis); c'est l'inverse, puisqu'à la fin de la vidéo, la variable booléenne ne devient jamais « true ».
Ceci est possible si l'on pose ce sous-programme:
1
2
3
4
5
PUBLIC SUB MonMediaPlayer_End()

bo = TRUE

END


Exemplum:
Private bo As Boolean


Public Sub Button1_Click()

Dim mp As MediaPlayer

mp = New MediaPlayer As "MediaPl"

With mp
.URL = Media.URL("/chemin/du/fichier/vidéo") ' Exécute un FICHIER vidéo:
.SetWindow(DrawingArea1)
.Play
End With

Repeat
Write "\rtemps écoulé: " & Str(Time(0, 0, 0, mp.Position * 1000))
Wait 0.01
Until bo

mp.Stop
mp.Close
Me.Close

End


Public Sub MediaPl_End()

bo = True

End
« Vita non suavis esse potest, nec Mors amara. »
valaquarus#23 Posté le 1/8/2024 à 14:06:23
-- Unus Ex Altera --Pour clore ce chapitre et passer à autre chose ; deux images de la même station de télé avec une latence de deux secondes entre les deux pour voir apparaître l'image en lieue et place de l'écran vert :

alors que pour d'autre adresses l'écran reste vert même si j'ai le son, pas très compréhensible pour ma petite tête.
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3
12