In VLC Player Play und Stop ansteuern

  • VB.NET

Es gibt 53 Antworten in diesem Thema. Der letzte Beitrag () ist von OneWorld.

    @OneWorld
    Dafür nimmt man doch keinen WebBrowser :D. Das funktioniert zwar, aber ist halt eigentlich ein Control, das etwas anzeigt. Das kannste mit nem Timer und ner Stopwatch vergleichen.
    ja mir ist grad nichts anderes eingefallen :D . Ich habs auch noch nie gemacht. Da ich die Befehle via PHP an mein "Server PC" sende habe ich es auch nicht mehr nachgeschaut ;) Wie würdest du das machen ?

    Danke für den Hinweis
    Youtube Info Library 2013 jetzt im Showroom.
    Mit Webbrowser kommt die meldung:
    Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Der Wert liegt außerhalb des erwarteten Bereichs.
    Kann man die Stopwatch irgendwie mit den Sekunden aus der XML synchronisieren? :D
    Weil z.Z. sieht das so aus: youtu.be/BT-FKeiV5_g (Zeitlupe 1/10 geschwindigkeit

    Die Sekunden werden aus der XML gelesen und immer wenn die Sekunden sich eins erhöhen wird die Stopwatch neu gestartet.

    VB.NET-Quellcode

    1. Private Sub Timer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
    2. XMLstatus.Load("http://" & IPvlc & ":" & PORTvlc & "/requests/status.xml") 'Der Status von VLC wird ausgelesen
    3. XMLtime = XMLstatus.SelectSingleNode("root/time").InnerText
    4. Seconds = XMLtime
    5. If Seconds <> SecondsOne Then 'Seconds wird mit dem zuvor gemessenen Seconds wert verglichen
    6. watch.Restart() 'Timer wird neu gestartet
    7. SecondsOne = Seconds 'SecondsOne wird wieder mit Seconds gleichgesetzt
    8. End If
    9. Milliseconds = watch.ElapsedMilliseconds 'stopwatch wird ausgelesen
    10. If Milliseconds.ToString.Length > 2 Then 'Die letzten beiden Stellen der Stopwatch werden genommen
    11. Milliseconds = Milliseconds.ToString.Substring(Milliseconds.ToString.Length - 3, 2)
    12. End If
    13. Me.Text = "VLC2Timecode - " & Seconds & ":" & Milliseconds 'aktuelle Zeit wird im Fenster angezeigt
    14. client_send(Seconds & "," & Milliseconds) 'aktuelle Zeit wird gesendet
    15. End Sub



    Dankeee :) :)
    Erstmal Option Strict On!!!
    Dann sollte das Grundgerüst ungefähr so aussehen:

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    2. Dim Seconds As Integer = 'Hier die Sekunden reinladen
    3. Me.Text = New TimeSpan(0, 0, Seconds).ToString 'Sekunden formatiert ausgeben
    4. End Sub

    Die Stopwatch brauchst du ja eigentlich gar nicht, wenn du dir schon die Zeit holst, oder?
    Vielleicht hilft dir das ja weiter :).
    Sieht ja ganz schön aus, aber ich brauch die Zeit im Format:
    Seconds,Milliseconds

    Aber VLC gibt leider nur die Sekunden aus.

    VB.NET-Quellcode

    1. Me.Text = New TimeSpan(0, 0, 0, Seconds, 0).ToString

    Nichtmal so krieg ich die ms :( (hätt ja sein können)

    Und die Millisekunden sind wichtig, da das Programm am Ende das Herzstück einer Multimediashow bei unserer Abiverabschiedung wird. Das gibt die Zeit von der Musik an die Licht und Videosoftware weiter.

    Danke :)
    @LJ Jojo Alos bei mir funktioniert das. Hast du VLC auch gestartet ?, denn sonst kann der Befehl ja nicht empfangen werden ;)
    Youtube Info Library 2013 jetzt im Showroom.
    @OneWorld
    Er will die Millisekunden selber bestimmen, da diese VLC nicht übermittelt ;).

    @LJ Jojo
    Ich habs mal so gemacht, vielleicht bringt dir das ja was:

    VB.NET-Quellcode

    1. Private WithEvents bgwTimeMeasurement As New System.ComponentModel.BackgroundWorker With {.WorkerSupportsCancellation = True}
    2. Dim StartTime As Date = Now
    3. Private Sub bgwTimeMeasurement_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles bgwTimeMeasurement.DoWork
    4. Dim Time As TimeSpan
    5. Do Until bgwTimeMeasurement.CancellationPending = True 'Bis der BackGroundWorker gestoppt wird die Schleife laufen lassen
    6. Time = StartTime - Now 'Dem TimeSpan die Differenz aus der Startzeit und der aktuellen Zeit zuweisen
    7. Me.Invoke(Sub() Me.Text = FormatTimeSpan(Time)) 'Dem Text der Form die formatierte Zeit zuweisen
    8. Loop
    9. End Sub
    10. Public Function FormatTimeSpan(input As TimeSpan) As String
    11. Dim text As String = input.ToString("G") 'Format: #:##:##:##,#######
    12. text = text.Substring(0, Math.Min(text.Length, text.LastIndexOf(":"c) + 4 + 3)) 'Neues Format: #:##:##:##,###
    13. text = text.Substring(text.LastIndexOf(":"c) + 1) 'Neues Format: ##,###
    14. 'text = text.Substring(text.LastIndexOf(":"c) - 2) 'Neues Format: ##:##,### Alternative zu der vorhergehenden Zeile, falls Minuten erwünscht sind ;)
    15. Return text
    16. End Function
    17. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Der Start-Button
    18. If Not bgwTimeMeasurement.IsBusy Then bgwTimeMeasurement.RunWorkerAsync()
    19. End Sub
    20. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 'Der Stopp-Button
    21. bgwTimeMeasurement.CancelAsync()
    22. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nafets3646“ ()

    LJ Jojo schrieb:

    Mit Webbrowser kommt die meldung:
    Zitat
    Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Der Wert liegt außerhalb des erwarteten Bereichs.


    Ich rede davon :D
    Youtube Info Library 2013 jetzt im Showroom.
    natürlich hab ich VLC gestartet :D schließlich kommen da die Sekunden her :D
    Aber der Fehler kommt immernoch :(

    @nafets3646 du hast doch gemeint, dass man dafür keinen webbrowser nimmt, was würdest du denn nehmen? :)

    P.s. Ich glaub das war ein Fehler hier beides in einen Thread zu packen :whistling:
    Ich kenne mich mit Netzwerkprogrammierung kein bisschen aus, aber es ist halt ne Tatsache, dass man Controls nicht für solche Zwecke "missbraucht". Mach vielleicht dafür nochmal nen Thread auf.

    Ansonsten habe ich oben noch nen Code gepostet, vielleicht hilft dir der ja was :P.
    Warum denn noch einen Thread aufmachen. Der Titel sagt ja, In VLC Player Play und Stop ansteuern. Ich denke man kann das auch hier dann klären. Ich werde es mal anders versuchen ohne Webbrowser ;). Ich sage dann hier bescheid...
    Youtube Info Library 2013 jetzt im Showroom.

    VB.NET-Quellcode

    1. Private Sub BtnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPlay.Click
    2. Dim wc As New WebBrowser
    3. If playself = False Then
    4. wc.Navigate("http://" & IPvlc & ":" & PORTvlc.ToString & "8080/requests/status.xml?command=pl_pause") 'startet VLC
    5. Milliseconds = Milliseconds + Delay 'Delay wird zu den Millisekunden hinzuaddiert
    6. ElseIf playself = True Then
    7. 'PLAY
    8. My.Computer.Audio.Play(MusikDatei, AudioPlayMode.Background)
    9. End If
    10. Timer.Start()
    11. BtnStop.Enabled = True
    12. BtnPlay.Enabled = False
    13. End Sub

    IPvlc = 127.0.0.1
    PORTvlc = 8080
    Das ganze Zeug mit "playself" einfach ignorieren ;) das programm soll in späteren Versionen die Musik auch selbst abspielen könne. Aber hauptsächlich isses für VLC gedacht.

    Hat ja aber alles was mit VLC Fernsteuern zu tun. Im Prinzip is ja nur Play/Pause/Stop und die Zeit in Millisekunden abfragen.
    @nafets3646 Ich sage doch nichts gegen deinen Code. Ich versuche ihm nur bei seinem Problem mit der Fehlermeldung zu helfen. Das mit der Zeit ist schon richtig so wie ihr das vorhabt.

    Hier versuchs mal so. Dieses mal mit einem Webclient. Ist besser als mit einem Webbrowser ;)

    VB.NET-Quellcode

    1. Dim wc As New Net.WebClient
    2. wc.OpenRead("http://localhost:8080/requests/status.xml?command=pl_pause")
    Youtube Info Library 2013 jetzt im Showroom.

    LJ Jojo schrieb:

    Leider funktioniert das bei mir nicht:

    Zitat von »OneWorld«

    Visual Basic Quellcode

    VB.NET-Quellcode

    1. Dim wc as new Webclient
    2. wc.Navigate("http://localhost:8080/requests/status.xml?command=pl_pause")


    Ich hab System.Net importiert, aber an der Stelle kommt immer folgende meldung:

    Zitat
    Eine nicht behandelte Ausnahme des Typs "System.ArgumentException" ist in mscorlib.dll aufgetreten.

    Zusätzliche Informationen: URI-Formate werden nicht unterstützt.

    Außerdem gibt es das .Navigate nicht, deshalb hab ich .OpenRead genommen. Der Fehler kommt also beim .OpenRead
    @OneWorld: Das hab ich schon so probiert, hatte auch nicht funktioniert :( Aber ich google mal weiter, nachdem ich das mit der Zeit hier drin hab.
    Mhm Was machst du denn bei mir geht das mit dem steuern ohne Probleme...

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim wc As New WebClient
    6. wc.OpenRead("http://localhost:8080/requests/status.xml?command=pl_pause")
    7. End Sub
    8. End Class


    das mit dem wc.Navigate war schwachsinn, da habe ich mich verschrieben

    Gruß
    Youtube Info Library 2013 jetzt im Showroom.

    OneWorld schrieb:

    das mit dem wc.Navigate war schwachsinn, da habe ich mich verschrieben
    Das is mir auch klar :D

    brauch ich dieses "Option Strict On" oben unbedingt? Jetzt kommen von viele Fehler von "kann nicht konvertiert werden"

    Eigentlich sieht das bei mir genauso aus, aber ich kopier das gleich in ein neues Programm und schau obs dann geht.

    Danke

    Edit: Ok, die ganzen fehler durch das strict on sind jetzt weg, hab alles richtig konvertieren lassen :D

    Edit2: Wenn ich nur deinen Code nehm gehts auch bei mir.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LJ Jojo“ ()