Seiten

Sonntag, 4. März 2012

VLC 2.0 Fernsteuerung über HTTP-Interface

Anleitungen im Netz, wie man die Fernsteuerung per Http-Interface im VLC einrichtet gibt es viele. Leider hat keine so richtig meine Bedürfnisse erfüllt oder gar nicht erst funktioniert. Eigentlich wollte ich nur im internen Netzwerk meinen VLC per Smartphone (Android) steuern und dabei trotzdem noch die "normale" VLC-Oberfläche wie gewohnt am PC nutzen können. Nach etlichen Zurücksetzen der VLC-Konfigurationen und Anhängen von unterschiedlichen Parametern an die VLC-Verknüpfung, begann ich noch einmal von vorn. Wenn man weiß wie es geht ist es eigentlich ganz einfach und (fast) komplett über die Oberfläche einstellbar:

In den Einstellungen (Alle anzeigen) unter Interfaces -> Hauptinterfaces zuerst HTTP aktivieren. Nicht das Hauptinterface ändern, das führt dazu, dass der VLC im Hintergrund startet :



Einstellungen speichern und den VLC neu starten. Man sieht nun die normale Oberfläche und kann zusätzlich im Browser unter http://localhost:8080/ die Weboberfläche sehen:


Ziemlich simpel bisher, oder? Ein Problem hat man aber leider noch, der VLC ist nur vom Rechner auf dem er läuft erreichbar, von anderen Rechnern aus bekommt man im Browser einen 403 (Forbidden)-Fehler:

Das liegt daran, dass der Webserver, dem VLC zugrunde liegt eine eigene Hosts-Datei mitführt bei dem der Zugriff nur vom eigene Rechner aus gestattet ist. Um dem Abhilfe zu verschaffen, muss diese Datei einfach geändert werden. Diese bedindet sich im 2.0er VLC unter:
C:\Program Files\VideoLAN\VLC\lua\http und heißt .hosts

Ihr Inhalt sieht ungefähr so aus:


#
# Access-list for VLC HTTP interface
# $Id$
#

# localhost
::1
127.0.0.1

# link-local addresses
#fe80::/64

# private addresses
#fc00::/7
#fec0::/10
#10.0.0.0/8
#172.16.0.0/12
#192.168.0.0/16
#169.254.0.0/16

# The world (uncommenting these 2 lines is not quite safe)
#::/0
#0.0.0.0/0

Wie man sieht ist alles, bis auf die lokale Maschine auskommentiert. Um im eigenen Netzwerk das Webinterface erreichbar zu machen, muss man lediglich die Zeile 192.168.0.0/16 (Standardmäßig sind die 192.168.-Adressen die privaten Adressen in einem C-Netz, welche bei haushaltsüblichen Routern eingestellt sind) einkommentieren, also die Raute löschen. Danach sieht die Datei dann so aus:

#
# Access-list for VLC HTTP interface
# $Id$
#

# localhost
::1
127.0.0.1

# link-local addresses
#fe80::/64

# private addresses
#fc00::/7
#fec0::/10
#10.0.0.0/8
#172.16.0.0/12
192.168.0.0/16
#169.254.0.0/16

# The world (uncommenting these 2 lines is not quite safe)
#::/0
#0.0.0.0/0

Die Datei noch abspeichern und beim nächsten Start des VLC können alle Rechner im Netzwerk auf die Weboberfläche zugreifen.

JDownloader alle AGBs bestätigen

Nachdem ich letztens erklärt habe, wie man das JDownloader Webinterface ohne eingeloggten Nutzer einrichtet, bin ich dadurch auf eine kleine Schwierigkeit getroffen. Wenn man per Webfrontend versucht von unterwegs Links hinzuzufügen, trifft man schnell auf das Problem, dass AGBs (noch) nicht bestätigt sind. Das ist natürlich ärgerlich, da die Bestätigung über das Webinterface nicht möglich ist.


Damit mir das nie wieder passiert, habe ich mir überlegt alle AGBs vorab schon einmal zu akzeptieren. Da mir aber das einzelne Anklicken aller Kästchen in der AGB-Ansicht des JD zu aufwändig ist, habe ich mal etwas recherchiert, ob man das irgendwie automatisieren kann. Durch ein bisschen Umschauen im JD-Ordner habe ich heraus gefunden, dass der JD eine HSQLDB-Datenbank benutzt und habe mal reingeschaut. Hier sind auch die Hoster und ihre Konfiguration abgelegt, leider aber als Object, was nicht wirklich lesbar ist:


So weit so gut, leider kann man hier nicht einfach einen Schalter umsetzen, damit alle AGBs bestätigt sind. Da aber HSQLDB eine Skript-Datei anlegt, kann man vielleicht hier etwas drehen, also habe ich mal reingeschaut in die Datei
C:\Program Files\JDownloader\config\database.script:


Auffällig war, dass die Config, die in die Datenbank geschrieben wird immer derselbe String ist, z.B.:


INSERT INTO CONFIG VALUES('youtube.com','aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c7708000000100000000078')


OK, dann den JDownloader gestartet, mal die Youtube-AGB bestätigt und mal sehen was sich in der Zeile ändert. Diese sieht dann so aus:



INSERT INTO CONFIG VALUES('youtube.com','aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c7708000000100000000974000a414c4c4f575f5745424d737200116a6176612e6c616e672e426f6f6c65616ecd207280d59cfaee0200015a000576616c756578700174000a5553455f504c5547494e71007e000474000c4953415346494c454e414d457371007e000300740009414c4c4f575f33475071007e000474000b4147425f434845434b454471007e0004740009414c4c4f575f464c5671007e000474000b464153545f434845434b3271007e0007740009414c4c4f575f4d503471007e0004740009414c4c4f575f4d503371007e000478')


Also den JDownloader wieder geschlossen und ein Backup der Script-Datei angelegt. Als Editor nutze ich Notepad++  (mit anderen funktioniert es bestimmt auch) und habe dann in der Datei per globalem Ersetzen den vorherigen String:


aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c7708000000100000000078



durch den neuen:


aced0005737200116a6176612e7574696c2e486173684d61700507dac1c31660d103000246000a6c6f6164466163746f724900097468726573686f6c6478703f4000000000000c7708000000100000000974000a414c4c4f575f5745424d737200116a6176612e6c616e672e426f6f6c65616ecd207280d59cfaee0200015a000576616c756578700174000a5553455f504c5547494e71007e000474000c4953415346494c454e414d457371007e000300740009414c4c4f575f33475071007e000474000b4147425f434845434b454471007e0004740009414c4c4f575f464c5671007e000474000b464153545f434845434b3271007e0007740009414c4c4f575f4d503471007e0004740009414c4c4f575f4d503371007e000478

ersetzt. 974 Ersetzungen später noch schnell die Datei gespeichert und den JD neu gestartet und siehe da, alle AGBs sind akzeptiert:


Das war ja einfach ;) Bisher hatte ich durch die Änderung keine Probleme, falls aber welche auftreten sollten, werde ich diese hier posten. Falls ihr die Anleitung nachvollziehen wollt, vollzieht die Änderungen genauso nach wie ich und legt ein Backup der Datei an. Die Anleitung bezieht sich auf den JD in Version 0.9.581, in anderen Versionen können die String durchaus etwas anders aussehen.

Samstag, 3. März 2012

JDownloader Webinterface als Windows Service im Hintergrund starten


Wer kennt ihn nicht, den JDownloader. Ein großartiges Tool zum Download von diversen Filehostern oder Videos von Youtube. Leider hat dieser einen großen Nachteil. Er benötigt zum Starten Adminrechte und einen eingeloggten Nutzer. Dies ist nicht so günstig, wenn er auf einem Server betrieben werden soll, wo sich mehrere Benutzer einloggen, davon aber keiner Adminrechte hat. Jetzt bietet sich natürlich das Webinterface, wo jeder Benutzer seine gewünschten Downloads eintragen kann, was aber immer noch einen eingeloggten Adminbenutzer benötigt.
Von Haus aus bietet der JDownloader leider keine Möglichkeit ihn als Windows-Service automatisch zu starten, aber dafür gibt es Abhilfe:

Vorraussetzung ist natürlich der JDownloader mit eingerichtetem Webinterface. Einfach in den Plugins aktivieren und JD neu starten. Danach sollte standardmäßig unter http://localhost:8765 (User: JD, Pass: JD) das Webinterface sichtbar sein. Meine Anleitung basiert auf einem Windows 7 (32-Bit), sollte aber für jedes andere Windows genauso funktionieren. Ebenso muss ein aktuelle Java Runtime installiert sein. Die mit JDownloader ausgelieferte Version hat bei mir dazu geführt, dass der Service nicht startet bzw. hängen bleibt. Meine Vermutung ist, dass die javaw.exe nicht im PATH vorhanden ist. Eine aktuelle Java Runtime gibt es bei Oracle und löst das Problem automatisch.

Um den JDownloader als Service einzurichten benötigt man die Tools srvany.exe und instsrv.exe,die im Windows Server 2003 Resource Kit verfügbar sind. Einfach Downloaden und installieren. Bei der Installation kommt leider unter neueren Betriebssystemen eine Fehlermeldung, die Tools, die wir benötigen funktionieren aber trotzdem:

In der folgenden Anleitung wird davon ausgegangen, dass der JDownloader unter  
C:\Program Files\JDownloader\ und das Resource Kit unter C:\Program Files\Windows Resource Kits\Tools installiert sind.

Zuallererst beenden wir den JDownloader. Nun starten wir die Kommandozeile als Administrator und navigieren zum Resource Kit:

cd /d "C:\Program Files\Windows Resource Kits\Tools"
   (Anführungszeichen nicht vergessen!!!)


Hier nutzen wir nun instsrv und srvany, um einen Dienst anzulegen. Als Namen nutze ich JD, dieser ist aber frei wählbar. Der Pfad zu srvany muss mit Ordner angegeben werden:


instsrv.exe JD "c:\Program Files\Windows Resource Kits\Tools\srvany.exe"


Im Anschluss müssen wir noch srvany sagen, welches Programm gestratet werden soll. Das geht leider nur über die Registry. Dazu muss ein Schlüssel Parameters angelegt unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\JD\ angelegt werden. Dazu folgendermaßen vorgehen:

  • Regedit starten: Nach Regedit im Windows-Menü suchen und als Administartor ausführen
  • Auf der linken Seite zum Schlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\JD\ navigieren (JD ist der Name des Service den wir angegeben haben)
  • Neuen Schlüssel anlegen: Auf JD mit der rechten Maustaste -> Neu -> Schlüssel. Der neue Schlüssel heißt Parameters
  • Auf der rechten Seite eine neue Zeichenfolge anlegen: rechte Maustaste -> Neu -> Zeichenfolge
    (Name: Application; Wert:  C:\\Program Files\\JDownloader\\JDownloader.exe). Die doppelten Anführungszeichen sind kein Fehler, sondern müssen vorhanden sein.
  • Im Anschluss sollte das dann  so aussehen:

Nun kann der Service gestartet werden. Dazu im Windows Ausführen-Dialog (Win+R)  services.msc eingeben:



Der Dienst JD sollte vorhanden sein und kann gestartet werden:


Wenn alles geklappt hat sollte jetzt wie gewohnt unter http://localhost:8765 das Webinterface erreichbar sein.

Nun müssen wir den Dienst noch so konfigurieren, dass er immer startet auch wenn kein Nutzer angemeldet ist. Dazu einfach den Service doppelt anklicken und überprüfen, ob der Starttyp auf "Automatisch" steht. Dies sollte Standard sein. Im zweiten Reiter "Anmeldung" muss nun noch das Administratorkonto für die Anmeldung angegeben werden. Das sollte das Konto sein mit dem der JD gestartet und eingerichtet wurde:


Zur Sicherheit kann man den Service nun noch einmal neu starten und überprüfen, ob das Webinterface erreichbar ist. Alle Einstellungen sind nun fertig und nach einem Neustart startet der Service automatisch und ist über das Webinterface nun auch von anderen Rechnern aus ohne Windows-Login erreichbar. 

Voila:



Hinweis: Je nach Konfiguration kann es noch notwendig sein eine Firewallausnahme für den JDownloader einzutragen.

Mein Folgeartikel zum JDownloader kann euch dabei helfen alle AGBs auf einen Rutsch zu bestätigen.