Jump to content
Sign in to follow this  
Tüftler

Playlist Script/ Fehlerbehebung EVR-/ VMR-Renderer

Recommended Posts

Tüftler

Einigen, vornnehmlich Vista Usern, wird folgender Fehler bereits aufgefallen sein:

 

Sollen in der Playlist des DVBViewers Videos automatisch fortlaufend abgespielt werden (ist ja Sinn einer Playlist) so kommt es ,bei der Nutzung mit dem EVR- bzw. VMR Renderern, zu keinem Titelsprung beim Ende des aktuellen Titels.

Sprich das letzte Frame des Videos bleibt im DVBViewer stehen.

 

Hier setzt nun mein Script an:

 

Bei jedem Start eines Titels (egal ob Audio oder Video) aus der Playlist wird die "End.vbs" aufgerufen und vergleicht fortlaufend die abgespielte Position bis das Ende erreicht ist.

Im Falle eines "stehen Bleibens" beim letzten Frame (letzte Sekunde!) wird ein Sprung zum nächsten Titel eingeleitet.

Das Script wird automatisch beendet wenn:

- die Playlist ansich beendet wird

- das Ende der Playlist erreicht wird und kein "Wiederhole" eingestellt ist

- der DVBViewer beendet wird

 

Die zwei Dateien aus dem zip müssen einfach nur in den Scripts Ordner des DVBViewer entpackt werden (playlist.vbs wenn vorhanden ersetzen) und im Optionen Menü des DVBViewer muss die Script Engine aktiv sein! ( Siehe dazu http://de.DVBViewer.tv/wiki/Optionen_Skripte )

 

Probleme bei Nutzung des Scripts mit irgendeinem Renderer konnte ich weder bei Vista noch bei XP finden.

Sollte dem doch so sein, einfach eine Problembeschreibung posten.

 

Scripts.zip

:)

Edited by Tüftler

Share this post


Link to post
Lars_MQ
-> Wer dazu einen Lösungsvorschlag hat, immer her damit! Ich konnte im Netz nichts dazu finden. (Explizite Abfrage ob End.vbs noch/schon läuft)

Schreib die daten in den datamanger des Viewer. Der merkt sich das fürs script. :) Nur nimm keinen Key, der Systemdaten überschreibt, das gibt ärger.

 

BTW das geht solange gut, wie die Laufzeit von Windows korrekt berechnet wird. Sobald VBR und Co ins spiel kommen könnte es haarig werden... B)

Share this post


Link to post
Tüftler

Das mache ich ja bereits, aber wenn man den Task abschießt so stimmt meine Variablenzuordnung halt nicht mehr.

-> Wenn das Script aktiv ist wird im Datamanager "#End"=1 gesetzt und beim beenden "#End"=0.

Deshalb funktioniert es ja auch nach einem DVBViewer Neustart wieder korrekt. :)

Share this post


Link to post
Lars_MQ

Irgendwas geht da wohl an mir vorbei. Wozu braucht man sowas über die laufzeit der wiedergebenden Applikation hinaus? Und noch wichtiger, wer garantiert, das es sich um die gleiche instanz handelt?

Share this post


Link to post
Tüftler
Irgendwas geht da wohl an mir vorbei. Wozu braucht man sowas über die laufzeit der wiedergebenden Applikation hinaus?

Jetzt verstehe ich deinen Einwand wieder nicht?

Die gesetzte Variable dient mir lediglich dazu zu Prüfen ob das Script bereits arbeitet oder halt nicht.

Es soll und arbeitet ja auch nicht über die Applikation hinweg.

Mir fehlt derzeit lediglich die Möglichkeit dies anders zu Bewerkstelligen.

Und noch wichtiger, wer garantiert, das es sich um die gleiche instanz handelt?

Darum geht es ja genau. Das zu Prüfen ist bei einem Script fast ausgeschlossen. Zumindest wenn es mit den Mitteln von VBS selbst gelöst werden muss. Schließlich wird die vbs selbst immer in der WScript.exe ausgeführt.

Share this post


Link to post
Lars_MQ

Oki ich seh schon, wir reden völlig aneinander vorbei B) Ignoriere meine vorigen einwände bitte, ich hatte da nen Denkfehler drinne. :)

Share this post


Link to post
craig_s
Das einzige woran das Script scheitert ist, wenn man die laufende WScript.exe im Taskmanager "abschießt", da die Variablenzuordnung dann nicht mehr stimmt. Nach einem Neustart des DVBViewers ist dieses Problem aber wieder vom Tisch.

-> Wer dazu einen Lösungsvorschlag hat, immer her damit! Ich konnte im Netz nichts dazu finden. (Explizite Abfrage ob End.vbs noch/schon läuft)

..wie im Slicies-Thread schon gesagt laufen deine Scripts bei mir mit XP+VMR9 völlig perfekt. Leider bin ich zu dusselig zu verstehen warum ich "WScript.exe im Taskmanager abschießen" sollte. Mit diesem Akt der Gewalt kann man doch alle möglichen Skripts "in den Wahnsinn" treiben. Da kann man doch nicht von "Scheitern" sprechen? Oder meinst du irgend ne Vista/Win7 Spezialität?

Edited by craig_s

Share this post


Link to post
Tüftler

Es geht hier ja auch nur darum das Script gegen äußere Einflüsse (User) abzusichern.

Natürlich kann man jedes Script damit außer Betrieb setzen, aber nicht jedes Script hat nach dem Neustart ein Problem damit.

Mein Script speichert und nutzt aber Variablen im und aus dem DVBViewer Datamanager und diese bleiben auch nach dem Task "abschießen" bestehen, weshalb ein Neustart des DVBViewers alles wieder ins Lot bringt.

Edited by Tüftler

Share this post


Link to post
sw4y

Funktioniert tadellos und trägt somit wieder ein Stück mehr zur vollkommenen Zufriedenheit bei.

 

Vielen Dank!

Share this post


Link to post
nuts

Verstehe das Problem trotzdem nicht, überschreibe die Variablen doch zu beginn des Skriptes mit entsprechenden Werten und befülle sie wie gehabt neu?

Share this post


Link to post
craig_s

Hi Tüftler,

musst wohl doch noch etwas feilen. Habe grad von 4.1.1.1 auf 4.2.1.0 upgedatet und nun springt die WScript.exe gar nicht mehr an. Oder in die neue Version hat sich ein Fehler eingeschlichen... moment mal Blödsinn, die neue Vers. hat die playlist.VBS natürlich wieder mit ner 0 Byte Datei überschrieben, deine reinkopiert, jetzt gehts wieder.

 

Evl. noch als Anregung, nur falls einfach machbar, eine Abfrage nach dem aktuell aktiven Renderer Einbauen, das Skript braucht ja nur bei VMR9/EVR aktiv zu werden.

 

Solche Meldungen kommen wenn man DVBViewer aus versehen wärend des Stopp-Start-Vorganges eines Videos (mit VMR9) beendet:

Edited by craig_s

Share this post


Link to post
Tüftler

@nuts

Das geht leider nicht, da ich den letzten Zustand beim Starten des Scriptes nicht hundertprozentig weiß, deswegen ja auch die Lösung mit dem Datamanager. Aber ich überlege mal weiter.

 

@craig_s

Diese Meldung hatte ich zum Anfang auch und deshalb ein WScript.quit in der Schleife eingebaut.

Habe aber jetzt noch was verändert und teste es gerade.

 

Kannst du deine genaue Vorgehensweise und was du mit Stopp-Start-Vorgang meinst, spezifizieren.

Share this post


Link to post
craig_s
Kannst du deine genaue Vorgehensweise und was du mit Stopp-Start-Vorgang meinst, spezifizieren.

Na ja, die Testpatterns die bei mir ständig durchlaufen sind ziemlich kurz und ich muß oft die Player wechseln für versch. Tests. Wenn DVBViewer gerade unter VMR9 am Ende des (einzigen) Testvideos (aus der Playlist) angekommen ist und das Skript gerade arbeitet um zum Anfang zu springen, also wenn ich DVBViewer nun versehentlich genau in dieser kurzen Schwarzphase "abschieße" (beende), oder ganz kurz vorher, kommen die Meldungen.

> Einmal auch Komplettabsturz WinXP, nur noch Reset war möglich, das werte ich als Einzelfall, aber seither bin ich vorsichtig geworden...

 

Übrigens nur bei VMR9, nicht bei VMR7 oder Overlay, bei denen die WScript.exe ja auch (unnötigerweise) anspringt, vermutl. aber ohne aktives Skript?

Edited by craig_s

Share this post


Link to post
Tüftler

Danke für den Hinweis, habe es bereits reproduzieren können (bei EVR), aber eine sichere Lösung habe ich noch nicht.

 

Auf den Renderer kann ich leider nicht prüfen, aber es ist auch kein Problem wenn es bei Overlay läuft.

Der Prozesstask verbraucht kaum Speicher.

Share this post


Link to post
nuts

Habs immernoch nicht ;)

 

Der Datamanager enthält am Ende des Skripts (bzw. beim Abschließen) einen bestimmten Wert. Mit diesem wird beim Neustart weitergearbeitet. Worin liegt genau der Unterschied zwischen regulärem Ende und dem Abschließen?

Share this post


Link to post
Tüftler

@nuts

Ok, kleine Einführung:

Das Script wird durch die playlist.vbs gestartet.

Also bei jedem neuen Titel/File der gestartet wird, wird die playlist.vbs aufgerufen.

In dieser erfolgt der Aufruf von der end.vbs. Bedingung: die end.vbs läuft noch nicht, was über die Variable End=1 aus dem Datamanager geprüft wird.

 

Annahme end.vbs läuft nicht (Datamanager End=0):

Script wird gestartet und setzt Datamanager End=1.

- Bei Abhandlung des Scriptes erfolgt ein WScript.quit und Datamanager End=0.

- Beim Beenden der Playlist erfolgt ein WScript.quit und Datamanager End=0.

- Beim Beenden des DVBViewers innerhalb der Loop Funktion erfolgt ein WScript.quit.

 

Beim "Abschießen" des Prozesstasks bleibt die Variable Datamanager End=1 und die Prüfung in der playlist.vbs ergibt "Läuft noch". -> Folge ist das der Eingriff über die end.vbs nicht mehr geht, bzw. erst nach einem Neustart des DVBViewers, da der Datamanger zurückgesetzt wird.

 

Durch die Prüfung der Datamanager End Variable wird gewährleistet das eine weitere end.vbs gestartet wird, was natürlich zu Problemen führen würde.

Dies kann bei nicht Prüfung passieren wenn man Bspw. per Hand den nächsten Titel/File anwählt oder einfach mit der Funktion "Next/Previous"!

 

Hoffe jetzt ist dir der Sinn der Variable verständlich geworden.

 

Edit: muss natürlich "das keine weitere" heißen.

Edited by Tüftler

Share this post


Link to post
nuts

Ok habs verstanden, aber ob der DVBViewer da helfen kann?

 

Musst dir was einfallen lassen um das doppelte Ausführen ohne den DVBViewer zu verhindern. ;)

Share this post


Link to post
Tüftler

Man kann das auch über ein Textfile machen, aber 1. hat das viel Datentraffic zur Folge und zweitens bleiben die Probleme beim Task Abschießen bestehen. Da ist die Datamanger Variante die bequemste, sauberste und einfachste.

Aber ich bleibe am Ball. ;)

Share this post


Link to post
nuts

Eine Methode (eigentlich die einzige die ich kenne ;)) ist ein Mutex im System zu registrieren.

1. Start -> Mutex wird registriert

2. Start -> Mutex wird erkannt, Skript wird beendet (oder eine andere Funktion)

 

Müsste man mal suchen ob es dazu eine vbs Lösung gibt.

Share this post


Link to post
craig_s
Danke für den Hinweis, habe es bereits reproduzieren können (bei EVR), aber eine sichere Lösung habe ich noch nicht.

..wird evl. auch schwierig werden, das laufende Skript wird schliesslich mitten bei der Arbeit abgeschossen. Mach einfach nen entsprechenden Hinweis 'DVBViewer nur bei laufendem Playlist-Video beenden' oder so wenn du das Script im WIKI veröffentlichst, der bereits vorhandene, leere playlist.vbs-Eintrag hat schon lange auf dich gewartet!

Edited by craig_s

Share this post


Link to post
Tüftler

Neue Version ist Online .

- Probleme mit Fehlermeldungen beim plötzlichen Beenden des DVBViewers und gleichzeitigen Neuaufruf des Scriptes sollten behoben sein

- Ein "abschießen" des Prozesstasks behindert nicht mehr die korrekte Funktionsweise des Scriptes -> Script wird wieder aktiv wenn händisch zum nächsten Titel gesprungen wird!

- Script wird jetzt korrekt Beendet wenn die Playlist nicht mehr gespielt wird

 

Frohes testen. :)

Share this post


Link to post
nuts

Und wie haste das jetzt gelöst? vbs ist irgendwie gruselig :)

Share this post


Link to post
Tüftler

Mache dir mal keine Sorgen, ich habe auch nur Google bemüht und die Funktion für mich abgeändert:

http://dieseyer.de/scr-html/wmi-aktive-vbs.html

 

Das Script prüft in der Funktion ob der selbe Prozess mit dem Namen end.vbs aus dem Startpfad (C:/Programme/DVBViewer/Scripts/ ) schon läuft.

 

Bei msdn kann man das dann noch weiter ausklamüsern, hier für Prozesse:

http://msdn.microsoft.com/en-us/library/aa...28VS.85%29.aspx

Share this post


Link to post
craig_s

..bin begeistert Tüftler, hat ja voll hingehauen!!!

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...