Jump to content

Verbesserte Timeschift-Warnung


Headhunter3000

Recommended Posts

Hi,

 

folgender Optimierungsvorschlag für die optionale Timeshift-Warnung:

 

Bisher kann man die Timeshift-Warnung bei Senderwechsel in den Optionen unter "Aufnahme-Optionen -> Timeshift -> Einstellungen -> Warnung bei Senderwechsel wenn Timeshift aktiv ist" ein- und ausschalten.

 

Wenn man jetzt zeitgleich "Automatischer Timeshift-Start" aktiviert hat, führt die aktivierte Timeshift-Warnung dazu, dass bei jedem Zappen immer die Warnmeldung bestätigt werden muss. Das ist nicht gerade komfortabel beim Durchzappen. Viel besser wäre es doch, wenn diese Warnung nur kommen würde, wenn man tatsächlich bereits im Timeshiftbuffer zurückgespult hat und nicht das Live-Signal, sondern tatsächlich versetzt guckt - quasi nach dem Motto "Hey, es gibt noch 'Material', dass nach dem Umschalten verloren geht." - beim Umschalten eines Live-Signals besteht diese Gefahr ja nicht. So ein Verhalten kenne ich auch von meinem letzten DVB-S-Hardware-Receiver.

 

Eine Option "nur bei Nicht-Live-Signal" o.ä. unterhalb der Timeshift-Warnungs-Checkbox könnte dieses neue Verhalten optional einstellbar machen.

 

Gruß,

Headhunter

Link to comment

Es gibt ja aber auch die Möglichkeit im Nachhinein die getimeshifteten Daten in ein Recording umzuwandeln was sich ohne Warnung beim Umschalten dann erledigt hätte. Manchmal schalte ich auch Timeshift an, mache den TV aus (lasse einfach weiterlaufen) und springe später erst zurück nachdem der TV wieder angeschaltet wurde. In so einem Falle würde mir ein Umschalten die Timeshiftaufnahme dann versauen.

Link to comment

Hi,

 

deshalb das Ganze ja als zusätzliche Option. So kann es sich jeder einstellen, wie er mag. Beim Szenario (TV aus und später einschalten) weiß man ja, dass man x Stunden davor aufgenommen hat - man spult ja sofort zurück (-> wie Videorecorder). Beim versetzten Fernsehen vergisst man manchmal, dass man nicht live ist. :wacko:

 

Ich hatte es schon ganz oft, dass ich z.B. 10 Minuten versetzt geguckt habe (weil z.B. zwischendurch Telefon klingelte -> PAUSE) und dann später in einer Werbepause dachte: "Mal gucken, was auf den anderen Sendern so läuft". Und schwupps waren die 10 Minuten weg (man denkt halt einfach nicht daran). :)

Link to comment

Aber zurückspulen geht halt nicht. Szenario: Man guckt Live-Bild, muss dann den Raum verlassen, hat keine Chance (oder auch keine Lust -> es geht hier um Komfort!), PAUSE zu drücken. Wenn man wieder zurückkommt, will man zurückspulen und weiter gucken. Wenn man Timeshift dann nicht vorher explizit angemacht hat, guckt man in die Röhre. :)

 

Meiner Meinung nach sollte Timeshifting weitestgehend vom Benutzer "unbemerkt" funktionieren. Der Benutzer sollte nicht wissen/entscheiden müssen, ob er vorher Timeshift an- oder ausschalten muss, es muss einfach nur laufen und ihm Nutzen/Komfort bringen, wenn er es braucht. Dafür ist "automatischer Timeshift" ideal. Nur die Warnmeldung beim Zappen eines Live-Signals stört.

 

Gruß,

Headhunter

Link to comment

Wurde doch schon oben erklärt, dann ist die Warnung nämlich auch weg, wenn man sie eigentlich haben will um nicht versehentlich durch Umschalten den Inhalt zwischen aktuell angesehener und Live-Position zu verlieren.

Link to comment

Woher soll das Programm wissen, ob jemand die Warnung "eigentlich" haben will? Dass der DVBViewer nicht speziell für deine Vorlieben programmiert wird, dürfte klar sein, und das Ausbleiben der Warnung, wenn noch nicht zurückgespult wurde, könnte für andere höchst ärgerlich sein.

 

Seit es PCs gibt, wünsche ich mir einen Texteditor, der automatisch erkennt, ob ich einfügen oder überschreiben will. Ist auch bislang unerfüllt...

Link to comment

Klar, deshalb dürfte folgende Einstellmöglichkeiten wohl jeden zufriedenstellen:

 

1. Niemals warnen

2. Nur warnen, wenn aktuelle Position mindestens ### Sekunden von Live-Position abweicht

3. Immer warnen

 

1 und 3 gibts ja aktuell, fehlt also noch Punkt 2 um die Timeshift-Funktionalität zu perfektionieren.

Edited by Freezer
Link to comment

Freezer hat die drei Optionen, mit denen jeder glücklich wäre, gut zusammengefasst. Punkt 2 beschreibt auch die Logik, die nötig ist, um herauszufinden, ob eine Warnung kommen soll oder nicht. Einfach aktuelle Position und Live-Position vergleichen. Wenn unterschiedlich, dann warnen, sonst nicht.

 

Als Beispiel, dass diese Funktion nichts "Extravagantes" ist: Ich hatte vor DVBViewer ein Topfield TF5000PVR und darauf ein Tool (= TAP) namens Improbox installiert (evtl. bekannt). Dort gab es diese Funktion auch - sogar mit noch mehr Optionen). Im Handbuch (http://www.improbox.de/ImproBoxAnleitung.zip) ist die Funktion ("Timeshiftüberwachung") wie folgt beschrieben (Kapitel 5.14 / S. 18):

 

Timeshiftüberwachung:

Für den Fall dass man durch eine Aktion den Timeshiftpuffer löschen würde, wird eine Warnung ausgegeben, wenn:

 

Timeshift

  • man sich gerade im Timeshiftmodus befindet, also zeitversetzt, schaut.

Timeshift und nach Zeit

  • zusätzlich auch wenn der Timeshiftpuffer mindestens mit unter Punkt 15. festgelegten xx Sekunden gefüllt ist (auch wenn man gar nicht zeitversetzt schaut).

Rec- / Timeshift und nach Zeit

  • zusätzlich wenn man im Timeshift-Modus schaut und diese Sendung aufgenommen wird. Diese Funktion dient dazu, dass vor dem Umschalten daran erinnert wird, ein Lesezeichen (Bookmark) zu setzen, um die entsprechende Stelle später schneller wiederzufinden.

 

Ich hatte auch schon überlegt, ob man die Funktion nicht über Skripte selbst erledigen kann (channelchange.vbs). Es gibt ja in den XMLs der OSD-Skins (z.B. myMiniEPG.xml) die Variablen #TV.Timeshift.position, #TV.Timeshift.duration, #TV.Timeshift.percentage usw. Vielleicht kommt man da ja von Skriptseite irgendwie ran und kann die Werte vergleichen. Ist nur die Frage, ob channelchange.vbs VOR oder NACH dem Kanalwechsel ausgeführt wird (ich hab's noch nicht ausprobiert). Für die gewünschte Funktionalität müsste man eine Methode haben, die VOR dem Kanalwechsel ausgeführt wird und bei Abbruch durch den Benutzer false zurückgibt und so das Umschalten verhindert. Gibt es sowas?

 

Abschließend möchte ich noch sagen, dass es sicherlich unterschiedliche Arten gibt, wie man ein Programm benutzen kann. Deshalb ist der Weg des einen nicht "fälscher" als der Weg des anderen. ;) Sonst wird es schon fast ideologisch. Aus diesem Grund bin ich ein Freund von Optionen. So kann sich jeder das Programm so einstellen, wie er es für richtig hält. :)

 

Gruß,

Headhunter

Link to comment

@command.vbs: Habe ich auch schon daran gedacht. Wenn man jetzt noch die Kanaldirektwahl (über Zifferntasten) per command.vbs abfangen könnte, würde ich das echt mal versuchen. Geht das?

 

Eine "beforechannelchange.vbs" oder "channelchanging.vbs" wäre natürlich der optimale Weg. :-)

 

Gruß,

Headhunter

 

PS @Tüftler: Ich habe von Dir gelernt. Habe lange Zeit Deine iMON-/MCE-Konfiguration im Einsatz gehabt. :)

Edited by Headhunter3000
Link to comment

Es gibt ja in den XMLs der OSD-Skins (z.B. myMiniEPG.xml) die Variablen #TV.Timeshift.position, #TV.Timeshift.duration, #TV.Timeshift.percentage usw. Vielleicht kommt man da ja von Skriptseite irgendwie ran und kann die Werte vergleichen.

Man kommt schon ran. Allerdings ist mir in einer Plugin-Entwicklung aufgefallen, dass die Genauigkeit dieser Werte nicht zu einer genauen Bestimmung, ob LIVE geschaut wird, ausreichen. Mir scheint sie werden aus der Datenrate bestimmt und gerade bei Veränderungen dieser wachsen auch die Ungenauigkeiten.

 

Siehe auch hier: http://www.DVBViewer.tv/forum/topic/39324-tvtimeshiftremain/page__view__findpost__p__286249

 

und hier http://www.DVBViewer.tv/forum/topic/42383-differenz-aus-currentplaytime-und-duration/page__view__findpost__p__311538

 

erwin

Edited by erwin
Link to comment

Wenn die Werte einigermaßen genau sind (Toleranz ~10Sek.) wäre das für mich akzeptabel. Ich werde es in einer freien Minute mal ausprobieren (evtl. am Wochenende). Bleibt nur noch die Frage, wie man die Zifferntasten bei der Kanalwahl in der command.vbs abfängt. Wenn da noch einer einen Tipp hat, wäre ich dafür dankbar.

Link to comment

Wenn die Werte einigermaßen genau sind (Toleranz ~10Sek.) wäre das für mich akzeptabel.

Naja bei mir wurden 10 Sekunden Abweichung durchaus schon erreicht (N24, also nicht mal HD). Siehe auch den 2. Link oben.

 

 

Bleibt nur noch die Frage, wie man die Zifferntasten bei der Kanalwahl in der command.vbs abfängt. Wenn da noch einer einen Tipp hat, wäre ich dafür dankbar.

Lerne sie über eigene, neuvergebene ID's an. Hat auch sonst Vorteile.

 

erwin

Edited by erwin
Link to comment
Naja bei mir wurden 10 Sekunden Abweichung durchaus schon erreicht (N24, also nicht mal HD).

Das wundert mich. Der DVBViewer weiß intern ganz genau, ob es sich bei Timeshift-Betrieb um Live-Wiedergabe handelt, denn die relative Dateiposition (Floating Point im Bereich 0...1) ist dann immer gleich 1. Das lässt sich nicht abfragen?

Link to comment

Also für die 4.5 hab ich das noch nicht probbiert.

 

Das wundert mich. Der DVBViewer weiß intern ganz genau, ob es sich bei Timeshift-Betrieb um Live-Wiedergabe handelt

Deshalb wäre es bestimmt kein großer Aufwand eine Datamanagervariable "isLive" zu setzen ;-)

 

 

denn die relative Dateiposition (Floating Point im Bereich 0...1) ist dann immer gleich 1. Das lässt sich nicht abfragen?

 

Lies hier nochmal: http://www.DVBViewer.tv/forum/topic/39324-tvtimeshiftremain

 

Das Problem scheint zu sein dass die Datamanagervariablen (z.B. "remain") von Floating Point auf 2 Stellen gerundet werden. Z.B auch auf 0,00 abgerundet, obwohls kein exaktes ( +/- 10 Sekunden wie gesagt) LIVE ist.

 

erwin

Edited by erwin
Link to comment

Wenn die Werte einigermaßen genau sind (Toleranz ~10Sek.) wäre das für mich akzeptabel. Ich werde es in einer freien Minute mal ausprobieren (evtl. am Wochenende). Bleibt nur noch die Frage, wie man die Zifferntasten bei der Kanalwahl in der command.vbs abfängt. Wenn da noch einer einen Tipp hat, wäre ich dafür dankbar.

Wie erwin bereits sagte kann man einer eigenen ID-Funktion jede andere Funktion in der command.vbs laut ActionID neu zuweisen.

In der Vorgängerversion der iMonPad-Konfig (im Thread ganz unten) habe ich über eine ähnliche Zeitvergleichsvariante die Pauseerkennung ermittelt, da es damals noch keine Variable für den Renderstate gab, siehe pause.vbs.

Wenn du Hilfe brauchst oder Fragen hast eröffne einfach einen Thread im Scripting Lounge / COM-Bereich, ich habe aktuell keine Zeit für die Umsetzung/Austesterei. :bye:

Link to comment

Nach etwas Recherche scheint sich die Sache leider etwas schwieriger zu gestalten. Zu überprüfen, ob man gerade nicht live guckt und darauf hin den Benutzer zu warnen, ist wohl nicht das Problem, da man die entscheidenden Variablen zur Verfügung hat (z.B. #remain > 0).

 

Was aber fehlt, ist das Ereignis, das diese Kontrolle auslöst. Idee: Action ID über command.vbs abfangen. Nur leider ist der Senderwechsel an sich keine abfangbare Action, sondern nur die Tasten, die einen Kanalwechsel ausführen. Allerdings kann ein Senderwechsel ja über mehrere Arten erfolgen: Zifferntasten, Channel +/-, über die diversen OSD-Menüs (Timeline, EPG usw.). Channel +/- wäre abfangbar, aber die anderen Wege sind problematisch (wie würde man z.B. eine Ziffernfolge abfangen - mit Schaltverzögerung und allem drum und dran? Was passiert bei Senderwechsel über die Timeline?).

 

channelchange.vbs wird leider auch erst nach dem Senderwechsel gefeuert, dann ist der Timeshiftbuffer aber schon weg, kann also hier nicht verwendet werden. Was man bräuchte, wäre eine Ereignis vor dem Senderwechsel, bei dem man den Senderwechsel abbrechen kann (z.B. beforechannelchange.vbs mit boolschem Rückgabewert: true = Senderwechsel erlaubt, false = Senderwechsel abbrechen).

 

Ich habe deshalb jetzt erst einmal keinen Thread im Skriptforum aufgemacht. Der ursprüngliche Vorschlag für eine direkte Warnungs-Option bleibt weiterhin bestehen. Wenn das nicht geht, wäre zumindest die oben beschriebende beforechannelchange.vbs eine große Hilfe (ist ggf. auch für andere Vorhaben hilfreich).

Edited by Headhunter3000
Link to comment

Das es mehrere Möglichkeiten gibt einen Sender zu tunen war mir dabei schon klar aber ich dachte dir reicht eine bevorzugte (Kanal+/-).

Ich mache mal ein wenig Brainstorming.

Link to comment

Ok, ein Vorschlag:

Dich stört ja die Meldung wenn noch kein Timeshiftmaterial angesammelt wurde.

Wie wäre es denn dann wenn du über die windowload.vbs die Variable #currentwindow auf den Timeshiftwechseldialog prüfst und bei true anschließend schaust ob ein Timeshiftinhalt besteht. Wenn da keiner ist sendest du ein OSD Ok (ActionID 73) und der Senderwechsel erfolgt.

Edited by Tüftler
Link to comment

Geniale Idee! :-) So hat man die Möglichkeit, unabhängig von der Tuningmethode auf einen Senderwechsel zu reagieren! Das werde ich direkt ausprobieren, aus Zeitmangel wohl aber erst am Wochenende. Ich werde hier und/oder im Skriptforum berichten...

 

Vielen Dank für den Tipp! :-)

Link to comment

Aber "Timeshiftmaterial" ist doch bei aktiviertem Timeshift immer vorhanden, relevant wäre ja nur Material nach der aktuelle angeschauten Position, oder nicht?

Edited by Freezer
Link to comment

Die Sache hat mir ja keine Ruhe gelassen. Deshalb habe ich mich doch schon an die Sache rangesetzt. :-)

 

Vom Prinzip her funktioniert die Warnmeldung so wie ich mir das vorstelle. Der Code in der windowload.vbs sieht jetzt so aus (eigentlich recht übersichtlich):

 

sub main(WindowID)

  [...]

  Dim currentWindowTitle
  currentWindowTitle = Datamanager.Value("#currentwindow")

' Timeshift Warning only if not live! (Activate Timeshift warning in settings!)
  If WindowID = 100 Then
    ' TODO: Localized window title???
    If currentWindowTitle = "Aufnahme/Timeshift ist aktiv!" Then
      Dim strRemainTime
      strRemainTime = Datamanager.Value("#remain")

      If strRemainTime = "00:00:00" Then
        SendCommand(73)
      End If
    End If
  End If 

  [...]

end sub

 

Soweit so gut. Man sieht beim Umschalten eines Live-Signals noch nicht einmal das Warnfenster aufflackern. Leider funktioniert das Ganze nur einmal. :-) Danach kommt das Warnfenster wieder bei jedem Umschalten. Das liegt daran, dass die windowload.vbs nur beim ersten Aufruf eines OSD-Fensters ausgeführt wird, hier beim ersten Aufruf einer Ja/Nein-Dialog-Box (Window-Id = 100).

 

Hmmm, wat nu...

 

Ich habe in der COM-Doku des DVBViewers gesehen, dass der DVBViewer ein Event "onOSDWindow" feuert, wenn ein OSD-Fenster aktiviert wird. Wenn dieses Event bei jedem Anzeigen des Fensters gefeuert werden würde und nicht nur beim ersten, dann wäre das Ereignis genau das, was man bräuchte. Mal sehen, evtl. wagt man sich doch mal an die PlugIn-Programmierung heran...

Link to comment

Im Anhang eine geänderte windowload.vbs und die Timeshiftcontent.vbs.

Beide in das Scriptverzeichniss entpacken.

Die Variable #remain arbeitet leider erst mit steigender Timeshiftdauer zuverlässig, aber sonst geht es erstmal.

Die Timeshiftcontent.vbs musst du noch gegen ein DVBViewer beenden absichern, sonst kommt es zu einer Fehlermeldung. Hab das nur mal auf die schnelle gescriptet.

Viel Erfolg :bye:

Timeshiftcontent.zip

Link to comment

In der command.vbs kann man ja nur auf Actions reagieren, also alles was man z.B. über Tastatur oder Fernbedienung abschicken kann. Ich muss aber auf das Aufpoppen des Timeshift-Warnung-Fensters reagieren. In der windowload.vbs geht das aber nur beim allerersten Laden des Fensters.

 

Es bleibt spannend. Wer weiß, vielleicht lässt sich das Entwicklerteam ja doch noch erweichen und baut die Option direkt in die Settings ein. :whistle:

Link to comment

Im Anhang eine geänderte windowload.vbs und die Timeshiftcontent.vbs.

Beide in das Scriptverzeichniss entpacken.

Die Variable #remain arbeitet leider erst mit steigender Timeshiftdauer zuverlässig, aber sonst geht es erstmal.

Die Timeshiftcontent.vbs musst du noch gegen ein DVBViewer beenden absichern, sonst kommt es zu einer Fehlermeldung. Hab das nur mal auf die schnelle gescriptet.

Viel Erfolg :bye:

Timeshiftcontent.zip

 

 

Wow, vielen Dank! :) Werde ich gleich mal ausprobieren. Bin gespannt, wie Du das gelöst hast. :dribble:

Link to comment

N'Abend,

 

dank Tüftlers Codebeispiel mit der "Überwachungsschleife" habe ich jetzt folgende Lösung zusammengeschustert:

 

windowload.vbs:

 

Sub Main(WindowID)

 [...]

' Basic stuff
 Dim objShell
 Set objShell = CreateObject("Wscript.Shell")

' Extended Timeshift warning
 Dim isExtendedTimeshiftWarningActive
 isExtendedTimeshiftWarningActive = DataManager.Value("#isExtendedTimeshiftWarningActive")

 If isExtendedTimeshiftWarningActive = "" Then
   Dim scriptPath
   scriptPath = """" & osd.AppDir & "Scripts\ExtendedTimeshiftWarning.vbs" & """"
   objShell.Run scriptPath, 0, False
   DataManager.Value("#isExtendedTimeshiftWarningActive") = "TRUE"
 End If

 [...]

End Sub

 

 

ExtendedTimeshiftWarning.vbs (-> im Scripts-Verzeichnis neu anlegen):

 

Option Explicit

' Get DVBViewer object
Dim DVBViewer
Set DVBViewer = GetObject(, "DVBViewerServer.DVBViewer")

' Keep script alive until DVBViewer exit
Dim isDVBViewerExitPending
isDVBViewerExitPending = DVBViewer.DataManager.Value("#isDVBViewerExitPending")

Do While isDVBViewerExitPending = ""
 CheckForTimeshiftDialog 
 isDVBViewerExitPending = DVBViewer.DataManager.Value("#isDVBViewerExitPending")
 WScript.Sleep(50)
Loop

WScript.Quit

Sub CheckForTimeshiftDialog()
 Dim currentWindowTitle
 currentWindowTitle = DVBViewer.DataManager.Value("#currentwindow")

 ' Timeshift Warning only if not live (Enable Timeshift warning in settings to activate)
 If currentWindowTitle = "Aufnahme/Timeshift ist aktiv!" Then ' TODO: Localized window title???
   Dim strRemainTime
   strRemainTime = DVBViewer.DataManager.Value("#remain")

   If strRemainTime = "00:00:00" Then
     DVBViewer.SendCommand(73)
   End If
 End If 
End Sub

 

 

command.vbs:

 

Sub Main(Command)
 Select Case Command

 [...]

'Extended Exit:
   Case 41000
     ' Signal all scripts to quit
     Datamanager.Value("#isDVBViewerExitPending") = "TRUE"

     [...] ' Anderer Code, der beim Beenden ausgeführt werden soll

     ' Quit DVBViewer
     SendCommand(12326)
 End Select
End Sub

 

Für das Beenden von DVBViewer muss man in den Eingabeoptionen eine neue Action mit der ID 41000 anlegen und diese auch zum Beenden des DVB Viewers benutzen, damit der Code in der command.vbs ausgeführt wird. Da ich so eine Action schon hatte, war das für mich jetzt die einfachste Möglichkeit, dem anderen Script zu signalisieren, dass der DVBViewer beendet wird. Vielleicht gibt es ja noch eine Möglichkeit, das ohne so eine Action hinzubekommen. Danach habe ich nicht weiter geforscht.

 

Die Logik funktioniert ganz ok. Leider ist das Timeshift-Warnfenster doch noch recht lange (ca 0,5 sec) sichtbar, bevor es automatisch bestätigt wird. Das war auch nicht durch eine kürzere Wartezeit in der Schleife (ExtendedTimeshiftWarning.vbs) zu beheben. Gefällt mir noch nicht so... :-(

 

Ich habe deshalb zeitgleich mal ausprobiert, ob man das onOSDWindow-Event abfangen kann. Per Script bekomme ich das Event nicht abgefangen. (WScript.Connect funktioniert anscheinend nicht - dazu gibt es auch einige Threads im Script/COM-Forum). Wenn man das mit C# macht funktioniert das aber. Das Event wird dann sogar bei jedem Öffnen des Fensters gefeuert - genau das was man bräuchte. Da versuche ich mich gerade dran, als eigenständige Konsolen-Applikation habe ich auch schon was. Ich werde noch prüfen, ob ich es als Plugin hinbekomme (obwohl ich dazu noch keine richtige Anleitung gefunden habe).

 

Es bleibt spannend...

Link to comment

Moin,

 

da mich bei der Script-Lösung das Flackern des Warnfensters doch etwas genervt hat, habe ich jetzt ein Plugin geschrieben, dass die gewünschte Funktionalität ohne Einschränkungen bietet:

 

http://www.DVBViewer.tv/forum/topic/42962-extendedtimeshift-plugin/

 

Bei Plugins gibt es (anders als beim COM-Interface) tatsächlich die Möglichkeit, VOR einem Senderwechsel einzugreifen, und diesen Wechsel bei Bedarf abzubrechen, nämlich über die Methode

 

bool Execute(TTuner ch, TPluginPids pid);

Edited by Headhunter3000
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...