Jump to content

DVBViewer AddOns via VBS


admi-ral

Recommended Posts

Manch einer hat es gemerkt:

 

DVBViewer 3.2 is out ;)

 

Dass damit einiges *mehr* geht als die Update-List von Christian vermuten lässt ist wohl für die meisten erstmal nicht so offensichtlich.

 

Add: COM: integrated COM-Server (ex-COM-Plugin) into DVBViewer.

 

ABER allein diese Zeile beherbergt einen wahren Koloss von Möglichkeiten, die ab sofort jedem offen stehen. Will sagen: einige direkte Interaktion von selbstgeschriebenen Skripten (kleine Programme z.b. in VisualBasicScript=VBS) mit dem DVBViewer und dessen Daten/Einstellungen/OSD/... erlaubt z.B.

 

- Demuxen von Aufnahmen direkt nach Record-Stop (ProjectX CLI) oder per Auswahl im OSD

- Erweiterte OSD-Menüs komplett manuell angepasst für individuelle Funktionen

- Automatisches Löschen von alten Aufnahmen, wenn die Festplatte voll ist

- automatische EPG-Updates

- .... :ph34r:

 

es müssen erst noch Features gefunden werden, die sich *nicht* direkt oder indirekt mit der COM-Schnittstelle realisieren lassen :D

 

Im Laufe der Zeit werden Lars und ich einige Beispiel-Scripts veröffentlichen, die als Anhaltspunkt für eigenes Coden oder schon fertig zur Benutzung verwendet werden können. Dabei gilt in jedem Fall:

 

BENUTZUNG AUF EIGENE GEFAHR!! Ich übernehme keine Verantwortung für irgendwelche mit dem/vom Script angerichtete(n) Schäden. Darunter fällt z.b. das Löschen von Dateien ;)

 

Da ein Script logischerweise als Quellcode vorliegt, kann/sollte sich jeder vor/während der Benutzung (mit oder ohne Ahnung davon) mal angucken, was denn da eigentlich passiert, oder wo z.B. ein Fehler liegen könnte ;)

 

Noch ein Hinweis:

Das Einbinden von Scripts ist am Einfachsten mit dem im ServiceCenter erhältlichen MenuEditor. Einfach ein neues Programm (!) anlegen mit

Application: "c:\windows\system32\wscript.exe" (oder ähnlich)

Arguments: "c:\programme\DVBViewer\scripts\vbs\MeinScript.vbs //B" (oder ähnlich, Verzeichnis nicht entscheidend)

 

Man kann Scripts natürlich auch mit Grigas MenuCreatorPlugin in das PluginMenü einfügen, das könnte dann in der Menulist.ini etwa so aussehen

SUBMENU >>OSD
ITEM OSD-NOW|c:\programme\dvbviewer3\vbs\osd_show_now.vbs
ITEM OSD-VIDEO|c:\programme\dvbviewer3\vbs\osd_show_video.vbs
ITEM OSD-AUDIO|c:\programme\dvbviewer3\vbs\osd_show_audio.vbs
ITEM OSD-HTPC|c:\programme\dvbviewer3\vbs\osd_show_htpc.vbs
ITEM OSD-OPEN/CLOSE|c:\programme\dvbviewer3\vbs\osd_open.vbs
END

ich finde den Thread gerade nicht, auf dem das Plugin verstaubt :D vielleicht kann jemand aushelfen :D

 

So, dann mal viel Spaß damit

Edited by admi-ral
Link to comment

EPG-Updater

 

die angehängte Datei ist erstmal Standalone, wie das ganze so eingebunden werden kann, dass man das regelmäßig (mit Timer) ausführt, kommt noch :ph34r:

 

Edit:

Achtet bitte (besonders bei diesem Script) darauf, dass *alle* Verknüpfungen in welcher Form auch immer zur DVBViewer.exe die gleiche groß/kleinschreibung haben

 

DVBViewer.exe <> DVBViewer.exe

 

>falls im DVBViewer-Verzeichnis die exe nicht "DVBViewer.exe" sondern (z.b.) "DVBViewer.exe" heißt, sollte sie umbenannt werden. Windows schert sich im gegensatz zu unix eigentlich nicht um diese Sachen, aber die Doppelstart-Verhinderung funktioniert nur, wenn ein neuer Task mit exakt dem gleichen Namen auftaucht :D

epgUpdate.zip

Edited by admi-ral
Link to comment

öhem. das ist etwas schwierig, da das Com-Object a) sehr umfangreich ist unb :ph34r: keine wirkliche Doku existiert. Das ist jetzt erstmal ernüchternd, aber da wird sich glaube ich bald eine handhabbare lösung finden :D

Link to comment
öhem. das ist etwas schwierig, da das Com-Object a) sehr umfangreich ist unb B) keine wirkliche Doku existiert. Das ist jetzt erstmal ernüchternd, aber da wird sich glaube ich bald eine handhabbare lösung finden ;)

 

Ich will wirklich nicht meckern. Die neue Version ist großartig (sollte schon 3.2 sein und nicht dreistellig). Insbesondere COM. Bin schon ganz heiß. Aber mal ganz ehrlich: COM -Fäghigkeit als Feature anzupreisen aber keine Schnittstellenbeschreibung mitzuliefern ist, sagen wir mal, ''irreführende Werbung". Jeder Programmierer weiß: ohne ist's wertlos. Nicht böse sein. Ich weiß: die Zeit, die Zeit.... Und die Alternative; ihr hättet gewartet bis alles fertig ist, hätte mir auch nicht gefallen. Wollte nur unterstreichen: Die Doku ist jetzt heiß ersehnt.

 

mfG erwin

Link to comment
Guest Lars_MQ
Ich will wirklich nicht meckern.

Zu spät schon passiert :)

 

Die neue Version ist großartig (sollte schon 3.2 sein und nicht dreistellig). Insbesondere COM. Bin schon ganz heiß. Aber mal ganz ehrlich: COM -Fäghigkeit als Feature anzupreisen aber keine Schnittstellenbeschreibung mitzuliefern ist, sagen wir mal, ''irreführende Werbung". Jeder Programmierer weiß: ohne ist's wertlos. Nicht böse sein. Ich weiß: die Zeit, die Zeit....

Naja irreführende Werbung, so gross wird damit gar nicht geworben, obwohl das in der Tat eine wahnsinnig mächtige Erweiterung ist.

Aber Du hast recht. Ohne eine komplette beschreibung nützt sie nicht soviel. Ich habe schon eine rudimentäre doku, in der zumindest die schnittstellen / objekte/methoden/properties aufgelistet werden und ich arbeite daran, das weiter zu vervollständigen.

 

Ein ganz grober abriss: Grundsätzlich ist das COM object, wenn der DVBViewer läuft, im ROT eingetragen. Das bedeutet, man bezieht eine laufende instanz mit getactiveobject. Erst wenn das fehl schlägt, fordert man eine neue instanz mit createobject an. Eine tlb ist im Viewer integriert, man kann sie mit delphi /vb auch problemlos auslesen (c/c++ kenne ich leider nicht).

 

Das ganze ist vergleichbar mit dem MS Word COM object. Ein zentrales object (DVBViewer) von dem man alle untergeordneten Objecte (aka Manager) anfordert.

 

Für jeden Bereich gibt es einen entsprechenden Manager (timer/epg/channels/play(list)/recordings usw.). Das ganze ist sicherlich noch nicht komplett, aber ein anfang.

Ich habe mich bemüht die Bezeichner so aussagekräftig wie möglich zu gestalten, so dass man zummindest eine vorstellung der Schnittstelle/Methode/Parameter hat.

 

Es gibt einige Funktionen im Channelbereich und im EPG Bereich, die zusätzlich integriert wurden und auf absolute geschwindigkeit getrimmt sind (im Vergleich zu den Standardfunktionen und in Bezug auf Datenmarshalling mit einem ex-process server). Die werde ich auch ganz genau dokumentieren, da sie etwas schwieriger sind (aber ich habe sie selber schon in einem Projekt benutzt und kann sagen, der der Geschwindigkeitsgewinn liegt bei faktor 50 (grobgeschätzt), wenn man die kanalliste abruft).

 

Ich werde die Doku als eine Work in Progress sobald wie möglich veröffentlichen. Leider bin ich kein so begnadeter Autor wie Griga, daher bin ich dort auf Feedback von den Nutzern angewiesen, um alle Bereiche mit der gebotenen Ausführlichkeit zu behandeln.

Wenn man so tief in einer Materie drinne steckt, setzt man zu oft Sachen als selbstverständlich voraus, die aber eigentlich erklärt werden müssen :)

 

Lars

Link to comment

ins unterverzeichnis \Scripts\ im DVBViewer Verzeichnis (v3.2) schiebe man angehängte datei (stoprec.vbs), modifiziere die Konstanten für die Pfade und schon kann man nach einer aufnahme sofort demuxen lassen :bounce:

stoprec.zip

Link to comment
Eine tlb ist im Viewer integriert, ...

 

Ich habe mich bemüht die Bezeichner so aussagekräftig wie möglich zu gestalten, so dass man zummindest eine vorstellung der Schnittstelle/Methode/Parameter hat.

 

 

Na das ist für einen COM-Programmierer doch schon mal so was wie ein e Prerelease-Doku!

 

 

Danke erwin

Link to comment
  • 2 weeks later...

Ich habe mir mal erlaubt, das EPGUpdate Skript meinen Bedürfnissen anzupassen.

 

Folgendes habe ich geändert:

 

- Code aufgeräumt ;-)

- Wenn notwendig, wird der DVBViewer gestartet

- OSD Abbruchscreen entfernt

- ein Abschluss Kommando wird gesendet

 

Grund für die Anpassungen: Ich habe das Skript als täglichen Systemtask eingetragen, so dass das EPG automatisiert morgens aktualisiert wird und der Rechner danach wieder in den Ruhezustand geht.

epgUpdate2.zip

Link to comment
  • 2 weeks later...

Hallo bin newbie...

 

also könnte mir das freundlicherweise mal jemand mit den Skribts erklären .. habe schon gemerkt das es Visual Basic dateien sind ... aber sonst ?

Wie installiere ich Sie bzw. wende sie auf den DVBViewer hin an ?

 

Mfg

Link to comment

VisualBasicScript (VBS, "beispiel.vbs") ist eine Scriptspräche mit einer Syntax ähnlich VisualBasic. Bei Windows2000 und XP ist der notwendige WindowsScriptingHost (WSH) schon mitinstalliert, bei W98 muss man evlt. nachhelfen. Du kannst natürlich auch andere Programmiersprachen nutzen, VBS ist aber relativ simpel und erfordert keine Compilierung, etc.

 

Zur Anwendung: Das Gros der Scripte, die hier veröffentlicht wurden, nutzt die COM-Schnittstelle des DVBViewer, d.h. es erfolgt eine Kommunikation mit dem DVBViewer COM-Objekt. Eine Auflistung aller möglichen Befehle ist in der Help-Datei im Service-Center zu finden.

Was kann man damit machen? Eigentlich so ziemlich vieles (ALLES :)), was der eigenen Programmier-Laune entspringt.

 

Um ein Script zu starten/nutzen musst Du es am besten mit dem MenuEditor als Application einfügen

App: "c:\windows\system32\wscript.exe"

Arg: "x:\meinscript.vbs" //B

 

oder einfach starten von wo Du willst (w00t) Standardmäßig ist wscript.exe als ausführendes Programm eingestellt.

Link to comment
  • 1 month later...

VB .NET Express 2005 läuft noch bis Mai für lau, dann sind 50$ fällig. Einfach im Menü "Add Reference" wählen und unter COM die DVBViewer Bibliothek wählen. Jetzt kann man die Bibliothek nutzen inklusive IntelliSense.

 

Importieren muss man folgendes:

 

Imports System.Runtime.InteropServices

Imports DVBViewerServer

 

Schnittstellenzeiger wenn DVBViewer schon läuft bekommt man so:

 

Dim v As DVBViewer = CType(Marshal.GetActiveObject("DVBViewerServer.DVBViewer"), DVBViewer)

Link to comment
  • 2 weeks later...

Hallo zusammen,

 

nach dem Update auf den DVBViewer 3.2.3 funktioniert plötzlich das EPGUpdate2 nicht mehr. Das Script startet zwar den DVBViewer und meldet immer wieder, dass ein neuer Kanal gescannt würde, aber das Bild bzw. der Sender wird nicht umgeschaltet. Kann da jemand weiterhelfen?

 

Gruss

Stephan

Link to comment

Hi Lars,

 

der DVBViewer hat ja gestartet, nur erfolgte keine Senderumschaltung... Kannst Du vielleicht für mich neugierige Nase den technischen hintergrund erklären, was sich da geändert hat?

 

Gruss

Stephan

Link to comment
Guest Lars_MQ

Ich nutze jetzt komplett com funktionen und nicht die vorher genutzte commandparameter funktion (DVBViewer.exe + -c).

 

Ich glaube bei der Command parameter sache (-c) müsste der Sendername in " (Anführungsstriche) gesetzt werden, dann sollte das auch gehen.

Link to comment

Hallo Lars,

 

wenn ich Dein Script starte, ohne dass der DVBViewer läuft, dann wird am Ende der DVBViewer beendet, aber das System hängt. Wenn ich vorher den ProcessViewer gestartet habe, dann kann ich sehen, dass der DVBViewer aber noch mit fast 100% Systemlast hängt. Kann es sein, dass da noch irgendwas faul ist.

 

Ich verstehe z.B. nicht, wie die Variable was_running gesetzt wird. Die soll doch wohl true sein, wenn der DVBViewer beim Start des Scriptes schon lief, oder? In diesem Fall soll das Script ja beendet werden und der DVBV soll weiterlaufen. Und für den Fall, dass man das Script in der Nacht zum Update als Systemtask starten lässt, sollte die Variable auf FALSE stehen und dann kann man beim Beenden z.B. in den Hibbernate-Modus gehen.

 

Gruss

Stephan

Link to comment
Guest Lars_MQ

Das was_running habe ich nur eingesetzt um die auskommentierte funktion ganz unten betriebsfähig zu halten (fals es jemand nutzen will. Die logik ist ein wir gehen davon aus der DVBViewer läuft setzen was_running auf True und versuchen uns den laufenden DVBViewer zu holen.

 

Lief der Viewer jetzt nicht geht er in die q'n'd error behandlung und fordern windows auf den DVBViewer über COM-Mechanismen zu starten und setzt dabei gleichzeitig was_running auf false. Die COM-Mechanismen bewirken, das der Viewer beim beenden des scripts auch beendet wird.

 

Bei meinen beiden Testsystemen funktioniert das auch wunderbar. Setzt Du irgendwie noch den Scheduler ein oder ähnliches? Irgendetwas was den Viewer daran hindert sich zu beenden?

Link to comment

OK, bei den COM-Sachen hört mein Verständnis auf und ich danke Dir für die Erklärungen. Die machen es mir dann etwas verständlicher...

 

Ich gehe über den Task-Sheduler um geplante Aufnahmen zu starten, sonst nix... Das komisch ist ja, dass es funktioniert, wenn der DVBV läuft (ok, aber dann muss er ja auch nicht beendet werden...).

Link to comment
Das was_running habe ich nur eingesetzt um die auskommentierte funktion ganz unten betriebsfähig zu halten (fals es jemand nutzen will. Die logik ist ein wir gehen davon aus der DVBViewer läuft setzen was_running auf True und versuchen uns den laufenden DVBViewer zu holen.

 

Lief der Viewer jetzt nicht geht er in die q'n'd error behandlung und fordern windows auf den DVBViewer über COM-Mechanismen zu starten und setzt dabei gleichzeitig was_running auf false. Die COM-Mechanismen bewirken, das der Viewer beim beenden des scripts auch beendet wird.

 

Bei meinen beiden Testsystemen funktioniert das auch wunderbar. Setzt Du irgendwie noch den Scheduler ein oder ähnliches? Irgendetwas was den Viewer daran hindert sich zu beenden?

 

Ich habe bei mir einfach die Zeile "DVBViewer.SendCommand(&H00003026)" am Ende wieder reingenommen, dann klappt's. Andernfalls wird der Viewer irgendwie zu hart beendet und hat noch nichtmal die Chance, die EPG-Daten zu speichern... :(

 

Noch was: Gibt's eine COM-Funktion, mit der man den Ton oder besser noch die gesamte Wiedergabe deaktivieren kann? Nervt nämlich etwas...

 

EDIT: OK, für dieses Problem hab ich eine Lösung gefunden: Hab einfach eine Batchdatei gebastelt, die für das EPG-Update eine DVBSOURCE.grf in den Stammordner kopiert und danach wieder löscht. Im Script habe ich das "End if" vom Running-Check in die letzte Zeile verschoben, so dass das Update nur durchgeführt wird, falls der DVBViewer nicht läuft. Hach nee is dat scheen, wenn man das alles so nach seinen Bedürfnissen anpassen kann... (w00t)

Edited by Unauthorized
Link to comment
  • 12 years later...

Hallo,

 

ich bin gerade auf diesen interessanten Thread gestoßen. Gibt es eine Möglichkeit festzustellen, daß der DVBViewer eine Sender nicht tunen konnte?

 

Ich lasse den DVBViewer per AutoHotkey-Script EPG und Videotext-Daten speichern. Dazu arbeitet das Script eine Liste mit Sendernummern ab. Wenn gerade kein Transponder frei ist, kann de DVBViewer natürlich nicht den gewünschten Sender einstellen und dann landet z.B. der Videotext von 3Sat im Verzeichnis für Arte.

 

 

Viele Grüße

 

Webturtle

Link to comment

Join the conversation

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

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

×
×
  • Create New...