Fragensteller
Aktuellen Titel eines Internetradiosenders anzeigen lassen (aus dem Windows Media Player auslesen)

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.
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 -
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 -
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:10286Laut 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 -
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!
-
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 -
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/1PPS: 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 -
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.