Jump to content

ExtendedTimeshift Plugin


Headhunter3000

Recommended Posts

Hi,

 

hier mein erster Versuch eines Plugins in C# (.NET 3.5).

 

Das Plugin prüft vor einem Senderwechsel, ob das aktuelle TV-Signal live oder time-shifted ist, die aktuelle Abspielposition also in der Vergangenheit liegt. Wenn das Signal live ist, erfolgt der Senderwechel wie gewohnt. Nur wenn das Signal time-shifted ist, wird der Benutzer zur Bestätigung des Senderwechsels aufgefordert.

 

Das Verhalten ist ähnlich wie die bereits in DVBViewer integrierte Funktion "Warnung bei Senderwechsel wenn Timeshift aktiv ist", allerdings erfolgt beim Plugin keine Meldung, wenn das Signal live ist, der Timeshiftpuffer also leer ist. Dadurch kann man einerseits bequemer zappen (ohne jedes Mal bestätigen zu müssen), andererseits geht ein evtl. gefüllter Timeshiftpuffer nicht aus Versehen verloren, wenn man den Sender wechselt. Damit das Plugin richtig funktioniert, muss die in DVBViewer integrierte Warnfunktion deaktiviert werden (siehe auch Readme-Datei im ZIP-File).

 

Das Plugin wurde in C# mit Visual Studio 2008 entwickelt. Bei der Entwicklung war folgender Forums-Thread äüßerst hilfreich:

 

http://www.DVBViewer.tv/forum/topic/40060-c-sample-plugin/

 

Hier hat LonelyPixel ein Interface für die Entwicklung von Plugins in C# entwickelt. Dieses Interface wird in meinem Plugin benutzt. Deshalb vielen Dank an LonelyPixel! :)

 

Das ZIP File enthält sowohl das fertige Plugin als auch den Source Code. Zur Installation die Anweisungen in der Readme-Datei in dem ZIP File beachten!

Link to comment

kanns leider grad nicht testen weil unterwegs aber vielen vielen dank wenn das funktioniert. das stand im forum lange schon in meiner wunschliste, die leider immer wieder ignoriert wurde :(

Link to comment

nabend

 

also erstmal vielen dank für das plugin! feine und vor allem sehr nützlichen sache

 

zwei „kleinigkeiten“ sind mir aufgefallen:

 

wenn kein sender eingestellt ist und ich dann einen sender anwähle kommt die meldung das timeshift material da ist!

das ist mir nur aufgefallen weil auf dem laptop „schalte letzten sender beim start ein“ nicht angehakt ist

 

das zweite ist:

ich schaue eine aufnahme/serie oder film und wähle dann einen sender… da erscheint wieder die meldung

 

könntest da nochmal schauen

 

grundsätzlich funktioniert es aber

 

beste grüße @lex

Link to comment

Ist wie beim Scripten, man muss alle Eventualitäten durchspielen die der DVBViewer bietet und das sind nicht wenige.

Per Script kann man das "Timeshift-Überprüfungsscript" beenden/pausieren/loopen lassen wenn kein LiveTV gesehen wird.

Link to comment

N'Abend,

 

da merkt man, dass ich den DVBViewer nur zum TV gucken verwende. Ein exzessive Beta-Test-Phase habe ich da nicht eingelegt. :whistle:

 

Ich werde mal gucken, was sich machen lässt. :)

Link to comment

hallöchen

 

das ging ja fix mit dem update… danke

die zwei sachen die ich angemerkt hatte passen jetzt perfekt

 

nur eine kleine sache fehlt zur perfektion:

man schaut versetzt tv und wählt dann eine datei zur wiedergabe aus… da fehlt dann die meldung noch

 

sonst funktioniert es wie es soll

 

besten danke und grüße

 

@lex

Link to comment

@lex: Ich muss Dich leider enttäuschen. Ich sehe im Moment keine Möglichkeit, VOR dem Abspielen eines Videos oder einer DVD per Code in den Ablauf von DVBViewer einzugreifen. Es wird einfach nicht das entsprechende Ereignis gefeuert.

 

Diese Situation gibt es leider bei vielen Funktionen im DVBViewer, oder genauer gesagt in der COM-Schnittstelle. Man bekommt immer nur signalisiert, wenn etwas bereits ausgeführt wurde, nicht bevor etwas ausgeführt wird, so dass man die Funktion noch abbrechen könnte. :sadwalk:

 

Die Methode zum Senderwechsel, die im Plugin benutzt wird, ist meines Wissens die einzige, die nach diesem VORHER->ABBRECHEN-Schema arbeitet.

 

Normalerweise hilft in solchen Szenarios immer, in den Optionen eine eigene Taste ("Action") für die ggf. abzubrechende Aktion zu definieren und diese Taste dann z.B. per Skript (command.vbs) oder Plugin abzufangen. Dann hat man die Möglichkeit, eigene Checks durchzuführen und nur wenn diese erfolgreich sind, den Originalbefehl abzuschicken. Leider ist das hier nicht möglich, da dass Abspielen eines Videos oder einer DVD nicht über einen einzigen Tastendruck geschieht, sondern über ein OSD-Menü (Aufnahmen) oder einen Menübefehl (z.B. Mediadatei öffnen).

 

Solange also die COM-Schnittstelle nicht um solche VORHER->ABBRECHEN-Ereignisse ergänzt wird, sehe ich keine Möglichkeit, dieses gewünschte Feature zu realisieren. :(

Link to comment

nabend

 

das es bei den beiden angesprochenen problemen nun erstmal keine lösung ist zwar „ärgerlich“ aber für meine bedürfnisse langt es auch so!

 

ich hatte bis jetzt die warung vom viewer immer deaktiviert… das war beim zappen einfach nur nervig

 

mit deinem plugin ist man gut abgesichert und das soll mir reichen

 

danke für die arbeit

 

beste grüße @lex

Link to comment

Noch mal eine Nachfrage:

 

das es bei den beiden angesprochenen problemen nun erstmal keine lösung...

 

Welches Problem außer "Warnung bei Videostart" besteht denn noch? Habe ich was übersehen...? :)

Link to comment

morgen

 

Welches Problem außer "Warnung bei Videostart" besteht denn noch? Habe ich was übersehen...?

nein du hast nix übersehen! das mit dem videostart war das einzige was mir noch aufgefallen war

 

sorry für die verwirrung

 

grüße @lex

Link to comment
  • 2 months later...

Hi Freezer,

 

hier ist dasselbe Problem wie oben beschrieben: Das Plugin bekommt erst mit, dass Video A/B gedrückt wurde, NACHDEM der Videowechsel bereits ausgeführt wurde. Das ist dann leider schon zu spät. Bevor die COM-API von DVBViewer nicht entsprechend erweitert wird, kann man so etwas nicht über COM oder Plugin realisieren.

 

Allerdings kann man dieses Feature über VBScript und eigene Action-IDs in der command.vbs realisieren. Siehe z.B. iMonPad & MCE Konfig von Tüftler (dort gibt es z.B. eine Warnung bei Neuaufbau der Wiedergabe, wenn Timeshift aktiv ist). Wie der Code aussieht, der auf ein Nicht-Live-Signal prüft, kannst Du hier einsehen:

 

http://www.DVBViewer.tv/forum/topic/42692-verbesserte-timeschift-warnung/page__view__findpost__p__315237

Link to comment
  • 3 weeks later...

Danke für das Plugin.

Jedesmal, wenn eine Timeshift Aufnahme durch einen unachtsamen Tastendruck verloren ging, habe ich nach einer Lösung gesucht, jetzt ist sie endlich da.

Nun muss man nicht mehr das geringere Übel wählen aus autom. Start ohne Warnung und manuellem Start mit Warnung.

 

(Ich kann absolut nicht verstehen, wieso die Entwickler des DVB-Viewers in einem anderen Thread diese Option als unnötig bewertet haben...)

Link to comment

Bei mir sorgt das Plugin dafür, dass DVBViewer Pro 4.6.0.1 nicht mehr weiterlädt, hängt dann bei "Completing Initialization", trat auch schon bei 4.6.0.0 auf; ältere Versionen hab ich nicht.

 

Sobald ich es aus dem Plugin-Ordner entferne, lädt DVBViewer wieder. Die Base und Interop DLLs sind im DVBViewer Ordner, die ExtendedTimeshift DLL im Plugins Ordner.

 

Komplettes Neukompilieren hat auch nichts gebracht.

 

/edit: Hm wo ist mein Anhang geblieben; naja wenn du noch Infos brauchst sag Bescheid. Einsatz erfolgt unter Win7 64-Bit.

Edited by Mars
Link to comment

Sorry für Doppelpost, aber Editieren geht nicht mehr.

 

Das vorgenannte Problem lag daran, dass ich nicht gesehen hatte, dass der Anhang im Thread-Erst-Post nicht die aktuelle Version ist. Mit 1.0.0.1 geht's.

 

Das Plugin tut aber dennoch nichts. Ich habe noch nicht die Plugin-Logik ganz verstanden; sehe ich es richtig, dass das Plugin bei Verwendung vom Recording Service (trotz dass das Umschalten im Client geschieht) nicht funktioniert, da es Interaktion erfordert?

Wenn ja, ist da irgendwie ein Workaround möglich? (im Plugin; per Skript ist ja doch etwas hakelig)

Edited by Mars
Link to comment

@Mars: Das Plugin sollte keine Probleme mit Recording Service machen. Ich selbst setze auch Recording Service 1.6.9 Beta und DVBViewer 4.6.0.1 ein. Das Plugin läuft bei mir ohne Probleme.

 

Hast Du die Hinweise in der Readme-Datei beachtet (Senderwechsel-Warnoption in den DVBViewer-Optionen ausschalten, Automatischer Timeshift-Start natürlich an!).

 

Wenn Du ganz norrmal TV guckst und nie zurückspulst oder Pause drückst (also das TV-Signal nie zeitversetzt wird), wirst Du nie eine Warnmeldung erhalten (also alles ganz normal). Nur bei zeitversetztem Signal kommt beim Umschalten eine Bestätigungsfrage.

Edited by Headhunter3000
Link to comment

Ich weiß zwar nicht warum, aber wenn ich die DLLs aus dem Bin-Ordner nehme, funktioniert es. Nur bei den selbstkompilierten funktioniert es nicht.

 

Falls du weißt warum, kannst du es mir ja mal bitte schreiben (ich möchte ggf. auch mit C# ein Plugin programmieren); ansonsten reicht mir das erstmal.

 

Danke für das Plugin... schade, dass die Funktion nicht als Option in DVBV eingebaut wird.

Link to comment

Hallo Mars,

 

der DVBViewer-Plugin-Mechanismus funktioniert nicht über COM und kennt auch kein .NET. Deshalb muss man die Plugin-DLL nach dem Kompilieren nochmal "nachbearbeiten", so dass sie die vom DVBViewer benötigten Methoden exportiert. Dadurch kann dann jede unmanaged Application (also auch DVBViewer) ganz klassisch die .NET-DLL laden (z.B. mit LoadLibrary() in C++) und auf die exportierten Methoden zugreifen. Eine nette Methode, um die .NET-Welt mit der "Unmanaged"-Welt zu verheiraten, ohne mit COM herumhantieren zu müssen. Mehr Infos dazu hier:

 

http://www.DVBViewer.tv/forum/topic/40060-c-sample-plugin/

http://www.csharphelp.com/2007/03/exporting-managed-code-as-unmanaged/

 

 

Um das zu erreichen, wird in meinem ExtendedTimeshift-C#-Projekt im PostBuild-Event das Tool "NetDllExport.exe" aufgerufen, das dem Projekt beiliegt (stammt auch aus dem ersten oben angegebenen Link). Läuft dieser PostBuild-Befehl bei Dir korrekt durch (beim Kompilieren in Visual Studio -> Ausgabefenster beobachten!)? Eventuell kannst Du mit den Kommandozeilenparametern des Tools spielen, ist aber eigentlich nicht nötig.

 

Hast Du evtl. Änderungen am Code vorgenommen? Gerade in der DllExport.cs muss man vorsichtig sein.

Link to comment

So, habe das Plugin nun endlich auch mal installiert, läuft soweit bis auf die schon angesprochenen Sachen (Start von Dateiwiedergabe, A/B-Umschaltung usw.) perfekt.

 

Vielen Dank für dieses tolle Plugin :)

 

 

Link to comment

Hallo Headhunter3000,

 

danke für die ausführliche Erklärung. Das Plugin lädt nun korrekt, allerdings wird die Abfrage, ob Timeshift aktiv ist, nicht korrekt durchlaufen; damit werde ich mich aber bei Bedarf näher beschäftigen... momentan reicht's mir erstmal, dass die vorkompilierte Plugin-DLL korrekt läuft.

Link to comment

Der Nachfragedialog wird nicht angezeigt, und die Funktion wird dann auch nicht weiter ausgeführt. Erst wenn ich den Timeshift wieder in Livezustand versetze, und entsprechend kein Dialog angezeigt wird, wird die (nochmals aufgerufene) Funktion komplett durchlaufen.

DVBV scheint dieses "Hängen" der Funktion übrigens auch zu betreffen... der Sender wird nicht umgeschaltet, und stattdessen wird beim Drücken einer Zahl diese der vorherigen Eingabe hinzugefügt (also Umschalten auf Sender 3, Funktion hängt bei Nachfrage, einige Sekunden später Sender 5 drücken, und im OSD wird daraus dann 35)

 

PS: Ich verwende den Recording Service; das Plugin ist aber im normalen DVBV-Plugins-Ordner und bei dem vorkompilierten Plugin funktioniert ja auch die Nachfrage.

Edited by Mars
Link to comment

Hm, ist ja seltsam...

 

Wenn ich Dich richtig verstanden habe, dann tritt dieses Verhalten nur bei der von Dir selbst kompilierten Version auf(?)

 

Ich habe die Kompilate mit Visual Studio 2008, also mit .NET 3.5 erstellt. Benutzt Du Visual Studio 2010 (also .NET 4.0)? Wenn ja, könnte es vielleicht sein, dass das Verändern des IL-Codes durch das "NetDllExport.exe"-Tool nicht so recht .NET 4.0-kompatibel ist. Du kannst in Visual Studio 2010 aber auch .NET 3.5-Projekte erstellen und bearbeiten. Vielleicht musst Du das mal so probieren.

Link to comment

Danke, das scheint der entscheidene Hinweis gewesen zu sein; es tritt nur bei den von mir selbst kompilierten auf und ich benutze Visual C# 2010 Express. Ich habe das Projekt nun wieder auf .NET 3.5 zurückgestellt (es wurde automatisch beim "Konvertieren" des Projektes auf 4.0 umgestellt) und nun kommt auch die Abfrage und es wird beim Akzeptieren auch umgeschaltet.

Link to comment
  • 1 year later...
  • 1 year later...

Funktioniert das "ExtendedTimeshift Plugin" bei Euch noch?

 

Bei mir hatte es bereits lange Zeit funktioniert, aber ich bekomme es leider seit Monaten nicht mehr dazu, seine Funktion zu erfüllen.

Wenn ich den Stream angehalten hatte (also Timeshift aktiv ist), dann kommt keine Umschaltwarnung, und ich kann zudem nicht mehr auf einen anderen Sender umschalten.

Das Umschalten wird erst dann nicht mehr blockiert, wenn ich den Timeshift Modus zuvor deaktiviere.

 

Ich habe bereits unzählige Male die Installation des "ExtendedTimeshift Plugin" überprüft, kann aber keinen Fehler entdecken.

Was könnte da schief laufen?

 

MfG

Jürgen

Link to comment
  • 5 months later...

Ich habe leider weiterhin das in #29 beschriebene Problem. :wassat:

Könnte es an der bei mir installierten aktuellen NET Version (v4.5.1, also nicht v3.5x) liegen?

 

MfG

Jürgen

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