Jump to content
Sign in to follow this  
Röschti

Röschti Server :-)

Recommended Posts

Röschti

Worum gehts?

Ich will meinem DVBViewer HTPC via Smartphone (Android) steuern können. Ich wollte primär eine Steuerung haben für mein DVBViewer mittels HTC Hero, aber gut anpassbar und so flexibel wie möglich für andere Geräte. Deshalb gab's keinen Android Java Client sondern, das Ganze webbasiert. Den Webserver aus dem Member-Downloadbereich ist mir zu unflexibel und passt mir auch sonst irgendwie nicht so recht in den Kram. Also kam ich auf die Idee, selber einen Webserver zu bauen, welcher via COM den DVBViewer steuern kann. Mittels des Stylsheets kann jeder das Aussehen der Ausgabe nach eigenem Gusto verändern. Gemacht habe ich das Ganze mit vb.net Express Edition 2010.

 

Warum in VB.net und nicht C#?

C# erinnert mich zu sehr an Java und somit ans Daily Business :-)

 

Wie funktioniert das Ganze?

Primär über URL Commandos, welche in der Form von /?cmd übergeben werden zB Für Kanalwechsel auf Kanal 4: http://ip-des-servers/?ck4

Intern nimmt der TCPListener den Request entgegen, überprüft ihn, wertet die Commandos aus und steuert den DVBViewer vie COM. Via Threads wird verhindert, dass der Server "blockiert". Anschliessend wird eine html-Antwort generiert und an den Requester (Browser)zurück geschickt.

------------------------------------------------------------------------------------------------------------------------------------------

Und wie funktionierts im Detail?

Wie erwähnt geht es mir darum, ein Höchstmass an Flexibilität zu haben betr. der HTML Ausgabe. Deshalb kam ich auf die Idee, mittels HTML Templates zu arbeiten und möglichst via Stylesheets das Aussehen zu beeinflussen. Die Anwendung liest die Templates aus dem rootPfad in einen Stringbuilder, weil ich mir habe sagen lassen dass Stringoperationen mit Stringbuilder einiges schneller sind als normale Strings.

 

Anhand des "EPG Jetzt" erkläre ich die Funktionsweise stellvertretend für alle anderen Sachen:

 

jetzt.html

ist das Template mit den Platzhaltern. Öffne es in einem Texteditor und schau dir den Quelltext an. Als erstes kommt die Einbindung des Stylesheets. Die folgende Javascript Funktion ist ein Switch zum beliebigen ein- und ausblenden von Elementen, welche eine ID haben. Das Element wird gesucht und die Sichtbarkeit geändert dh wenn es ausgeblendet ist,wird es eingeblendet und umgekehrt.

 

Die Tabelle mit der ID "steuerung" ist wie vorhin beschrieben ein und ausblendbar. Sie enthält die 3 Platzhalter für Lautstärke erhöhen (@LinkvolUp@), Lautstärke verringern und ein Exit. Die nächste Tabelle enthält Platzhalter für EPG Auswahl "jetzt" und "heute", sowie einen Button um die Tabelle "steuerung" ein- und ausblenden zu können.

 

Die nächste Tabelle ist die wichtigste. Die Table Row RepStart wird aus dem Stringbuilder in ein Zwischenlager kopiert als Quelle für den Hautploop. Die EPG Daten vom DVBViewer sind in einem Array. Es wird durch das Array geloopt, die Platzhalter Zeichen mit den EPG Daten ersetzt und in einen Stringbuilder angehängt. Dann beginnt die nächste Runde im Loop. Am Ende haben wir also in einem Stringbuilder einen Haufen TableRows mit gefüllten EPG Daten. Diese müssen am Ende noch im Inputstring ersetzt werden. Dann wird aus dem String direkt die Datei answ.html geschrieben, welche die Funtkion SendResponse an den Browser zurück schickt.

in der Sub ProcessCommand sind alle Kommandos implementiert. dies kann beliebing ausgebaut werden mit allen Möglichkeiten, die COM bietet.

 

Stand der Dinge:

Ich würde sagen sowas zwischen Alpha und Beta. Der Server funktioniert einwandrei, auch die EPG Ausgabe "Jetzt", Steuerung der Lautstärke, Kanalwechsel usw.

------------------------------------------------------------------------------------------------------------------------------------------

Coming next:

- HTML Template mit DIVs statt Tabelle als Grundgerüst

- Sendungsdetails ansynchron nachladen (AJAX)

- Mediasteuerung zum abspielen von Aufnahmen / Audiofiles usw.

- Auto EPG Update

- HTTP Streaming (Das Android "bockt" irgendwie habe ich den Eindruck)

 

So, die Sourcen mit umfangreichen Kommentaren im Quelltext sind hier: VB Sourcen

Die Sourcen beinhalten auch die HTML Tempaltes, buttons usw. Es darf jeder die Sachen abändern und anpassen wie er will.

 

Ach ja, bitte keine hämischen Kommentare über den Quelltext, ich weiss selber dass ich kein VB Profi bin. ich würde mich freuen, wenn meine Vorarbeit dem einen oder anderen helfen würden seine eigenen Ideen zu verwirklichen :rolleyes:

Viel Spass damit & Grüsse

Röschti

Share this post


Link to post
buster19

Hallo Röschti,

 

sehr schöne Idee!

Ist denn auch eine Anbindung an den Rec-Service geplant, z.B. für's EPG oder das Streamen?

 

Deine Vorab-Version habe ich leider nicht ans laufen bekommen ... siehe angehängten Screenshot.

post-48844-097799600 1282897761_thumb.jpg

Share this post


Link to post
Röschti

Laufen tut sie offensichtlich schon am Screenshot an ;-) Schau mal in der Sub ProcessRequest. Aufgrund der Logmeldung "Keine Ressourcenanforderung gefunden" hast du wahrscheinlich nur die IP im Browser angegeben 192.168.0.35:800 aber ohne Zusatz wie 192.168.0.35:800/?jetzt . Ohne Parameter hüpft er rein in die Sub ShowIndex() und das ist genau die Ecke, wo ich

zur Zeit daran arbeite. Versuch es doch mal mit dem Aufruf 192.168.0.35:800/?jetzt und schau was passiert. Wie gesagt, es ist keine fertige Version. Oder mal frisch kompilieren wenn du

einfach die exe gestartet hast, habe keine Ahnung wann ich das letztmals machte...

 

Ahh..habe den Fehler gefunden! Beim Aufruf mit 192.168.0.35:800 kommt in der Sub sendHTMLResponse nach dem ShowIndex der Pfad doppelt rein in die Variable httpRequest.

Koorektur ist: in der Sub ProcessRequest muss Abfrage If (strRequest.EndsWith("/") Or strRequest.Equals("")) Then so lauten:

 

If (strRequest.EndsWith("/") Or strRequest.Equals("")) Then

'keine echte Anforderung gefunden, also default page senden

logT.AppendLine("Keine Ressourcenanforderung gefunden...")

ShowIndex()

strRequest = rootPath & "answ.html"

sendHTMLResponse(strRequest)

Exit Sub

End If

 

 

Betr. dem Recording Service: ja, schaue ich mir auch an. Das Streaming ist nicht ganz ohne. Im Projektordner im /bin/ Verzeichnis sind schon die ffmpeg Sachen drin, aber so richtig

funktioniert hat es bisher nicht.

Share this post


Link to post
buster19

Okay, mit Angabe von /?jetzt klappt der Aufruf. :-)

 

Das nächste Problem das ich festgestellt habe ist, wenn ich den "Play-Button" drücke sendet die Form "http://192.168.1.2/?ck1".

Das passt nicht ... die IP hast Du wahrscheinlich noch irgendwo hardcoded drin?

Share this post


Link to post
Röschti

Du wirst noch viele Dinge finden. Wie ich ja geschrieben habe, ist es nicht fertig, sondern ein Grundgerüst, damit jeder seine eigenen Ideen verwirklichen kann. Lade dir die Express Edition runter und ändere einfach was dich stört, ist ja gratis :-)

Share this post


Link to post
dbraner

Jetzt gibt's ja auch den Apache Webserver mit PHP inkl. COM Unterstätzung. Das habe ich verwendet und mir die Entwicklung eines eigenen Webservers gespart. Ich habe mir ein ähnliches Interface gebaut, z.B.

 

http://myserver/command.php?cmd=5

 

Der Haken an der Webserver-Geschichte ist, dass man nicht auf Ereignisse (z.B. OnChannelChange) reagieren kann. Das wäre eine schöne Erweiterung für Dein Programm: Es sollte auf solche Ereignisse mit dem Aufruf einer konfigurierbaren URL reagieren. Dann könnte ich wirklich vom Apache konvertieren :rolleyes:

Share this post


Link to post
Röschti

Das ist zur Zeit bei mir auch noch eine halb-offene Baustelle. Im Prinzip ist es einfach. Die URL Aufrufe nicht als normale Requests an den Server senden sondern mit AJAX. Der Server führt den Befehl aus, wartet auf den Event wie etwa OnChannelChange oder OnPlaybackStart und sendet erst dann die Antwort an den Browser zurück. Ich mache es mit einem Timer dh wenn der Befehl -sagen wir für Kanalwechsel- ausgeführt wird, startet ein Timer. Wenn der Event nicht in einer definierten Zeitspanne zB 2sec kommt, dann wird der Befehl wiederholt. Kommt der Event, sende ich an den Browser im simplen Textformat eine ID oder so zurück, damit via JavaScript vom AJAX Aufruf darauf reagiert werden kann. Mit Ajax verhindert man dass der Browser in einen Timeout läuft, der Bildschirm "blockiert" bzw nur eine leere weisse Seite anzeigt, die Übertragung kürzer und schneller ist und die Rückmeldung einfacher wird. Ich denke ich werde einfach bei positiver Rückmeldung die Hintergrundfarbe der Zelle mit dem Umschalt-Button für 1 Sekunde auf grün stellen oder etwas in der Art.

 

Bei Events, welche nicht durch einen Aufruf wie ein Kanalwechsel ausgelöst werden, funktioniert das aber so nicht. Man könnte zB die gefeuerten Events in ein Log auslagern und Browserseitig einen Timer mit Javascript (http://www.mcfedries.com/JavaScript/timer.asp) machen, der zb alle paar Sekunden eine AJAX Request an den Server sendet und die Events abholt. Das ist halt die Krux am http, es ist ein verbindungsloses Protokoll.

Share this post


Link to post
VinoRosso

Coole Sache das ist genau das wa ich suche :)

 

Allerdings würde ich das doch gern in ne app verpacken ;)

 

Wie "installier" ich denn deinen Server? hab da jetzt keine Anleitung gesehen ;)

 

Mir ist mein im gehäuse integrierter IR empfänger kaputt gegangen, da wäre sowas nicht schlecht.

 

aber touchscreen fenbedienung ohne wischgesten ist doof, man kann ja keine Tasten erfühlen, daher muss da ne app her ;)

 

Vllt bringe ich das im laufe des tages provisorisch zum laufen, vorausgesetzt ich bekomme den Server installiert ;)

Share this post


Link to post
VinoRosso

hehe, also wenn ich mir den code so ansehe, wirds über wlan wohl ned funktionieren, du trägst da einfach ne hardcoded ip ein :)

 

jetzt muss ich das ändern und neu compilen, und wieder ne exe draus machen, ich hoffe das bekomme ich hin....

Share this post


Link to post
VinoRosso

So ich scheine hier wohl selbstgespräche zu führen, aber is mir egal ;)

 

durch die neuen Nutzerdaten konnte ich auf meinem arbeitsrechner keinen DVBViewer installieren, also konnte ich den Server noch nicht kompilieren ;)

 

die Hürde ist genommen :)

 

kompiliert und ne exe ist da, das war einfacher als ich mir es aus meiner java welt vorgestellt habe ;)

Share this post


Link to post
VinoRosso

Okay, da ich mir ja ne reine Android App mache habe ich deinen Server komplett über den Haufen geschmissen.

 

da ich keine rückmeldung vom server brauche hab ich alle antworten rausgenommen.

 

desweiteren wird in der aufgerufenen URL eine ActionID mitübergeben anstatt des "Stringbefehls", so dass diese ActionID einfach per COM schnittstelle aufgerufen werden.

 

so muss ich nun den Server nie wieder verändern, ich shcick ihm einfach andere ids per client und um den rest muss ich mich nicht kümmern.

 

Und es funktioniert bisher erstaunlich gut.

 

Ich kämpfe jetzt nur noch mit dem GUI :) Da bietet Apple halt leider doch bessere Werkzeuge für als Google :(

Share this post


Link to post
VinoRosso

So hier sind mal 2 Screens, das GUI ist funktional :)

 

Zur Zeit schreibe ich den "Röschti Server" zu einer echten COM-WEB Schnittstelle um.

 

Die app wir dann auch noch aufnahmen verwalten, timer erstellen, epg anzeigen usw können.

 

Irgendwann mal jedenfalls ;)

Edited by VinoRosso

Share this post


Link to post
nasenbaer

Hallo zusammen,

 

ich hab gerade nach längerer zeit mal wieder im Forum vorbeigeschaut und siehe da es tut sich ja was ;)

Ich hab vor nem Jahr oder so ungefähr das gleiche schonmal für nen windows-mobile phone fürnen kumpel gecodet.

Da hab ich einfach nen udp-server fürs windoof als TrayApp gebastelt, der auf Strings wartet und die in ActionIDs per COM an den Viewer weitergibt.

Zudem hab ich auch noch die Events wie OnChannelChange vom Server ans Handy geschickt, so dass dieses den aktuellen Kanal und Sendungsinfos jeweils angezeigt hat!

Eine ChannelList und das 24 stunden ChannelEPG hab ich auch noch reingecodet und dann aber aufgehört, da mir die Zeit und die Lust ausgegangen is(hab das ja für nen kumpel gemacht und hatte selbst gar kein winmobile)! Vllt schick ich ja mal n paar Screenshots wenn der Kumpel(der das immer noch im Einsatz hat)die mal macht ...

 

Jetzt aber zu Android-> mittlerweile hab ich nen HTC magic und hab mir mal Netbeans mit SDK und Emulator an start gebracht.

Am besten wär doch eigentlich ne App also n apk-file das sich jeder installieren kann(opti wäre direkt vom Market).

Dazu wäre natürlich wieder ein Server nötig, der Anbindung an die COM-Schnittstelle hat. UDP beim Kumpel war und ist zwar superschnell aber tcp wäre glaub doch besser(hatte das damals nich gemacht, da beim standby vom phone tausend Exceptions geworfen wurden und die verbindung nach dem standby nicht mehr aufgenommen wurde-> war mir zu kompliziert auf die schnelle) da Events vom Server ans phone dann auch garantiert ankommen sollten!

 

Also wenn jemand da mitmachen würde, wäre das als Community-Projekt doch ne super sache!

Sieht ja auch so aus, als wenn das schon bei euch zumindest rudimentär funktionieren würde. Ich hab das allerdings noch nicht so recht verstanden und mit VB kenn ich mich mal gar nich aus. Eher in Java, C# bzw. .Net ! Wird jetzt hier die Com-Schnittstelle benutzt( die kenn ich)? oder diese ominöse Web-Api vom Recording-Service?

@VinoRosso: Kannst du mal erklären was du jetzt bisher gemacht hast? Scheint ja der gleiche Ansatz zu sein wie mein damaliges WinMo-projekt! Wäre doch super wenn man sich da mal austauschen könnte bzw. gemeinsam entwickeln könnte! Wollt mich so oder so in Android einarbeiten...Mal sehen vllt. versuch ich auch mal den damaligen Server zu benutzen und schick dem einfach vom Android aus die Strings....

 

Grüße

Share this post


Link to post
yaver

So hier sind mal 2 Screens, das GUI ist funktional :)

 

Zur Zeit schreibe ich den "Röschti Server" zu einer echten COM-WEB Schnittstelle um.

 

Die app wir dann auch noch aufnahmen verwalten, timer erstellen, epg anzeigen usw können.

 

Irgendwann mal jedenfalls ;)

Gibts da schon was neues :)? ich warte auf sowas schon gespannt :)

Share this post


Link to post
VinoRosso

hmm leider nicht, mangels interesse und weil mein infrarot empfänger irgendwann repariert war, hab ich nicht mehr weiterentickelt.... :-)

 

ausserdem waren die xml probleme mit dem recording service und android extrem frustrierend, mittlerweile weiss ich das mein epg durch den epg importer korrupt war, das sollte also egtl. kein prob sein.

 

hätt ich noch zeit würd ichs liebend gern weitermachen, aber da geht zur zeit einfach nix...

 

aber ich hätt so n teil auch gerne, mit wol und allem drum und dran, quasi wie die telekom programm manager app, nur für den DVBViewer. wenn jemdand die sourcen möchte ich stell alles zur verfügung :-)

 

aber vllt hab ich demnächst mal zeit mich darum zu kümmern, lust hätte ich jedenfalls noch...

Share this post


Link to post
dgdg

Wenn der DVBViever ne ordentliche und zeitgemäße Web-Schnittstelle hätte, dann wären solche Apps unter Android eine Fingerübung (unter iOS und Windows Mobile vermutlich auch). Aber dieses proprietäre COM-Gefrickel macht einfach keinen Spaß und ist eben auch nicht mehr zeitgemäß. Wer will sich denn noch mit solchen überholten Schnittstellen auseinandersetzen. Aus diesem Grund hat ja nun der Recording Service eine Web-API, aber was nutzt einem das, wenn man den DVBViewer steuern möchte.

 

Ich programmiere im Moment beruflich viel unter Flash (Adobe Flash Builder) und so eine komfortable Fernbedienungs-App könnte man damit wirklich in ein paar Stunden zusammenbauen, wie gesagt, wenn man ein Web-Interface hat. Und auf Knopfdruck kommen da neben den Flash Builder und AIR-Applikationen auch noch Apps für Android, iOS und Blackberry hinten raus.

 

Stattdessen verbringst du Tage und Wochen mit einem eigenen COM-WEB-Umsetzer Ist doch klar, dass da nichts bei rumkommt. Viel zu aufwändig.

 

Aber selbst beim Recording Service, den ich im Moment für meine Videoverwaltung per Web-Interface anzapfe, macht das nicht wirklich Spaß. Proprietäre Datumsformate (Real-Typen statt dem in jeder Programmiersprache unterstützen Unix-Timestamp-Format) und bitcodierte 64-Bit-Integer machen einem das Leben schwer. Was haben solche proprietären Formate in XML-Dateien zu suchen? Und gerade bin ich darüber gestolpert, dass der Recording Service nicht XML-konforme Dateien mit doppelten Tags generiert, die der Flash-XML-Parser nicht decodieren kann. Konnte ich zwar lösen, aber es war wieder gefrickel und hat mich Tage gekostet, bis ich überhaupt die Ursache gefunden habe.

 

DVBViewer-Addon-Programmierung ist irgendwie immer Gefrickel. Ich denke es ist auch gar nicht gewollt, dass man da irgendwas zu programmiert. Das macht alles keinen Spaß.

 

Ja!!! Nach ein paar Tagen Programmierung rund um den DVBViewer bin ich mal wieder ziemlich frustig!! :-(

Edited by dgdg

Share this post


Link to post
VinoRosso

Also die Com web schnittstelle zu schreiben war der geringste aufwand. ist auch nicht wirklich schwer...

 

problem ist: es ist kein DVBViewer plugin, da ich nix delphi habe :-)

 

also ist es ein programm, das man extra starten muss (Windows Service kann das Visual Studio Express wohl nicht...)

 

klar, würde per Autostart gehen, aber das gefällt mir alles nicht..

 

n Gescheites Webinterface wäre schön, ja.

Share this post


Link to post
dgdg

Also die Com web schnittstelle zu schreiben war der geringste aufwand. ist auch nicht wirklich schwer...

problem ist: es ist kein DVBViewer plugin, da ich nix delphi habe :-)

 

Das würde mich nicht stören. Hier laufen einige Programme nebenher, z.B. EventGhost das auch über COM mit dem DVBViewer kommuniziert.

Also wenn jemand ein Webinterface baut, das alle wesentlichen Funktionen des COM-Interface zu Verfügung stellt, das wäre super. Aber bitte ohne die proprietäre Datentypen der Recording Service API.

 

Vermutlich könnte man sowas auch mit EventGhost bauen, aber auch dann verbringt man wieder Tage und Wochen mit Programmierung, die mit dem, was man eigentlich an Funktionaltät programmieren möchte, gar nichts zu tun hat.

Share this post


Link to post
Röschti

Naja mir geht's etwas gleich wie dem Rotwein...Interesse ist schon noch da, aber keine Zeit :-/

 

Andererseits gibts ja inzwischen vom RecordingService div. WebInterfaces, welche ja auch recht einfach angepasst werden können.

Meine ursprüngliche Motivation war, dass ich in einer recht grossen Loft Wohnung lebe und die die Fernbedienung die Distanz zum

Empfänger nicht überbrücken konnte (und sowie so nie dort lag wo man sie gerade benötigt hätte...).

 

Trotzdem macht das Basteln Spass :-)

Edited by Röschti

Share this post


Link to post
Igneous

Hallo

 

besteht an dem Thema Webserver für Smartphones noch Interesse? Ich hab diesen uralten Thread gefunden und mal selber ein wenig weitergebastelt. Wer will kann sich das Ergebnis mal ansehen:

  • Da es ein exe-file ist sollte es keiner öffnen der mir nicht vertraut xP
  • Ich bin kein Profi und das ganze befindet sich in einem frühen Alphastadium -> Fehler sind zu erwarten
  • Webfiles sollten im gleichen Ordner wie die exe liegen

https://drive.google.com/folderview?id=0B2nZjVCxqnxUV0JEVUhKbG5KSWs&usp=sharing

 

Falls ich hiermit irgend was falsch gemacht haben: bitte sagen - ich bin neu hier :wassat:

Edited by Igneous

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...