none
Aktuellen Titel eines Internetradiosenders anzeigen lassen (aus dem Windows Media Player auslesen) RRS feed

  • Allgemeine Diskussion

  • Hallo!

    Ein ziemlich blutiger Neuling hat eine Frage an euch. Habe einen schicken und funktionsreichen Player für meine Internetradiostation herbeigezaubert.

    Jetzt fehlt es jedoch noch an einer vernünftigen Titelanzeige, denn das Windows Media Player Plugin habe ich so eingestellt, dass nur die Visualisierung sichtbar ist. Somit fällt die Anzeige des Bufferings oder aber halt auch die Titelanzeige weg.

    Aber gut, eben die fehlt.

    Mittels folgendem Code habe ich schon versucht, die Parameter auf zuvor erstellte Labels ausgeben zu lassen:

    Public Class KIMplayer
            Me.LABinterpret.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo("Artist")
            Me.LABtitel.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo("Title")
    
        Private Sub IMGplay_Click(sender As Object, e As EventArgs) Handles IMGplay.Click
            AxWindowsMediaPlayer1.URL = "http://radio.kim/playlist.m3u"
        End Sub

    Nur leider funktioniert das nicht so richtig. Das Label "LABinterpret" wird leer, und bei "LABtitel" wird der Text "playlist" ausgegeben.

    Über einsteigerfreundliche Ratschläge und Tipps an einen angehenden Anwendungsentwickler oder auch Code-Snippets würde ich mich sehr freuen.

    Vielen Dank,
    Sebastian

    • Typ geändert se-schwarz Samstag, 22. November 2014 09:01 Frage geklärt, mittlerweile eine Diskussion über alternative Möglichkeiten.
    Freitag, 19. September 2014 22:53

Alle Antworten

  • Hallo,
    dein Code würde die Texte der Labels beim initialisieren der Klasse zuweisen. Du musst sie aber beim ändern des Medium neu zuweisen.

    Im Designer kannst du das WMP Control markieren und ins Eigenschaftenfenster (F4) wechseln. Im Reiter Ereignisse (klicke auf den Blitz am oberen Rand des Fensters) kannst du das MediaChange-Event abonnieren.
    Im Codebehind wird dann ein Eventhandler erstellt, den du wie folgt ergänzen musst:

    Private Sub AxWindowsMediaPlayer1_MediaChange(sender As Object, e As AxWMPLib._WMPOCXEvents_MediaChangeEvent) Handles AxWindowsMediaPlayer1.MediaChange
        Me.LABinterpret.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo("Artist")
        Me.LABtitel.Text = AxWindowsMediaPlayer1.currentMedia.getItemInfo("Title")
    End Sub
    Der Eventhandler wird jedes mal aufgerufen, wenn sich das abzuspielende Medium ändert.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 20. September 2014 09:23
  • Hallo Koopakilla! (Super Marios Bros.?)

    Ich bin der Lösung dank deines Tipps schon ein Stück weiter gekommen. Man sieht jetzt statt "playlist" der Namen des Streams - "Radio.KIM" steht demzufolge jetzt da. Das Label für den Interpreten bleibt leer.

    Der Stream sendet jedoch Titelinformationen, also sollte es daran nicht scheitern.

    Ich befürchte fast, dass das mit Streams nicht so fungiert?

    Grüße
    Sebastian

    Samstag, 20. September 2014 15:10
  • Hallo,

    (Super Marios Bros.?)

    Ja :)

    Ich befürchte fast, dass das mit Streams nicht so fungiert?

    Ich habe es nur mit einer M3U Datei probiert in der alle MP3 Dateien aufgelistet waren. Dort hat es ohne Probleme funktioniert.
    Deine M3U verweißt auf eine Online URL: http://streamplus19.leonex.de:10286

    Laut der dort angezeigten Seite wird zwar der aktuelle Songtitel mit übergeben, der WMP scheint ihn aber nicht zu verarbeiten. Ich habe am Ende des MediaChanged-Eventhandlers einen BreakPoint gesetzt (F9) und dann das MediaPlayer Objekt analysiert. Dort scheint es keine weiteren Möglichkeiten zu geben um an den Titel zu gelangen.

    Ich bin diesbezüglich mit meinem Latein am Ende und kann auch nur noch auf die MSDN Seiten zum WMP verweisen.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 20. September 2014 16:07
  • Deine M3U verweißt auf eine Online URL: *entfernt*

    Da wir in Kürze auf einen anderen Stream umsatteln, der auf Shoutcast 2 basiert, werde ich das damit testen. Vielleicht versteht sich der WMP damit besser?! :-)

    Ich melde mich dann einfach nochmal. Danke bis hierhin für deine Bereitschaft!

    Samstag, 20. September 2014 16:13
  • Hallo!

    Wie versprochen melde ich mich noch mal. Auch beim Shoutcast2-Server liest der WMP die Titelinfos nicht aus.

    Stattdessen liefert das Tool, mit dem wir die neuen Streams verwalten, ein JavaScript-Snippet, welches ich jetzt per iFrame eingebunden habe. (Aber nur, da ich nicht weiß, wie man den Titel per JSON oder XML ausliest, denn diese Funktion ist auch geboten.)

    Das Ganze sieht jetzt so aus........... *oder auch nicht, denn ich darf noch keine Bilder oder Links einfügen*

    Falls es alternative Möglichkeiten gibt, lass(t) es mich wissen. :-)

    Bis bald,
    Basti

    Montag, 22. September 2014 02:11
  • Hallo,

    Für JSON bietet dir das .NET Framework am Desktop IMHO nichts an. Allerdings kannst du XML Dateien problemlos auslesen, beispielsweise per LINQ to XML.

    Solange aber die Anzeigequalität per iframe ordentlich ist, würde ich nicht zwingend umstellen. Das würde am Ende wohl nur mehr Leistung brauchen aber keinen wirklichen Vorteil bringen.

    PS: Ein Bild, wie der jetzige Player aussieht:
    https://twitter.com/hitradiokim/status/513873692531900416/photo/1

    PPS: Um dein Konto verifizieren zu lassen (damit du Bidler und Links posten kannst), antworte bitte auf Verify Your Account.


    Tom Lambert - C# MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 22. September 2014 15:02
  • Hallo! Ich wollte mich hier noch mal melden, da es Neuigkeiten in diesem Fall gibt.

    Die Titelanzeige ist jetzt so umgesetzt: Ein PHP-Skript liest die Daten der XML-Schnittstelle des Shoutcast2 D.N.A.S. aus. Diese wird wiederum von VB.net intepretiert und auf ein Label ausgegeben. (Für Shoutcast1-Server soltle es im Allgemeinen ähnlich aufgebaut sein.)

    Das PHP-Skript ist wie folgt aufgebaut. Unbedingt das Charset einbinden - sonst schmiert alles wegen der Sonderzeichen ab.

    <?php
    header("Content-Type: text/plain; charset=utf-8");
    $dnasstats = new SimpleXMLElement(file_get_contents("http://admin:PASSWORT@SERVER:PORT/admin.cgi?mode=viewxml&page=1&sid=1"));
    if (!isset($dnasstats->SONGTITLE) || strlen($dnasstats->SONGTITLE) === 0) {
    	echo "Unbekannt";
    } else if ($dnasstats->SONGTITLE == "news") {
    	echo "Radio KIM Nachrichten";
    } else {
    	echo $dnasstats->SONGTITLE;
    }

    Die "else if"Deklaration ist optional und bei uns für die Einspeisung der News, da diese über keine Metadaten verfügt.

    Hat man diese PHP dann beim Webhoster seines Vertrauens hinterlegt, kann man in Visual Basic die Titelinfos wie folgt einbinden:

    Private Sub LoadCurrentSong()
            Dim Response As HttpWebResponse = Nothing
            Dim Reader As StreamReader = Nothing
            Try
                Dim Request As HttpWebRequest = DirectCast(WebRequest.Create("URL_ZUR_PHP_DATEI"), HttpWebRequest)
                Response = DirectCast(Request.GetResponse(), HttpWebResponse)
                Reader = New StreamReader(Response.GetResponseStream())
                LabelSongPlaying.Text = Reader.ReadToEnd().Replace("&", "&&")
            Catch ex As Exception
                ' Fehler beim Empfangen der Daten werden ignoriert - so funktioniert der Player auch dann noch, wenn der Stream down ist
                'MsgBox(ex.ToString, MsgBoxStyle.Exclamation, "Fehler aufgetreten")
                LabelSongPlaying.Text = "Unbekannt"
            Finally
                If Not Response Is Nothing Then Response.Close()
                If Not Reader Is Nothing Then Reader.Close()
            End Try
        End Sub
    Desweiteren müssen ein Timer eingebunden und einzelne Elemente deklariert/angepasst werden, damit der Titel geupdatet wird. Wir haben ihn auf 10 Sekunden eingestellt.
        Private Sub KIMplayer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            LoadCurrentSong()
        End Sub
    
        Private Sub PlayingSongTimer_Tick(sender As Object, e As EventArgs) Handles PlayingSongTimer.Tick
            LoadCurrentSong()
        End Sub
    
        Private Sub LabelSongPlaying_Click(sender As Object, e As EventArgs) Handles LabelSongPlaying.Click
            LoadCurrentSong()
        End Sub

    Optional - wenn man wie wir 2 verschiedene Streams einbindet oder ein Stop/Play-Button - sollte man auch dafür sorgen, dass bei der Auswahl ebenfalls der Titel geupdatet wird. Bei uns sind das Link-Labels.

        Private Sub LNK192_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LNK192.LinkClicked
            AxWindowsMediaPlayer1.URL = "LINK_ZUR_ASX_PLAYLIST"
            LoadCurrentSong()
        End Sub
    
        Private Sub LNK64_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LNK64.LinkClicked
            AxWindowsMediaPlayer1.URL = "LINK_ZUR_ASX_PLAYLIST"
            LoadCurrentSong()
        End Sub

    Das "LoadCurrentSong()" ist ausschlaggebend.

    Viel Glück bei der Umsetzung allen, die bis dato das gleiche "Problem" hatten.

    Samstag, 22. November 2014 02:22