|
 |

20.02.2011, 17:40
|
|
Benutzer
|
|
Registriert seit: 16.12.2008
Beiträge: 188
|
|
XBMC Fernsteuerung und "Radio"
Dieses Plugin dient dazu ein XBMC MediaCenter über den KNX-Bus fernzusteuern (ausgelegt für den Denro One, funktioniert aber auch mit allen anderen Tastern).
Gedacht ist es für folgendes Szenario:
Szenario
In einem Raum (Küche, Bad, usw.) steht ein Fernseher mit aktiven Lautsprechern und ein MediaCenter-PC mit XBMC dient als Zuspieler. Dies Plugin macht zusammen mit einem 2 bis 4-fach Tastsensor (eventuell mit Infodisplay) eine Fernsteuerung bzw. ein Radio, ähnlich wie die klassischen Unterputz-Radios. Radio deshalb, weil zur Bedienung nicht der Fernseher benötigt wird, die Bedienung mit KNX-Tastern erfolgt und standardmäßig Streams von Radiostationen ausgewählt und abgespielt werden. Die Bedienung ist auf die wichtigsten Grundfunktion beschränkt (vergleichbar mit den einfachen Unterputzradios).
Funktionsweise
Ein- und Ausgeschaltet wir das MediaCenter über eine schaltbare Steckdose oder das Power On/Off WOL-Plugin. Das Ein-/Ausschalten könnte z.B. zusammen mit dem Licht oder durch einen Präsenzmelder erfolgen, auch ein Ein-/Ausschalten über die GA für "Play" ist natürlich möglich.
Beim Einschalten wird eine Playlist mit Radiostreams (Beispiel im Anhang) automatisch abgespielt (Einstellbar im XBMC unter System -> Einstellungen -> Skin -> Allgemein, die Funktion ist abhängig vom verwendeten Skin).
Mit Vor- und Zurücktasten kann in der Playlist gesprungen und damit eine Radiostation ausgewählt werden. Die Standardfunktion wie Play/Pause und Mute/Lautstärke sind natürlich auch vorhanden.
Das Plugin reagiert unterschiedlich, je nach aktueller Situation: - Wenn z.B. ein Video geschaut wird, dann fungiert das Plugin als Fernbedienung, d.h. die Wiedergabe kann z.B. pausiert und die Lautstärke geändert werden.
- Läuft gerade keine Musik oder ein Film, dann wird bei einem Druck auf Play eine Standardplaylist mit Streams zu den Radiostationen geladen und das Abspielen gestartet, d.h. das Plugin arbeitet wie oben beschrieben als "Radio".
Der Denro One hat einen Nachteil, dass trotz des schönen Displays keine über den KNX-Bus übertragenen freien Texte anzeigen werden können. Sollte ein Infodisplay oder z.B. der Gira Tastsensor 3 Plus im Einsatz sein, dann kann der Name des aktuellen Streams ebenfalls angezeigt werden.
Konfiguration
Als Voraussetzung wird mindestens XBMC "Dharma" 10.0 benötigt (erst dieses bietet die verwendete JSON-RPC-Schnittstelle). - Im XBMC muss der Webserver aktiviert sein (System -> Einstellungen -> Netzwerk)
- Anschließend wird bei XBMC eine Standard-Playlist benötigt, diese kann in XBMC erzeugt oder als Vorlage die angehängte in das Benutzerverzeichnis kopiert werden (bei Linux mit XBMC Live ist es "/home/xbmc/.xbmc/userdata/playlists/music/")
- Als nächstes das Plugin im Wiregate Gateway erzeugen und die Gruppenadressen (GA) im Definitionsbereich anpassen. Wenn eine GA nicht verwendet wird, diese einfach leer lassen.
Die Funktion der einzelnen GAs kann den Kommentaren entnommen werden.
- Dann muss XBMC noch ein- und ausgeschaltet werden, dies geschieht z. B. über das Power On/Off-Plugin oder einer schaltbaren Steckdose.
- Jetzt noch die GAs den Tasten eines Tastsensors zuordnen bzw. in meinem Fall der Audio-GAs des Denro One und schon sollte es funktionieren
Hier ist der Quellcode des Plugins:
Code:
# Plugin um ein XBMC-MediaCenter als "Radio" zu verwenden
#
### Definitionen
# Gruppenadressen zur Steuerung mit dem Denro One
# Nicht benötigte Gruppenadressen leer lassen
my $volume_ga = "8/1/0"; # Obj. 211 Audio-Lautstärke
my $volume_status_ga = "8/1/1"; # Obj. 212 Status der Audio-Lautstärke
my $mute_ga = "8/1/2"; # Obj. 213 Audio-Stumm
my $back_ga = "8/1/3"; # Obj. 214 Audio-Zurück, bzw. Vor-/Zurückspringen (1/0) wenn $next_ga = ""
my $play_ga = "8/1/4"; # Obj. 215 Audio-Abspielen
my $play_status_ga = "8/1/5"; # Obj. 216 Status der Audio-Wiedergabe
my $next_ga = ""; # Obj. 217 Audio-Vor, bzw. wenn "" dann ist $back_ga Vor-/Zurückspringen (beim Denro One nicht verwendet)
# Weitere Gruppenadressen
my $stop_ga = ""; # Wiedergabe beenden
my $title_status_ga = ""; # Aktuell abgespielter Titel
my $rewind_ga = ""; # Zurückspulen, bzw. Vor-/Zurückspulen (1/0) wenn $fast_forward_ga = ""
my $fast_forward_ga = ""; # Vorspulen, bzw. wenn "" dann ist $rewind_ga Vor-/Zurückspulen
# XBMC Einstellungen
my $xbmc_ip = "192.168.0.24"; # IP-Adresse vom MediaCenter mit XBMC
my $xbmc_port = "8080"; # Port des XBMC-Webservers
my $user = "xbmc"; # Benutzername für Login
my $password = "xbmc"; # Passwort des Benutzers
my $default_volume = "50"; # Lautstärke beim Einschalten von 0 bis 100 und "" für keine Default-Lautstärke
my $path_to_playlist = "/home/xbmc/.xbmc/userdata/playlists/music/Radio.m3u"; # Pfad zur Radio-Playlist auf dem XBMC
### Ende Definitionen
# Eigenen Aufruf-Zyklus auf 15 Sekunden setzen
# der Aufrufzyklus ist unabhängig von der Taktzeit und muss kürzer sein!
$plugin_info{$plugname.'_cycle'} = 15;
# Plugin an Gruppenadressen "anmelden"
if ( $volume_ga ) { $plugin_subscribe{$volume_ga}{$plugname} = 1; }
if ( $mute_ga ) { $plugin_subscribe{$mute_ga}{$plugname} = 1; }
if ( $back_ga ) { $plugin_subscribe{$back_ga}{$plugname} = 1; }
if ( $play_ga ) { $plugin_subscribe{$play_ga}{$plugname} = 1; }
if ( $next_ga ) { $plugin_subscribe{$next_ga}{$plugname} = 1; }
if ( $stop_ga ) { $plugin_subscribe{$stop_ga}{$plugname} = 1; }
# Weitere globale Variablen
my $playlist_id; # ID der aktuellen Playlist
my $current_volume; # Aktuelle Lautstärke
my $current_title; # Aktuell abgespielter Titel
my $current_play_status; # Status des Player (Wiedergabe/Pause)
my $current_volume; # Aktuelle Laustärke
if (%msg) {
if ($msg{'apci'} eq "A_GroupValue_Write") {
if ($msg{'dst'} eq $volume_ga) {
#Wert vom Bus
if (defined $msg{'value'}) {
$current_volume = volume($msg{'value'});
knx_write($volume_status_ga,$current_volume,5);
}
} elsif ($msg{'dst'} eq $mute_ga) {
if (defined $msg{'value'}) {
#$current_volume = volume_status();
#if ( $msg{'value'} == "1" && $current_volume > 0) {
# mute();
#} elsif ($msg{'value'} == "0" && $current_volume == 0) {
# mute();
#}
$current_volume = volume(0);
knx_write($volume_status_ga,$current_volume,5);
}
} elsif ($msg{'dst'} eq $back_ga) {
if (defined $msg{'value'}) {
if ( !$next_ga ) {
if ( $msg{'value'} == "1" ) {
skip_next();
} else {
skip_back();
}
} else {
if ( $msg{'value'} == "1" ) {
skip_back();
}
}
}
} elsif ($msg{'dst'} eq $rewind_ga) {
if (defined $msg{'value'}) {
if ( !$fast_forward_ga ) {
if ( $msg{'value'} == "1" ) {
fast_forward();
} else {
rewind();
}
} else {
if ( $msg{'value'} == "1" ) {
rewind();
}
}
}
} elsif ($msg{'dst'} eq $fast_forward_ga) {
if (defined $msg{'value'}) {
if ( $msg{'value'} == "1" ) {
fast_forward();
}
}
} elsif ($msg{'dst'} eq $play_ga) {
my $play_status = play_status();
if ( $msg{'value'} == "1" && $play_status == "0") {
$current_play_status = play();
} elsif ($msg{'value'} == "0" && $play_status == "1") {
$current_play_status = pause();
}
knx_write($play_status_ga,$current_play_status,1);
} elsif ($msg{'dst'} eq $next_ga) {
if (defined $msg{'value'}) {
if ( $msg{'value'} == "1" ) {
skip_next();
}
}
}
}
}
# Um die Busbelastung zu minimieren, wird der Status nur aktualisiert,
# wenn das MediaCenter auf einen Ping antwortet
my $ping_result = ping_test( $xbmc_ip );
if ( $ping_result == 1 ) {
# Status aktualisieren
if ( $volume_status_ga ) {
$current_volume = volume_status();
knx_write($volume_status_ga,int($current_volume),5);
}
if ( $play_status_ga ) {
$current_play_status = play_status();
knx_write($play_status_ga,$current_play_status,1);
}
if ( $title_status_ga ) {
$current_title = current_title();
knx_write($title_status_ga,$current_title,16);
}
}
return;
sub volume {
my ($volume) = @_;
if ( $volume eq "" ) { $volume == 0; }
my $method = "XBMC.SetVolume";
my $result = json_request($method, int($volume));
$result =~ m#.*"result"\s:\s(\d*).*#s;
return $1;
}
sub volume_status {
my $method = "XBMC.GetVolume";
my $result = json_request($method);
#print $result."\n";
$result =~ m#.*"result"\s:\s(\d*).*#s;
return $1;
}
sub mute {
my $method = "XBMC.ToggleMute";
my $result = json_request($method);
#print $result."\n";
$result =~ m#.*"result"\s:\s(\d*).*#s;
return $1;
}
sub skip_back {
my $player = active_player();
if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
my $method = $player."Player.SkipPrevious";
my $result = json_request($method);
$result =~ m#.*"result"\s:\s"(\w*)".*#s;
return $1;
}
sub play {
my $player = active_player();
if ( $player eq "" ) {
$player = "Audio";
radio_playlist_create(); # Neue Radio-Playlist erzeugen
volume( $default_volume ); # Default-Lautstärke setzen
play_list( $player ); # Ersten Eintrag der Playlist abspielen
return 1;
}
my $playStatus = play_status( $player );
if ( $playStatus == "1" ) {
return 1;
} else {
my $method = $player."Player.PlayPause";
my $result = json_request($method);
#print $result."\n";
$result =~ m#.*"paused"\s:\s(\w*).*"playing"\s:\s(\w*).*#s;
my $pause = $1;
my $playing = $2;
#print "Playing: $playing Pause: $pause\n";
if ( $playing eq "true" && $pause eq "false" ) {
return 1;
} else {
return 0;
}
}
return 0;
}
sub pause {
my $player = active_player();
if ( !$player ) { return 0; };
my $playStatus = play_status( $player );
if ( $playStatus == 0 ) {
return 0;
} else {
my $method = $player."Player.PlayPause";
my $result = json_request($method);
#print $result."\n";
$result =~ m#.*"paused"\s:\s(\w*).*"playing"\s:\s(\w*).*#s;
my $pause = $1;
my $playing = $2;
#print "Playing: $playing Pause: $pause\n";
if ( $playing eq "true" && $pause eq "false" ) {
return 1;
} else {
return 0;
}
}
return 0;
}
sub play_list {
(my $player) = @_;
if ( !$player ) {
$player = active_player();
if ( !$player ) {
return 0; # Wenn nichts aktiv die Funktion verlassen
}
}
my $method = $player."Playlist.Play";
my $playing_id = get_playing_id($player);
if ( $playing_id eq "" ) { $playing_id = 0; }
my $result = json_request($method, $playing_id);
#print "\n$result\n";
}
sub skip_next {
my $player = active_player();
if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
my $method = $player."Player.SkipNext";
my $result = json_request($method);
$result =~ m#.*"result"\s:\s"(\w*)".*#s;
return $1;
}
sub stop {
my $player = active_player();
if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
my $method = $player."Player.Stop";
my $result = json_request($method);
$result =~ m#.*"result"\s:\s"(\w*)".*#s;
return $1;
}
sub play_status {
(my $player) = @_;
if ( !$player ) {
$player = active_player();
if ( $player eq "" ) {
return 0; # Wenn nichts aktiv die Funktion verlassen
}
}
my $method = $player."Player.State";
my $result = json_request($method);
#print $result."\n";
$result =~ m#.*"partymode"\s:\s(\w*),.*"paused"\s:\s(\w*),.*"playing"\s:\s(\w*).*#s;
my $partymode = $1;
my $pause = $2;
my $playing = $3;
if ( $playing eq "true" && $pause eq "false" ) {
return 1;
} else {
return 0;
}
}
sub current_title {
(my $player) = @_;
if ( !$player ) {
$player = active_player();
if ( !$player ) {
return 0; # Wenn nichts aktiv die Funktion verlassen
}
}
my $method = $player."Playlist.GetItems";
my $result = json_request($method);
my @labels;
print "\Result: $result\n";
while ($result =~ s#"label"\s:\s"(.*?)"##s) {
push(@labels, $1);
}
#print "\nAlle Label: @labels\n";
my $current_id = get_playing_id($player);
$labels[$current_id]=substr($labels[$current_id],0,14); # String auf 14 Byte kürzen (DPT 16)
#print "\nAktueller Titel: $labels[$current_id]\n";
return "$labels[$current_id]";
}
sub rewind {
my $player = active_player();
if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
my $method = $player."Player.Rewind";
my $result = json_request($method);
$result =~ m#.*"result"\s:\s"(\w*)".*#s;
return $1;
}
sub fast_forward {
my $player = active_player();
if ( !$player ) { return 0; } # Wenn nichts aktiv die Funktion verlassen
my $method = $player."Player.Forward";
my $result = json_request($method);
$result =~ m#.*"result"\s:\s"(\w*)".*#s;
return $1;
}
sub json_request {
my ($method, $param) = @_;
my $command = "curl -s -S -m 3 -X POST -d '".'{"jsonrpc": "2.0", "method": "'.$method.'"';
if ( $param ne "" ) {
$command = $command.', "params": '.$param;
}
my $command = $command.', "id": 1}'."'"." http://$xbmc_ip:$xbmc_port/jsonrpc";
#print "Command: ".$command."\n";
my $result = `$command`;
return $result;
}
sub radio_playlist_create {
# Eine vorhandene Playlist leeren
my $method = "AudioPlaylist.Clear";
my $result = json_request($method);
# Playlist neu füllen mit den Inhalten der angegebenen Playlist
$method = "AudioPlaylist.Add";
my $params = '{ "playlist-file" : "'.$path_to_playlist.'"}';
$result = json_request($method, $params);
}
sub active_player {
my $method = "Player.GetActivePlayers";
my $result = json_request($method);
print $result."\n";
$result =~ m#.*"audio"\s:\s(\w*),.*"picture"\s:\s(\w*),.*"video"\s:\s(\w*).*#s;
if ( $1 eq "true" ) {
# Audio aktiv
return "Audio";
} elsif ( $2 eq "true") {
# Picture aktiv
return "Picture";
} elsif ( $3 eq "true") {
# Video aktiv
return "Video";
} else {
# Nichts ist aktiv
return;
}
}
sub get_playing_id {
(my $player) = @_;
if ( !$player ) {
$player = active_player();
if ( !$player ) {
return 0; # Wenn nichts aktiv die Funktion verlassen
}
}
my $method = $player."Playlist.GetItems";
# my $params = '{ "fields": ["title","artist"] }';
my $result = json_request($method);
$result =~ m#.*"current"\s:\s(\d+),.*"end"\s:\s(.*),.*"start"\s:\s(\d+),.*"total"\s:\s(\d+).*#s;
#print $result."Current ID: $1 Letzte ID: $2 Start ID: $3 Anzahl: $4\n";
return $1;
}
sub ping_test {
(my $ip_adr) = @_;
my $command = "ping -c 2 -w 5 ".$ip_adr;
my $status = `$command`;
if($status =~ /bytes from/) { return 1; }
elsif($status =~ /0 received/) { return 0; }
return "Ein Fehler ist beim Testen der IP $ip_adr aufgetreten";
}
Geändert von panzaeron (20.02.2011 um 20:00 Uhr)
Grund: Kleinen Fehler im Code beseitigt
|

20.02.2011, 19:20
|
|
Erfahrener Benutzer
|
|
Registriert seit: 12.11.2009
Beiträge: 3.455
|
|
Wow! Perfekt, bin begeistert, eine sehr schöne Idee!
Stefan
__________________
Stefan Werner, Geschäftsführer Elaborated Networks GmbH. Link zum Shop.
Bitte keine PNs. Fragen gehören ins Forum oder an support ät wiregate.de
Alle Informationen und Aussagen nach bestem Wissen und Gewissen.
|

21.02.2011, 00:12
|
|
Benutzer
|
|
Registriert seit: 16.12.2008
Beiträge: 188
|
|
Zitat von StefanW
Wow! Perfekt, bin begeistert, eine sehr schöne Idee!
Stefan
|
Danke  , vielleicht noch als Ergänzung warum ich XBMC und einen MediaCenter-PC nutze bzw. vorgesehen habe und keinen MediaPlayer wie z. B. einen WD Live.
Warum XBMC ist schnell beantwortet, ich finde das System gut  Es ist sehr flexibel hat eine schicke Oberfläche, ist durch Plugins erweiterbar und wenn die PVR Funktionalität stabil läuft für mich optimal. Fehlt nur noch ein Plugin zur Steuerung der KNX Komponenten...
Der benötigte PC ist auch erschwinglich, ein Intel Atom oder AMD-System mit NVidia ION-Grafik ist ausreichend und verhältnismäßig preiswert. Auch die Leistungsaufnahme hält sich in Grenzen, zwar mehr als z.B. ein WD Live aber weniger als ein "normaler" PC. Auch die Bootzeiten sind für mich akzeptabel, mit einem optimierten Betriebssystem wie z. B. openelec und einer schnellen SSD liegen die Bootzeiten bis zum Abspielen eines Streams bei vielleicht 15 Sekunden, die kleine Multimediaplayer sind nicht wesentlich schneller...
Auch die kleinen Unterputzradios kommen für mich nicht in Frage, allein schon wegen dem schlechten Klang. Ein gutes aktiv System oben auf dem Küchenschrank oder gute Einbaulautsprecher klingt um längen besser. Aber die simple Bedienung gefällt mir, daher ja auch dieses Plugin
Der Nachteil ist natürlich der (wesentlich) höhere Preis, allein die aktiv Lautsprecher kosten soviel wie das Unterputzradio oder ein WD Live. Auch die angesprochene elektrische Leistungsaufnahme ist viel höhere (Verstärker nicht vergessen). Die aufwändigere Installation und Konfiguration kommt noch oben drauf (für mich nicht so wichtig, da eh ein Neubau und Linux kein Problem ist)...
Geändert von panzaeron (21.02.2011 um 00:20 Uhr)
|

23.02.2011, 00:08
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 07.07.2007
Beiträge: 11.779
|
|
Huh, ich muss mich glaube ich mit dem XBMC jetzt echt mal tiefer beschäftigen  (Baustelle #751)
Wenn ich fragen darf, wo kommt das TV-Signal her? Da klafft für mich gedanklich irgendwie noch eine kleine Lücke, das sauber und vor allem bedienbar (EPG,...) unter einen Hut (XBMC eben) zu bekommen..
Makki
__________________
EIB/KNX & HS3(+Lüfter+picoPSU80), Multiroom-AV mit Russound,mpd,vdr,DM8000, Profilux II+, N141 DALI, DMX, dez. Lüfter (RS485), Wärmepumpe (RS422), 30+ 1-Wire Temp,Luft&Bodenfeuchte,IRTrans
WireGate - Supportforum - bitte keine PN's!
|

23.02.2011, 00:51
|
|
Benutzer
|
|
Registriert seit: 16.12.2008
Beiträge: 188
|
|
@makki
Tja, das ist die Baustelle bei XBMC.
Ich nutze für den TV-Empfang (in der Testumgebung) einen extra Atom-NAS-Server auf dem TVHeadEnd als Streaming-Server läuft. Als TV-USB-Adapter nutze ich eine Technotrend 3650 die Umschaltzeiten sind super (auch bei HD), später werden es mal vier TT werden.
Für XBMC gibt es eine extra PVR-Version die trotz des frühen Entwicklungsstadiums gut läuft. In Verbindung mit TVHeadEnd funktioniert aber Timeshift noch nicht und beim EPG fehlen die detaillierten Beschreibungen. Aber ich hoffe dass die Entwickler das Problem bald in den Griff bekommen (in Verbindung mit VDR funktioniert es).
Als Hinweis, dieses Plugin läuft nicht mit der PVR-Version von XBMC, aber auch das wird hoffentlich bald gefixt...
|

23.02.2011, 01:45
|
 |
Erfahrener Benutzer
|
|
Registriert seit: 07.07.2007
Beiträge: 11.779
|
|
Zitat von panzaeron
Tja, das ist die Baustelle bei XBMC.
|
Ok, zwar leicht OT, aber dann stimmt wenigstens meine Wahrnehmung noch halbwegs
Ich bin halt jetzt (nach ca. 5 leicht/schwer gescheiterten vdr/o.ä.-Projekten in 1999-2007) ein verwöhntes DM800(0)-Kind: Klartext, ich frickle ja auch mal gerne ein WE, aber bei der DM kann ich das, ich muss es nicht zwangsweise, damit Aufnahmen zuverlässig, Timeshift, EPG einfach tun 
Als Mediacenter ist das XBMC aber definitiv das g***, weil wenns um Fotos oder Musik geht kann man wiederum die DM halbwegs in die Tonne  geht zwar, sieht aber k* aus und ist k* zu lahm. Browser ist nach wie vor ein Drama auf der Dream, aufm XBMC macht man den halt mit der Cometvisu auf
Fürs DVB-S Radio (ich steh da eher auf 320, nicht 64kBit..) hab ich dagegen ja zwei vdr+wechselweise mpd mit Opera DVB-S USB auf ner HW ähnlich dem WG laufen, ein selbiger Geode und ein C7 (+30 EUR, die Opera gibts aber glaube ich schon lang nicht mehr ausser Restposten in der Bucht)
-> Rock-solid 3x365x24 - nicht ein knackser(sigh! allerding waren damals vorher zwei feuchte Nächte für den Treiber fällig.. gefrickel pur, aber naja, offenbar hat sichs dafür rentiert, weil wenns danach jahrelang rennt, vergisst man das patchen und backporten von ein paar Kerneltreibern schnell..)
Und nun stehe ich fürs Heimkino vor der immernoch offenen Entscheidung: weitere DM800SE oder HTPC mit XBMC..
Beides will ich nicht, wenn im 2-Personen Haushalt ein 28-Port Switch nicht reicht ist das doch bestimmt ganz normal 
Also nicht wegen der HW-Kosten, mein Gott, seis drum, aber die doppelte/unterschiedliche Ansteuerung, Bedienung: da steckt im Detail IMHO echt der Teufel! Die Meldungen der Mülltonnen etc.pp.-> alles 2x machen.
Den "Streamer" hätte ich ja schon, macht die DM8000 mit 3 Tunern wunderbar. Aber TV ohne EPG ist halt IMHO nix und wenn ich dann mal schnell ne Aufnahme programmieren will zum Notebook latschen: 
(sicherlich lässt sich das auch als XBMC-Plugin machen, sofern das EPG vorliegt, aber jemand muss es machen, wäre dann Projekt #752)
Werd mir das PVR-Plugin morgen mal ansehen, so long,
Makki, (der XBMC ziemlich cool findet, aber insgesamt immernoch ziemlich unschlüssig ist..)
__________________
EIB/KNX & HS3(+Lüfter+picoPSU80), Multiroom-AV mit Russound,mpd,vdr,DM8000, Profilux II+, N141 DALI, DMX, dez. Lüfter (RS485), Wärmepumpe (RS422), 30+ 1-Wire Temp,Luft&Bodenfeuchte,IRTrans
WireGate - Supportforum - bitte keine PN's!
|

23.02.2011, 14:13
|
|
Benutzer
|
|
Registriert seit: 16.12.2008
Beiträge: 188
|
|
@makki
Nochmal kurz OT, für Fernsehen taugt XBMC noch nicht, auch mit der PVR-Funktionalität, weil halt Timeshift, Record, epg noch nicht bzw. nur schlecht funktionieren. Aber zum testen ganz interessant und wenn die Entwicklung erstmal weiter ist, wird das bestimmt eine ganz gute Sache...
Aber um auf das Thema zurück zukommen, zum Radiohören nutze ich auch TVHeadEnd und zwar dann, wenn es keinen Internetstream in guter Qualität gibt...
Wie geht das? Ich nutze eine Playlist wie im ersten Post wo ich als Stream-URL den rtsp Stream von TVHeadEnd eintrage, z. B. so einer:
Code:
rtsp://192.168.0.2:9981/service/_dev_dvb_adapter0_STB0899_Multistandard12265500_H_satconf_1_6f22
(zu finden im WebInterface von TVHeadEnd unter "Configuration" -> "TV Adapters" -> "Services" -> "Play"-Link). Dabei handelt es sich um einen mp2-Stream mit dem Nachteil, dass kein "lesbarer" Name während des abspielens angezeigt wird, sondern nur die URL. Das funktioniert auch mit dem normalen XBMC "Dharma" 10.0, d. h. ohne PVR Ergänzung.
|
| Themen-Optionen |
|
|
| Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 03:16 Uhr.
|