WDTV mit Android fernsteuern

Keine Angst, die App hat nichts mit Schalke oder Fußball am Hut. Mit dem Programm WDTV Mediaplayers Remote lassen sich die WDTV Live Hub, Live, Live Plus, Gen2 und das normale WDTV per Handy steuern. Die normale Fernbedienung wird durch das Programm obsolet.

Das Programm ist sehr schön Aufgebaut. Im unteren Drittel der Anzeige kann man sich mit Fingerbewegungen durch das Menü bewegen, ein Schütteln des Handys ersetzt hält den Film an. Die Lautstärke kann mit dem Regler des Mobiltelefons eingestellt werden.

Wer wie ich gerne mal die eher mäßige WDTV Fernbedienung  verlegt wird sehr glücklich mit dieser App sein :).

Link zum Android Market

WDTV – Moviesheets

Das WDTV tut bei mir seinen Dienst. Es spielt Filme ab und macht sonst keine Probleme. Ich hatte nach der Anschaffung die Custom Firmware von B-rad installiert, mich aber weiter nicht damit beschäftigt, da ich irgendwie nach kürzester Zeit Kopfschmerzen bekomme wenn ich mich durch das Forum, Wiki oder die Dokumentation arbeite. Den absolut ekelhaften Hintergrund der GUI (zu sehen in dem Video unten) hatte ich sofort entfernt, doch Moviesheets oder die Youtube Funtkion habe ich bis heute nicht genutzt. Youtube funktioniert prinzipiell ganz gut, die Eingabe per Fernbedienung möchte ich mir jedoch nicht zumuten.

Inzwischen reizt die Moviesheets Option. Prinzipiell ist die Geschichte auch ganz einfach.

Es gibt 2 verschiedene Möglichkeiten statt einer Verzeichnissliste Bilder anzuzeigen. Zum einen gibt es ein zentrales Repository in dem die Bilder gehalten werden, alternativ können die Bilder auch im selben Ordner wie die Filme abgelegt werden. Auch ein hybrid Modus ist möglich / erforderlich. In der Theorie und im WDTV Wiki schaut das so aus:

 

 

 

 

 

 

 

Pro Film können 3 Bilder setzt werden

  • Thumbnails für die Videos
  • das Hintergrundbild
  • das Wallsheet (auf dem Screenshot ist der Antagonist von Deckard zu erkennen)

Am Besten gefällt mir der Gedanken mit dem zentralen Sheetrepository damit Ordnung herrscht. Leider hat die Sache einen Haken. Ich zitiere aus dem Wlxdtv Wiki:

Sheet Mode with central sheet repository
(MSHEETDIR=’/tmp/media/usb/sheets‘)
File Description
sheets folder
sheets/Blade.Runner.avi_sheet.sheet.jpg sheet mode file sheet
sheets/Blade.Runner-1982_sheet.sheet.jpg sheet mode folder sheet
Movies folder
Movies/Blade.Runner-1982 folder
Movies/Blade.Runner-1982/Blade.Runner.avi media file
Movies/Blade.Runner-1982/Blade.Runner.jpg file thumb
Movies/Blade.Runner-1982/folder.jpg folder thumb

Sieht nicht nur merkwürdig aus, sondern ist es auch. Das Verzeichniss Sheets für die Bilder kann frei gewählt werden. Bei mir liegt es auf einem USB Stick, der in dem WDTV steckt. Die Bilder die in der Tabelle in Movies liegen können auch nur im Verzeichniss Movies liegen. Wenn man also kleine Bilder für jeden Film sehen möchte muß man trotz Nutzung des Repositories  Bilder im gleichen Verzeichniss wie die Filme ablegen. Damit wird diese Repo-Geschichte in meinen Augen obsolet. Warum sollte ich mir einen 2. Ort schaffen, an dem (ich) ein Skript arbeiten muß.

Nun ja soweit so gut. Wenn ich nun die Bilder entsprechend benenne und im Ordner mit den Filmen ablege funktioniert der tolle Wall Modus. Leider auch in der Theorie. Ein äußerst bescheuerter Bug listet die Bilder auch im Video Modus auf. Das heißt wenn ich Thumbnail per Fernbedienung markiere und auf Ok drücke sehe ich das Bild im Großformat statt des Films -aaaaaaaahhhh. Mit Platten die an die WDTV angeschlossen sind besteht dieses Problem nicht. Nur wenn ich auf Netzfreigaben zugreife ist der Filter auf Filme nicht gesetzt. Ein wundervoller Bug in der Firmware der sich nicht umgehen lässt.

Im Wiki wird auf eine Anleitung mit dem charmanten Titel „Linksheets for Idiots“ hingewiesen, die es erforderlich macht jeden Film in einem seperaten Ordner zu halten. Anscheinend war auch der Autor der Anleitung ein  wenig minderbegabt…

Dieser Blogartikel fasst 2h Recherche im WDLXTV Dschungel zusammen. Dem Thema Skripts habe ich mich gar nicht erst angenommen da ich nicht bereit bin Chaos in meine Ordner zu bringen.Momentan denke ich noch über ein kleines Skript nach das großzügig Softlinks und Ordner erstellt. Wahrscheinlicher ist jedoch, daß ich noch ein oder zwei Firmware Versionen abwarten werde bevor ich mir die Moviesheets noch einmal anschaue. Schade eigentlich :(.

Matroska Headercompression vs. WDTV

Seit geraumer Zeit bin ich Besitzer eines oder einer WDTV Live. Das Gerät steht unter meinem Fernseher und dient nur dem Zweck Filme die auf dem NAS abgelegt sind auf meinem Fernseher abzuspielen. Das Gerät kommt mit so ziemlich allen Formaten klar – abgesehen von manchen Mkv Dateien. Nach kurzer Recherche stand fest, dass dies mit der Headercompression zusammenhängt, doch was hat es damit auf sich?

Matroska ist ein Containerformat, das heißt in einem Matroska Container liegen die eigentlichen Dateien wie Audio und Videospuren, Untertitel usw. Im Header des Containers wird beschrieben welche Dateien enthalten sind und von welchem Typ sie sind. Die Matroskaspezifikation besagt, daß dieser Header auch komprimiert werden kann. Leider ist dieses Feature in den meisten Hardwareplayern anscheinend nicht implementiert obwohl die Spezifikation schon recht alt ist. Das war nie ein Problem bis sich Matroska entschloss die Headercompression standardmäßig in der aktuellen Version ihrer Tools zu aktivieren. Wenn man nun vergisst beim Mergen das entsprechende Flag zu setzen oder ein Mkv File von einem Bekannten bekommt, der solche Sorgen sieht man nur einen schwarzen Bildschirm.

Abhilfe schafft bei mir dieses kleine Bashscript. Die Mkv Tools müssen installiert sein. Die paar Zeilen machen nichts anderes als eine Prüfung auf Headerkomprimierung und ggfs. den Container ohne Kompression nochmal zu mergen. Das kann erfahrungsgemäß ein wenig dauern:

#!/bin/bash

function hascompression()
{
en=’Algorithm: 3 (header removal)‘
de=’Algorithmus: 3 (Entfernen von Kopfdaten)‘
mkvinfo $1 | grep -e „$en“ -e „$de“ &>/dev/null
ret=$?
if [ $ret -eq 0 ]
then
echo „komprimierte Header in $1“
return 0
else
echo „nichts komprimiertes gefunden in $1“
return 1
fi
}
#function
function removecompression()
{
hascompression $1

if [ $? -eq 0 ]
then

mv $1 $1.bak
mkvmerge -o „$1“ –engage keep_bitstream_ar_info -A -S –compression -1:none „$1.bak“ -D -S –compression -1:none „$1.bak“ -A -D –compression -1:none „$1.bak“
rm $1.bak
echo fukr
fi

}
#function

onlyinfo=false
while getopts ‚:i‘ OPTION; do
case „$OPTION“ in
i) onlyinfo=true && shift;;
*) echo „Unbekannter Parameter“

esac
done

for ARG in $@
do
if [ -f $ARG ]
then
if [ $onlyinfo == true ]
then
hascompression $ARG
else

removecompression $ARG
fi
else
echo $ARG isn’t a file
fi

done

WordPress versaut leider die Einrückungen aber ein ordentlichen Texteditor sollte das wieder zurechtrücken. 🙂

Matthias hat sich die Mühe gemacht und ein Applescript erstellt um dem Matroska Container auch unter MacOS die Komprimierung zu rauben:

on open someDroppedAliases
set theAlias to first item of someDroppedAliases
tell application „Finder“
set filename to name of theAlias
set ParentFolder to container of theAlias
set the item_count to the number of items in the ParentFolder
set parentFolderAlias to ParentFolder as alias
end tell
set parentFolderPath to POSIX path of parentFolderAlias
set ausgabe to do shell script „mkvinfo “ & quoted form of POSIX path of someDroppedAliases
if ausgabe contains „Content compression“ then

do shell script „mkvmerge -o “ & quoted form of parentFolderPath & „clean_“ & quoted form of filename & “ –compression 1:none “ & quoted form of POSIX path of someDroppedAliases

tell application „GrowlHelperApp“
set the allNotificationsList to ¬
{„Reparieren“}

set the defaultNotificationsList to ¬
{„Reparieren“}

register as application ¬
„Growl AppleScript Sample“ all notifications allNotificationsList ¬
default notifications defaultNotificationsList ¬
icon of application „Mkvtoolnix“

— Send a Notification…
notify with name ¬
„Reparieren“ title ¬
filename description ¬
„Kompression erfolgreich entfernt.“ application name „Growl AppleScript Sample“
end tell
else
tell application „GrowlHelperApp“
set the allNotificationsList to ¬
{„Nichts zu reparieren“}

set the defaultNotificationsList to ¬
{„Nichts zu reparieren“}

register as application ¬
„Growl AppleScript Sample“ all notifications allNotificationsList ¬
default notifications defaultNotificationsList ¬
icon of application „Mkvtoolnix“

— Send a Notification…
notify with name ¬
„Nichts zu reparieren“ title ¬
filename description ¬
„Keine Kompression vorhanden“ application name „Growl AppleScript Sample“
end tell
end if
end open

Hf^^

Firewall mit reverse ssh Tunnel perforieren

Im „Linuxnetz“ las ich heute einen Artikel über das Erstellen von SSH Tunneln um z.B. sicher zu surfen. Mit der Secure Shell kann man unglaublich viele Dinge tun, darunter auch groben bis gröbsten Unfug. Ein schönes Beispiel dafür möchte ich hier kurz und nicht vollständig aufzeigen.

Ich bin Besitzer eines WDTV. Dabei handelt es sich um einen Multimedia Player um am TV Filme zu konsumieren. Das Gerät besitzt einen Netzwerkanschluss und kann auch Medien aus „Netzwerkfreigaben“ abspielen. Ich verwende eine modifizierte Firmware für das Gerät, auf der ein openssh Server läuft. Nun kann ich mich per SSH auf das Gerät einwählen und z.B. Kommandos wie Stop, Pause oder Vorspulen absetzen. Ein Freund von mir interessierte sich auch für ein solches Gerät und fragte mich, ob er es sich mal ausleihen könne.

Natürlich war das kein Problem für mich. Allerdings reizte es mich schon ein wenig das Gerät aus der Ferne zu steuern. Sprich der Freund schaut zuhause einen Film und ich drücke per ssh auf Pause oder Spule ein wenig vor. Von wegen der böse Geist in der Maschine und so 🙂

Um dies zu erreichen muß ich mit dem WDTV direkt kommunizieren können. Zuhause bewerkstellige ich das mit

ssh wdtv

Durch den Umzug zu meinem Kumpel kamen nun jedoch 2 Router und das Internet zwischen meine Maschine und das WDTV.

Die auf den 1. Blick einfachste Methode sieht so aus:

Um per SSH auf das WDTV zu kommen brauche ich die public IP und eine Portweiterleitung auf das WDTV bei meinem Kollegen. Nicht sehr elegant wie ich finde. Der Schabernack würde auch recht schnell auffliegen wenn ich ihn um beides bitten würde.

Meine Idee war das Pferd von hinten aufzuzäumen. Das WDTV erzeugt einen Tunnel auf meine Maschine über den ich die Kiste besuchen kann :).

In diesem Szenario wird meine IP benötigt und eine Weiterleitung von Port 22 auf meinen Rechner in meinem Netz sowie 2 Kommandos die beim Start des WDTV ausgeführt werden.

Das ist schon eher machbar.

Die Weiterleitung des Ports kann man in jeden 08/15 Router bequem konfigurieren.

Meine „public IP“ (wie lautet die korrekte Bezeichnung dafür?) finde ich immer mit einem netten Alias heraus:

ms@nostromo:~$ alias |grep wieist*

alias wieistmeineip=’curl icanhazip.com‘

Nun muß ich diese Adresse an einem Ort hinterlegen den das WDTV findet. Man könnte die IP in eine Textdatei schreiben und diese per FTP auf einen Gratis-Webspace kopieren. Wer einen Dienst wie DynDns nutzt hat es wohl noch leichter.

Das WDTV muß nachdem es gestartet ist diese IP abfragen und den Reverse Tunnel aufbauen:

ssh  -T  -R 2222:localhost:22 ms@$PUBIP

Wenn das Gerät an ist – und es ist immer an, auch wenn die Anzeige „Betrieb“  nicht leuchtet – kann ich eine SSH Verbindung zu dem Gerät aufbauen:

ssh ms@localhost -p 2222

Abends hatte ich per Fon sichergestellt, daß mein Kumpel einen Film schaut, 20 Minuten gewartet und dann ab und an mal auf Pause gedrückt, Vorgespult oder das Gerät komplett ausgeschaltet und so für Verwirrung gesorgt. Der Freund begann sogar im Internet nach der Ursache für solche Probleme zu recherchieren nachdem ich sagte, daß ich keine solchen Probleme hätte :). Nach 4 Tagen ließ ich den Unfug dann doch bleiben, da es doch Öde wurde.