Jump to content

Schnellen Vorlauf in Script erkennen


Recommended Posts

Gibt es eine Möglichkeit, in der command.vbs zu erkennen, ob gerade der schnelle Vorlauf bei einer Medienwiedergabe aktiv ist? Die Datamanager Variable #currentspeed wird zwar bei Vorlauf auf ">>2" usw. gesetzt, beim Beenden des Vorlaufs aber leider nicht zurückgesetzt (z.B. auf ">>1").

Link to comment

Da hast du recht. Vorschlag: Du könntest die Variable vor dem Abfragen auf 0 setzen und würdest so feststellen können ob sie mit dem aktiven Wert wieder überschrieben wurde.

Ich melde das Verhalten aber mal weiter.

Link to comment

Da hast du recht. Vorschlag: Du könntest die Variable vor dem Abfragen auf 0 setzen und würdest so feststellen können ob sie mit dem aktiven Wert wieder überschrieben wurde.

Ich melde das Verhalten aber mal weiter.

 

Die Variable wird immer mit dem aktuellen Wert überschrieben, nur eben nicht beim Abschalten des Vorlaufs (wenn man beim Vorlauf Play oder Pause drückt). Rücklauf habe ich übrigens nicht getestet.

 

Vor dem ersten Spulen ist die Variable leer. Danach enthält sie die zuletzt eingestellte Geschwindigkeit größer 1. Ich denke, das ist ein Bug (sehr kleiner). Vielleicht kann man das in einem der nächsten Releases korrigieren.

 

Mein Problem ist, dass ich bei der Medienwiedergabe die Play-Taste gerne als Start/Stop Schalter verwenden möchte. Um mit Play auch das Spulen abzuschalten, muss ich wissen, ob es eingeschaltet ist. Und dafür würde sich die Variable anbieten.

Link to comment

wird sie auch mit dem vorhergehenden Wert überschrieben wenn das Spulen nicht mehr aktiv ist, also wenn du ihn vorher nullst/überschreibst?

Link to comment

Mein Vorschlag geht nicht da die Variable nur einmalig, bei einer Änderung, gesetzt wird (aufheben des Spulens/Springens zählt derzeit nicht dazu). Lars schaut sich das an.

Link to comment

Ansonsten schau mal uplugininterfaces.pas aus den sourcen von myPrograms an. Es gibt actions wie

 

 ACTION_NONE = $FFFFFFFF;
 ACTION_PAUSE = $00000000;
 ACTION_FORWARD = $00003010;
 ACTION_REWIND = $00003011;

 

oder messages

 

 OSD_MSG_PLAYBACK_STOPPED = $0000000B;
 OSD_MSG_PLAYLIST_CHANGED = $0000000C;
 OSD_MSG_PLAYBACK_ENDED = $0000000D;
 OSD_MSG_PLAYBACK_STARTED = $0000000E;
 OSD_MSG_PLAY_FILE = $0000000F;
 OSD_MSG_STOP_FILE = $00000010;
 OSD_MSG_SEEK_FILE_PERCENTAGE = $00000011;
 OSD_MSG_SEEK_FILE_END = $00000012;
 OSD_MSG_SEEK_NEXT_FILE = $00000013;
 OSD_MSG_SEEK_PREV_FILE = $00000014;
 OSD_MSG_SEEK_FILE_BEGIN = $00000015;

 

Allerdings bin ich nicht sicher ob du an die in der command.vbs kommst. Und wenn, ist nicht sicher ob sie helfen.

Edited by mague
Link to comment

Ich meine bei den vom DVBV aufgerufenen vbs Skirpten ist die Laufzeit begrenzt.

D.h. dort kann man nicht auf Events (wobei ich auch nicht sicher bin ob die helfen) warten. Höchstens man lagert diesen Teil auf ein weiteres Skript aus?

 

Am einfachsten wäre wenn die Variable im Datamanager immer entsprechend aktualisiert wird. Mal abwarten ob Lars da eine Lösung findet.

Edited by nuts
Link to comment

Ist das zu empfehlen?

 

z.B. könnte die command.vbs nach dem ersten Aufruf in einer endlosschleife verweilen und auf Events lauschen.

In dieser Zeit könnte die command.vbs vom DVBV erneut aufgerufen werden. Was passiert dann?

Link to comment

Ist das zu empfehlen?

 

z.B. könnte die command.vbs nach dem ersten Aufruf in einer endlosschleife verweilen und auf Events lauschen.

In dieser Zeit könnte die command.vbs vom DVBV erneut aufgerufen werden. Was passiert dann?

 

Ist nicht zu empfehlen. Hatte das mal eingestellt und dann noch einen Denkfehler im Script. Das hing dann dermaßen, dass ich den Viewer killen musste.

 

Um vernünftig auf die Messages SEEK .. BEGIN /END reagieren zu können, bräuchte es schon ein Plugin. Ziemlich viel Aufwand, nur um eine Variable zu setzen. Vielleicht kann Lars das einfacher lösen.

 

Schlimmstenfalls muss ich halt doch eine separate Taste auf der FB spendieren.

Link to comment

Denke ich auch.

Keine Schleifen und möglichst schnell wieder raus aus den Skripten.

 

Ich würde auch mal abwarten was Lars dazu einfällt.

Link to comment

Ich denke, ich habe einen Workaround gefunden. Hier mal ein kleiner Codeschnipsel in Pseudocode (kein korrektes VBS) aus der command.vbs:

 

case 30001:   ' Custom Play Command

  ' Nur bei Wiedergabe oder timeshift interessant
  if ismediaplayback or istimeshift then
     cs = datamanager.value ("#currentspeed")

     if cs = "" or cs = "1" then
        ' Wenn seek aus, dann schaltet Play die Wiedergabe ein/aus
        sendcommand (0)   ' toggle start/stop
     else
        ' Wenn seek ein, dann schaltet Play seek aus
        sendcommand (92)  ' Action play = seek ausschalten
        ' setze Variable auf seek = aus = 1
        datamanager.value ("#currentspeed") = "1"
     endif
  else
     ' ansonsten normale Action play
     sendcommand (92)
  endif

 

Soll folgenden Effekt haben:

 

Wenn bei Medienwiedergabe oder Timeshift kein Vorlauf oder Rücklauf aktiv ist, soll die Play-Taste zwischen Wiedergabe und Stop umschalten. Wenn der Vorlauf ider Rücklauf aktiv ist, soll die Play-Taste diesen abschalten und normal abspielen.

 

Wenn ich da jetzt keinen Denkfehler drin hab, sollte es gehen. Testen geht erst heute abend.

Edited by dbraner
Link to comment

Das funktioniert allerdings nur wenn "Custom Play Command" die einzige Möglichkeit ist den schnellen Vorlauf zu beenden.

Link to comment

 

Wenn ich da jetzt keinen Denkfehler drin hab, sollte es gehen. Testen geht erst heute abend.

 

Notfalls setzte deine eigene #dbraner.currentspeed und pruefe gegen die. Dann kann dir der Viewer nicht dazwischenfunken.

Link to comment

Wie gesagt muss man dann wirklich jede Aktion die Einfluss auf den "schnellen Vorlauf" hat auch behandeln.

Abschließend drüber nachgedacht habe ich noch nicht, aber das dürften doch einige sein oder?

 

Schöner wäre wenn der DVBViewer das richtig setzt. Aber dort könnte das gleiche Problem drohen? :whistle:

Link to comment

Wie gesagt muss man dann wirklich jede Aktion die Einfluss auf den "schnellen Vorlauf" hat auch behandeln.

Abschließend drüber nachgedacht habe ich noch nicht, aber das dürften doch einige sein oder?

 

Schöner wäre wenn der DVBViewer das richtig setzt. Aber dort könnte das gleiche Problem drohen? :whistle:

 

Ich dachte, ich hätte mit Play, Pause und Stop alle Einflüsse abgefangen, die den Vorlauf beenden können. Nun kann man aber beim Vorlauf die Geschwindigkeit wieder mit der Rücklauftaste reduzieren. Dabei wird auch #currentspeed entsprechend wieder angepasst. Aber leider nur runter bis auf ">>2". Wenn man per Rücklauf dann den Vorlauf komplett ausschaltet, ändert er die Variable wieder nicht.

 

Mal sehen: vielleicht ist es Programm intern ja einfacher zu lösen.

Link to comment

Die Wiedergabe eines anderen Files während des schnellen Vorlaufs würde mir spontan noch einfallen.

Gibts bestimmt noch ein paar andere Spezialfälle die zu beachten wären.

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