Internetradio via Windows

Begonnen von avg123-de, 22 Dezember 2013, 13:31:03

Vorheriges Thema - Nächstes Thema

avg123-de

Hallo,

da ich gerne über FHEM in bestimmten Räumen im Haus Radio streamen würde, hatte ich mal hiernach gesucht und hatte folgendes gefunden:

http://forum.fhem.de/index.php?topic=15346.0

Dieses läuft allerdings über die Synology diskstation. Da mein FHEM unter Windows läuft, funktioniert es bei mir nicht und ich finde leider keinen weg, wie ich es genau umschreiben müsste, damit es unter Windows läuft.

Ich hoffe ihr könnt mir weiterhelfen, Danke!
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

gemx

Sollte eigentlich kein großes Problem sein.
Laut dem Script wird MPLAYER zur Wiedergabe des Radiostreams verwendet.
Den gibt es auch für Windows.
z.B. hier http://www.chip.de/downloads/MPlayer-for-Windows_13012748.html

Dann musst du nur noch den Pfad anpassen, wo dein MPLAYER installiert ist.
Also dies
system("/var/packages/AudioStation/target/bin/mplayer -gapless-audio -ao oss -unique USB -daemon $alleurls[$i] -volume 10");

Dann müsste es eigentlich laufen

avg123-de

Hallo,
erst einmal danke für die Hilfe. Bei mir sieht die 99_myUtils.pm jetzt so aus aber es funktioniert leider nicht, was habe ich falsch gemacht?

Schon einmal Danke im Voraus!

######## senderwahl ####################################################
# What  : Radiosender an Synology Diskstation einstellen
# Call  : { senderwahl($sender) }
#
# mehr Stream URLS unter http://wiki.ubuntuusers.de/Internetradio/Stationen
sub senderwahl($) {
my $wahl = Value("Radio");
my @allesender = ("SWR1","SWR3","HR1","HR3","BR2","FFH","DasDing","RadioBob","YouFM_Rock");
my @alleurls = ("http://mp3-live.swr.de/swr1rp_m.m3u","http://mp3-live.swr3.de/swr3_m.m3u","http://metafiles.gl-systemhaus.de/hr/hr1_2.m3u","http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u","http://streams.br-online.de/bayern2_2.m3u","http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u","http://mp3-live.dasding.de/dasding_m.m3u","http://streams.radiobob.de/bob-live/mp3-128/mediaplayerbob","http://metafiles.gl-systemhaus.de/hr/youfm_rock.m3u");
system("killall mplayer");
if ($wahl ne "ausgeschaltet") {
for (my $i = 0; $i<@allesender; $i++) {
if ($allesender[$i] eq $wahl) {
system("C:\Program Files (x86)\MPlayer for Windows\mplayer.exe -gapless-audio -ao oss -unique USB -daemon $alleurls[$i] -volume 10");
}
}
}
}


FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

gemx

Das Problem scheinen wohl die Leerzeichen in dem Pfad zu sein.
Entweder mplayer in einem Verzeichnis ohne Leerzeichen installieren oder

system q[ "C:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe" -gapless-audio -ao oss -unique USB -daemon $alleurls[$i] -volume 10];


Ist aber ungetestet und stammt von hier http://www.perlmonks.org/?node_id=978445

avg123-de

Hallo,

habe beide Varianten ausprobiert, leider funktioniert es weder bei der einen noch bei der anderen.
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

ChrisD

Hallo,

Die mplayer-Version für Windows kennt u.a. die Optionen -gapless-audio, -unique und -daemon nicht. Weiterhin gibt es unter Windows das Ausgabegerät 'oss' nicht. Mit diesem Aufruf sollte etwas zu hören sein:
system("\"c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe\" -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");

Da die Option -daemon aber fehlt hängt FHEM bis dass mplayer beendet wird. Abhilfe schafft das Starten über CreateProcess, dazu brauchst du folgende Funktion in 99_myutils:

sub
CreateProcess($$) {
  my ($proc, $args) = @_;
  eval {
    use Win32::Process;

    $proc =~ s/\//\\/g;
    # Create the process:
    my $Process_Object;
    Win32::Process::Create( $Process_Object,
                            $proc,
                            $args,
                            0,
                            NORMAL_PRIORITY_CLASS,
                            "." );   
  }
}


Die Zeile mit 'system...' muss dann durch diese ersetzt werden:
CreateProcess("c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe","mplayer.exe -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");
Damit sollte mplayer laufen ohne FHEM zu blockieren.

Unter Windows gibt es kein Programm 'killall', die Zeilesystem("killall mplayer");muss daher durchsystem("taskkill /f /fi \"Imagename eq mplayer.exe\""); ersetzt werden.

Grüße,

ChrisD


avg123-de

Danke,
es klappt jetzt so, dass ich etwas höre, leider kann ich den Sender nur Wechseln, wenn ich FHEM komplett ausschalte und wieder neu starte.
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

ChrisD

Hallo,

Wenn mplayer über CreateProcess gestartet wird läuft er völlig unabhängig von FHEM, wenn FHEM beendet wird läuft der Prozess von mplayer weiter.

Bleibt FHEM übers Webinterface bedienbar nachdem du einen Stream gestartet hast ?
Wie beendest du FHEM ?

Hier meine akutelle Version von senderwahl:
sub senderwahl($) {
  my $wahl = Value("Radio");
  my @allesender = ("SWR1","SWR3","HR1","HR3","BR2","FFH","DasDing","RadioBob","YouFM_Rock");
  my @alleurls = ("http://mp3-live.swr.de/swr1rp_m.m3u","http://mp3-live.swr3.de/swr3_m.m3u","http://metafiles.gl-systemhaus.de/hr/hr1_2.m3u","http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u","http://streams.br-online.de/bayern2_2.m3u","http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u","http://mp3-live.dasding.de/dasding_m.m3u","http://streams.radiobob.de/bob-live/mp3-128/mediaplayerbob","http://metafiles.gl-systemhaus.de/hr/youfm_rock.m3u");

  system("taskkill /f /fi \"Imagename eq mplayer.exe\"");
  if ($wahl ne "ausgeschaltet") {
    for (my $i = 0; $i<@allesender; $i++) {
      if ($allesender[$i] eq $wahl) {
        if($alleurls[$i]=~/\.m3u/) {
          $alleurls[$i]="-playlist ".$alleurls[$i];
        }
        CreateProcess("c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe","mplayer.exe -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");
      }
    }
  }
}


Damit funktioniert der Senderwechsel bei mir.

Grüße,

ChrisD

avg123-de

Hallo,

ZitatBleibt FHEM übers Webinterface bedienbar nachdem du einen Stream gestartet hast ?
FHEM bleibt weiter bedienbar, nachdem ich den Stream gestartet habe.

ZitatWie beendest du FHEM ?
Indem ich die Eingabeaufforderung beende.

ZitatHier meine akutelle Version von senderwahl:

sub senderwahl($) {
  my $wahl = Value("Radio");
  my @allesender = ("SWR1","SWR3","HR1","HR3","BR2","FFH","DasDing","RadioBob","YouFM_Rock");
  my @alleurls = ("http://mp3-live.swr.de/swr1rp_m.m3u","http://mp3-live.swr3.de/swr3_m.m3u","http://metafiles.gl-systemhaus.de/hr/hr1_2.m3u","http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u","http://streams.br-online.de/bayern2_2.m3u","http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u","http://mp3-live.dasding.de/dasding_m.m3u","http://streams.radiobob.de/bob-live/mp3-128/mediaplayerbob","http://metafiles.gl-systemhaus.de/hr/youfm_rock.m3u");

  system("taskkill /f /fi \"Imagename eq mplayer.exe\"");
  if ($wahl ne "ausgeschaltet") {
    for (my $i = 0; $i<@allesender; $i++) {
      if ($allesender[$i] eq $wahl) {
        if($alleurls[$i]=~/\.m3u/) {
          $alleurls[$i]="-playlist ".$alleurls[$i];
        }
        CreateProcess("c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe","mplayer.exe -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");
      }
    }
  }
}

Deine Senderwahl funktioniert bei mir leider nicht, ich füge mal meine an:
######## radio ####################################################
# What  : Radiosender an Synology Diskstation einstellen
# Call  : { radio(senderwahl|volume) }
#
# mehr Stream URLS unter http://wiki.ubuntuusers.de/Internetradio/Stationen

sub radio($) {
my $radiosetting = shift(@_);
my $wahl = Value("Radio");
my $radiovolume = Value("Volume");
my @allesender = ("SWR1","SWR3","HR1","HR3","BR2","FFH","DasDing","RadioBob","YouFM_Rock");
my @alleurls = ("http://mp3-live.swr.de/swr1rp_m.m3u","http://mp3-live.swr3.de/swr3_m.m3u","http://metafiles.gl-systemhaus.de/hr/hr1_2.m3u","http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u","http://streams.br-online.de/bayern2_2.m3u","http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u","http://mp3-live.dasding.de/dasding_m.m3u","http://streams.radiobob.de/bob-live/mp3-128/mediaplayerbob","http://metafiles.gl-systemhaus.de/hr/youfm_rock.m3u");
#Log 1, "Radio Setting: $radiosetting, Sender: $wahl, Lautstärke: $radiovolume";
if ($radiosetting eq "volume") {
#Log 1, "neue Radio Lautstärke $radiovolume";
system("/etc/mplayer/volume -s $radiovolume");
}
elsif ($radiosetting eq "senderwahl") {
#Log 1, "neuer Sender $wahl";
system("taskkill /f /fi \"Imagename eq mplayer.exe\"");
if ($wahl ne "ausgeschaltet") {
for (my $i = 0; $i<@allesender; $i++) {
if ($allesender[$i] eq $wahl) {
CreateProcess("c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe","mplayer.exe -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");

}
}
}
}
}

Hiermit kann ich allerdings nicht mehr die Sender wechseln oder Radio wieder ausschalten. Zudem funktionieren nicht alle Sender und wenn ich einen anderen auswähle (einer von denen, der funktioniert), höre ich beide Sender gleichzeitig.
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

avg123-de

Hallo,

ich habe die Sender nochmals ausprobiert und habe festgestellt, dass von den 9 Sendern nur 4 funktionieren.
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

ChrisD

#10
Hallo,

Dass nur 4 Sender funktionieren kommt daher dass mplayer bei den anderen nicht erkennen kann dass es sich um eine Playlist handelt. Aus diesem Grund habe ich bei mir die Zeilen
        if($alleurls[$i]=~/\.m3u/) {
          $alleurls[$i]="-playlist ".$alleurls[$i];
        }
nach if ($allesender[$i] eq $wahl) { hinzugefügt. Dadurch wird mplayer angewiesen Links welche m3u enthalten als Playlisten zu interpretieren. Damit lassen sich die 9 Sender abspielen.

[Edit:
Bei deiner Version funktioniert das Umschalten bei mir. Du kannst noch versuchen in der Funktion CreateProcess die Zeile                            NORMAL_PRIORITY_CLASS,durch                            DETACHED_PROCESS|NORMAL_PRIORITY_CLASS,zu ersetzen.]

Grüße,

ChrisD

avg123-de

Hallo,

erst einmal danke für deine Hilfe, die Sender funktionieren jetzt alle soweit, dass ich sie hören kann. Wenn ich FHEM jetzt beende, läuft das Radio auch weiter.
Allerdings habe ich leider immer noch das Problem, dass wenn ich den Sender wechsle, er den Prozess nicht beendet und ich so immer noch mehrere Sender gleichzeitig höre.

Hier noch meine überarbeitete Senderwahl:
sub
CreateProcess($$) {
  my ($proc, $args) = @_;
  eval {
    use Win32::Process;

    $proc =~ s/\//\\/g;
    # Create the process:
    my $Process_Object;
    Win32::Process::Create( $Process_Object,
                            $proc,
                            $args,
                            0,
                            DETACHED_PROCESS|NORMAL_PRIORITY_CLASS,
                            "." );   
  }
}





######## radio ####################################################
# What  : Radiosender an Synology Diskstation einstellen
# Call  : { radio(senderwahl|volume) }
#
# mehr Stream URLS unter http://wiki.ubuntuusers.de/Internetradio/Stationen

sub radio($) {
my $radiosetting = shift(@_);
my $wahl = Value("Radio");
my $radiovolume = Value("Volume");
my @allesender = ("SWR1","SWR3","HR1","HR3","BR2","FFH","DasDing","RadioBob","YouFM_Rock");
my @alleurls = ("http://mp3-live.swr.de/swr1rp_m.m3u","http://mp3-live.swr3.de/swr3_m.m3u","http://metafiles.gl-systemhaus.de/hr/hr1_2.m3u","http://metafiles.gl-systemhaus.de/hr/hr3_2.m3u","http://streams.br-online.de/bayern2_2.m3u","http://streams.ffh.de/radioffh/mp3/hqlivestream.m3u","http://mp3-live.dasding.de/dasding_m.m3u","http://streams.radiobob.de/bob-live/mp3-128/mediaplayerbob","http://metafiles.gl-systemhaus.de/hr/youfm_rock.m3u");
#Log 1, "Radio Setting: $radiosetting, Sender: $wahl, Lautstärke: $radiovolume";
if ($radiosetting eq "volume") {
#Log 1, "neue Radio Lautstärke $radiovolume";
system("/etc/mplayer/volume -s $radiovolume");
}
elsif ($radiosetting eq "senderwahl") {
#Log 1, "neuer Sender $wahl";
system("taskkill /f /fi \"Imagename eq mplayer.exe\"");
if ($wahl ne "ausgeschaltet") {
        for (my $i = 0; $i<@allesender; $i++) {
if ($allesender[$i] eq $wahl) {                               
        if($alleurls[$i]=~/\.m3u/) {
          $alleurls[$i]="-playlist ".$alleurls[$i];
        }
CreateProcess("c:\\Program Files (x86)\\MPlayer for Windows\\mplayer.exe","mplayer.exe -allow-dangerous-playlist-parsing -ao win32 $alleurls[$i] -volume 10");

}
}
}
}
}
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

ChrisD

Hallo,

Ich hatte nicht verstanden dass du beim Senderwechsel mehrere Sender hörst. Wenn dies der Fall ist funktioniert taskkill nicht.

Welche Windows-Version benutzt du ?
Was erscheint wenn du eine Windows-Kommandozeile (Start - Ausführen - cmd) aufrufst und dort taskkill eingibst ?

Das Ändern der Lautstärke funktioniert übrigens auch nicht, dazu aber mehr wenn der Senderwechsel erst einmal korrekt funktioniert.

Grüße,

ChrisD

avg123-de

Hallo,

ZitatWelche Windows-Version benutzt du ?
Ich nutze Windows 7 Professional x64

ZitatWas erscheint wenn du eine Windows-Kommandozeile (Start - Ausführen - cmd) aufrufst und dort taskkill eingibst ?
Hier erscheint: "Der Befehl "taskkill" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

Grüße

avg123-de
FHEM auf virtualisiertem Debian in Hyper-V auf Dell Poweredge T110 II mit Windows Server 2012, 1x HM-LAN, verschiedene HomeMatic-Komponenten, Intertechno ITR-1500, Arduino Uno Ethernet mit RF-Modul, DeltaSol BX via VBus, Fritz!Box + Fritz!Fon, SmartVisu via Fronthem, Doorpi

ChrisD

Hallo,

Ich verwende auch Windows 7 Professional x64 und bei mir ist der Befehl vorhanden (unter XP Pro und Vista übrigens auch). Ich weiss aber nicht wie du ihn nachinstallieren kannst.

Du kannst alternativ versuchen tskill zu verwenden:
system("tskill mplayer");

Grüße,

ChrisD