Der Xtreamer oder auch der Trekstor TV eignen sich ja wunderbar als Streaming client für vdr Inhalte, da sie folgende Vorzüge aufweisen :
- klein
- lüfterlos (Trekstor)
- ruckelfreies Abspielen von HD Inhalten
- mit ca. 100-130 EUR (Stand Juni/Juli 2011) wesentlich günstiger als ein PC
Die Nachteile waren jedoch bisher :
- kein direktes Abspielen von unicast streams (d.h. z.B. vdr über streamdev-server), hierzu war entweder ein gepatchtes ushare auf dem xtreamer erforderlich oder Einbindung von mediatomb oder einem anderen UPNP Server.
- durch die daraus resultierende komplexe Menüstruktur überhaupt nicht Ehefrauen-/Freundinnen-tauglich.
Jetzt habe ich mich, inspiriert durch armelle's post hier : Xtreamer SideWinder Media Player alias Trekstor TV doch mal dieses Wochenende hingesetzt um zu sehen, was möglich ist.
Das Resultat ist - wie ich finde - recht vielversprechend. Durch eine einfache Modifikation der Xtreamering-RSS-Feeds läßt sich ein einfaches vdr Menü einbinden, das von einem vdr Server mit streamdev-server plugin die Kanalliste abfrägt (http://server:3000/channels.m3u), diese dann in einen RSS Feed umwandelt und auf dem Xtreamer/Trekstor anzeigt.
[Blocked Image: http://vdr.ahlgrim.net/bild1.jpg]
[Blocked Image: http://vdr.ahlgrim.net/bild2.jpg]
[Blocked Image: http://vdr.ahlgrim.net/bild3.jpg]
[Blocked Image: http://vdr.ahlgrim.net/bild4.jpg]
Hierzu benötigen wir folgendes :
1. Einen Xtreamer oder Trekstor TV mit Firmware mindestens 2.5.2 (wegen Xtreamering)
2. einen FAT32-formatierten USB Stick
3. mavvy's fakeshell http://www.mavvy.net/reviews/xtreamer/hands-on/telnet um Telnet-Zugriff auf die Box zu kriegen
4. einen Telnet-client, z.B. putty
5. einen vdr Server mit streamdev-server plugin
Das Xtreamering ruft eine Datei index.php auf im Verzeichnis /scripts/Xtreamering auf dem USB-Stick (oder auf der Festplatte, mein xtreamer hat keine Platte). Also einfach die folgende Datei auf einen USB Stick kopieren in /scripts/Xtreamering , USB stick einstecken und den xtreamer einschalten.
<?
echo "<?xml version='1.0' ?>\n";
?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<mediaDisplay name="onePartView"
sideLeftWidthPC="0"
itemImageXPC="5"
itemXPC="10"
itemYPC="25"
itemWidthPC="65"
capWidthPC="70"
showDefaultInfo="yes"
showHeader="no"
unFocusFontColor="101:101:101"
focusFontColor="255:255:255" idleImageXPC="40" idleImageYPC="40" idleImageWidthPC="20" idleImageHeightPC="26">
<text offsetXPC=10 offsetYPC=8 widthPC=50 heightPC=10 fontSize=30 backgroundColor=-1:-1:-1 foregroundColor=255:255:255>
vdr client
</text>
</mediaDisplay>
<item_template>
</item_template>
<channel>
<title>vdr client</title>
<description>vdr rss client</description>
<item>
<title>Fernsehen</title>
<link>live-tv.php</link>
<description>Live TV Signal</description>
</item>
<item>
<title>Was läuft jetzt ?</title>
<link>epg.php</link>
<description>EPG browser</description>
</item>
<item>
<title>Aufnahmen</title>
<link>aufnahmen.php</link>
<description>Aufnahmen angucken</description>
</item>
<item>
<title>Timer</title>
<link>timer.php</link>
<description>Timer bearbeiten</description>
</item>
</channel>
</rss>
Display More
Wählt man nun den Menüpunkt "Fernsehen" aus, wird das Script live-tv.php ausgeführt. Es muß im gleichen Verzeichnis liegen :
<?
echo "<?xml version='1.0' ?>\n";
?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<mediaDisplay name="threePartsView"
sideLeftWidthPC="0"
itemImageXPC="5"
itemXPC="10"
itemYPC="25"
itemFontSize="25"
itemWidthPC="65"
itemHeightPC="10"
capWidthPC="80"
showDefaultInfo="yes"
showHeader="no"
unFocusFontColor="101:101:101"
focusFontColor="255:255:255" idleImageXPC="40" idleImageYPC="40" idleImageWidthPC="20" idleImageHeightPC="26">
<text offsetXPC=10 offsetYPC=8 widthPC=50 heightPC=10 fontSize=30 backgroundColor=-1:-1:-1 foregroundColor=255:255:255>
vdr client - Fernsehen
</text>
</mediaDisplay>
<item_template>
</item_template>
<channel>
<title>vdr client</title>
<description>vdr rss client</description>
<?
// Diese Parameter muessen angepasst werden
// /////////////////////////////////////
$maxchannels=100;
$streamport=3000;
$playlistname="channels.m3u";
$vdrserver="miraculix";
// //////////////////////////////////////
// Wir verwenden ein template fuer die URL und setzen spaeter die Werte ein
$playlistURL = "http://" . $vdrserver . ":" . $streamport . "/" . $playlistname;
$itemtemplate = " <item>\n <title>TITLE</title>\n <link>LINK</link>\n <enclosure type=\"video/mp2\" url=\"LINK\" />\n </item>\n\n";
// Jetzt fragen wir vom streamdev-server die Channel-Liste ab (channels.m3u)
// Beispiel : http://192.168.0.1:3000/channels.m3u
$playlistfile = fopen ($playlistURL,"r");
$zeilennummer=0;
$itemurl = "";
$zeile=true;
// Jetzt lesen wir Zeile fuer Zeile die Playlist vom streamdev Server und setzen die Werte ins Template ein
while ( ($zeile) && ($zeilennummer < $maxchannels *2 + 1 ) )
{
$zeile = fgets($playlistfile,100);
$zeile=rtrim($zeile);
if (substr($zeile,0,7) == "#EXTINF")
{
$title = str_replace("#EXTINF:0,","",$zeile);
$itemurl = str_replace ("TITLE",$title,$itemtemplate);
}
if (substr($zeile,0,4) == "http")
{
$itemurl = str_replace ("LINK",$zeile,$itemurl);
echo $itemurl;
}
$zeilennummer += 1;
}
fclose($playlistfile);
?>
</channel>
</rss>
Display More
Das script lädt die Playliste vom streamdev-server, wandelt sie in einen RSS Feed um und zeigt sie als einfache Liste auf dem Bildschirm an.
Soweit, so gut.
Falls wir nun den Xtreamer ohne USB-Stick oder Festplatte betreiben möchten, geht das natürlich auch - nur daß wir dann direkt mit einer RSS Datei einsteigen müssen und die php Datei über einen Link auf dem lokalen Webserver ablegen müssen. Der Webserver auf dem xtreamer muß also aktiviert sein !
Folgende Schritte sind nun nötig :
1. mavvy's fakeshell (siehe link oben) auf den USB Stick kopieren
2. USB Stick in den Xtreamer stecken
3. mit einem Webbrowser http://<xstreamer-ip>/media/sda1/fakeshell.php aufrufen. Es erscheint eine Webseite, die an eine Shell erinnert.
4. Den Menüpunkt TELNETD auswählen und Enter drücken.
Die fakeshell.php ruft nun busybox mit dem telnetd Parameter auf und startet einen telnet daemon auf dem xtreamer
5. Mit Telnet auf den xtreamer verbinden und folgende Befehle eingeben (Annahme : die Scripts von oben befinden sich in /mnt/usbmounts/sda1/scripts/Xtreamering/index.php und live-tv.php)
cd /usr/local/bin/scripts
mv home_off.rss home_off.rss.original
cp /mnt/usbmounts/sda1/scripts/Xtreamering/index.php home_off.rss
cp /mnt/usbmounts/sda1/scripts/Xtreamering/live-tv.php /sbin/www/
vi home_off.rss
Im vi müssen wir nun noch zwei kleine Änderungen vornehmen, um
1. PHP code aus dem rss feed entfernen
2. die live-tv.php vom lokalen Webserver aufrufen
Hierzu die ersten Zeilen wie folgt ändern.
aus
<?
echo "<?xml version='1.0' ?>\n";
?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
machen wir
<?xml version='1.0' ?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
und aus
<item>
<title>Fernsehen</title>
<link>live-tv.php</link>
<description>Live TV Signal</description>
</item>
wird
<item>
<title>Fernsehen</title>
<link>http://127.0.0.1/live-tv.php</link>
<description>Live TV Signal</description>
</item>
Das war's - jetzt kann einfach durch klicken auf das "Xtreamering" Menü ferngesehen werden. Natürlich muß in der live-tv.php noch der Servername und ggf. der port angepaßt werden. Da ich eine lange channels.conf habe, habe ich die Länge auf 100 Kanäle begrenzt. Läßt sich aber auch einfach ändern (Zeilen 37-40)