Jump to content

DVBViewer COM-Interface für neues DVBViewer Webinterface.


t5b6_de

Recommended Posts

Hallo

 

Ich arbeite grad an einem neuen Webinterface für den DVBViewer. Dabei ahme ich das Webinterface der bekannten Enigma2 receiver nach, sodass ich den DVBViewer im idealfall auch mit der android-App dreamdroid bedienen kann.

 

Jetzt hänge ich nur leider an einem Problem fest:
Wie kann ich herausfinden, ob der Ton beim DVBViewer aktiviert ist? (Mute)
Setzen kann ich diesen ja, nur wo auslesen?

Gruß

 

Nachtrag:

Das Webinterface kann hier heruntergeladen werden,
Achtung, es handelt sich hier noch um eine Unvollständige Version!

 

Voraussetzungen: Installiertes .NET Framework 4.0

Weiteres siehe Readme-Datei.

 

Hier immer aktuelle Version:

http://dl.t5b6.de/dvbv/Readme.txt

http://dl.t5b6.de/dvbv/Webinterface.zip

 

Die alten Versionen können unter

http://dl.t5b6.de/dvbv/

heruntergeladen werden.

 

Gruß

Thomas

Edited by t5b6_de
Link to comment

ich nehme jetzt erst mal an, dass grundsätzlich mute immer deaktiviert ist,
und mit dem knopf auf der weboberfläche aktiviere ich es einfach nur. zum deaktivieren Lautstärkebutton rauf oder runter...

Punkt.

Link to comment

Hm das ist zwar eine Lösung, aber keine besonders schöne ... :(

Habe leider auch keine Möglichkeit gefunden um den Status abzufragen.

Einfach wäre wenn es dafür eine Variable im Datamanager gäbe. Das müsste sich auch vom DVBViewer her relativ schmerzfrei umsetzen lassen - ich frage intern mal nach.

 

edit\ Für Auflösung oder Seitenverhältnis schau dir mal die Variablen im Datamanager an (DVBVSpy => "Get Tags").

Abzufragen über: IDVBViewer.Datamanager.Value

Edited by nuts
Link to comment

Videoauflösung auch keine Chance?

 

Habe gerade das Problem, das ich eine Web-Remote bastel, ein Problem ist, dass ich nicht weiß wie ich jetzt den Mute-Zustand Toggeln soll...

 

das ist nicht so schön. bin kurz davor zu sagen, dass ich das genauso mach wie bei dem Webinterface selbst

Link to comment

Steht zur Videoauflösung nichts in einer der Variablen des Datamanagers?

Kann gerade nicht nachschauen ...

Das mit dem Mute-Status habe ich intern vorgeschlagen, warte aber noch auf eine Antwort. Halte dich auf dem laufenden. :)

Link to comment

Meines Wissens stehen Auflösung und Audiospur (z.B. "AC3") in einer Datamanager Variable zur Verfügung. Müsste das aber auch nochmal verifizieren.

 

Zum Thema Mute Erkennung: Da das eine Toggle-Action ist, sehe ich hier nur folgende Möglichkeit:

 

- Man geht davon aus, dass beim Start des DVBViewers Mute immer off ist

- Man definiert eine eigene Action für Mute und fängt die in der Command.vbs ab

- Bei jedem Drücken der Mute Taste wird eine eigene Datamanager Variable gesetzt und so der aktuelle Mute-Status protokolliert

 

Habe ich früher mit AudioA/B Erkennung so gemacht. Da gibt es ja mittlerweile eine Variable für sodass das nicht mehr notwendig ist.

Link to comment

Ok Danke..

Muss mich dann nochmal mit dieser Command.vbs auseinander setzen, habe mich damit bisher nicht beschäftigt.

 

Mein Webinterface basiert rein auf dem COM-Interface und ist in C# geschrieben. Es handelt sich nur um den nicht sichtbaren teil des Dreambox webinterface, sprich die gesamte XML-Kommunikation im Hintergrund.

Das Webinterface selbst ist von statischer Natur, das heißt das sind nur ein paar Dateien die vom Server abgerufen, aber nicht bearbeitet werden.

Die Daten kommen aus diesen XMLs.

 

Bisher funktioniert dies auch ganz gut, ist aber noch nicht vollständig durchprogrammiert.

 

Mal ein kleiner Ausschnitt:

 

Screen20140227-194709.jpg

 

 

Das ganze basiert auf einem Modul für einen Webserver, welcher von meinem Kumpel geschrieben wurde.

Ist also leider nicht ohne weiteres in ASP.net, oder anderen Servern Umsetzbar.

 

Und ob mein Kumpel den Webserver der breiten Masse zur Verfügung stellt, bezweifle ich.

Link to comment

Nachtrag:

Gibt es irgnendwo eine aktuelle COM-Schnittstellendefinition?
Das im Member-bereich ist ja schon etwas älter (06/2006), und es fehlen ein paar Dinge.

Link to comment

Leider nicht.

Auch keine Übersicht über die neu hinzugekommen Funktionen. :(

 

Es sind aber für deine Anfragen imho auch keine Funktionen hinzugekommen.

Am besten mal das ganze COM-Objekt in eienr Entwicklungsumgebung laden und dort reinschauen.

 

P.S. Gefällt mir gut was du da bastelst.

Ein richtiges Webinterface für den DVBViewer wäre klasse!

Edited by nuts
Link to comment

Naja schon, Ich muss erstmal herausfinden wie ich an den Datamanager herankomme.

Das dieser unter IDVBViewer.DataManager zu finden ist steht nicht in der Doku.

 

Habe jedoch noch ein anderes Problem.

Und zwar unterstützt C# nur indizierte EIgenschaften auf die art:
this[type paramName]

{

get;

set;

}

 

das Problem was ich im DataManager nun habe ist, dass ich nicht an die Werte heran komme, weil das ding Value heißt.

Leider find ich so auf die Schnelle auch kein Attribut, um den internen Bezeichner umzubiegen.

Link to comment

Sag mal was hab ich dann hier für ein altes ding?

 

 

Anbei die komplette Schnittstellendefinition:

 

this[...] heißt in der Doku Value[...]

das muss ich dem Compiler irgndwie sagen. Finde nur kein attribut, mit dem das möglich ist.

namespace DVBViewerServer
{
    [Guid("297E2B6F-79B4-4C9F-91D2-7B5AEBA5D151"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IDataManager: IDictionary<string,string>
    {
        /// <summary>
        /// Returns the count of all Properties in the Datamanager
        /// </summary>
        int Count
        {
            get;
        }

        /// <summary>
        /// Gets all available Keys at once in a ";" separated list. Format: key1;key2; ...
        /// </summary>
        string Keys
        {
            get;
        }

        /// <summary>
        /// Gets/Sets a value from the internal Datastate manager.
        /// </summary>
        /// <param name="Key">Key is a string with the item's name.</param>
        /// <returns>A string with the item's value.</returns>
        string this[string Key]
        {
            get;
            set;
        }

        /// <summary>
        /// Gets all property key/value pairs at once in a ";" separated list. Format: name1=value1;name2=value2; ...
        /// </summary>
        /// <returns></returns>
        string GetAll();

        /// <summary>
        /// Replaces property tags with a value from the internal Datastate manager see external doc 
        /// </summary>
        /// <param name="Valu">the value to be parsed</param>
        /// <returns>A string with the result of the parsing and replacing.</returns>
        string Parse(string Valu);
    }
}
Edited by t5b6_de
Link to comment

Nachtrag, hab das passende Attribut gefunden:


        /// <summary>
        /// Gets/Sets a value from the internal Datastate manager.
        /// </summary>
        /// <param name="Key">Key is a string with the item's name.</param>
        /// <returns>A string with the item's value.</returns>
        [System.Runtime.CompilerServices.IndexerName("Value")]
        string this[string Key]
        {
            get;
            set;
        }

So funktioniert es nun.

Link to comment

Zum Thema Mute Erkennung: Da das eine Toggle-Action ist, sehe ich hier nur folgende Möglichkeit:

 

- Man geht davon aus, dass beim Start des DVBViewers Mute immer off ist

- Man definiert eine eigene Action für Mute und fängt die in der Command.vbs ab

- Bei jedem Drücken der Mute Taste wird eine eigene Datamanager Variable gesetzt und so der aktuelle Mute-Status protokolliert

 

Habe ich früher mit AudioA/B Erkennung so gemacht. Da gibt es ja mittlerweile eine Variable für sodass das nicht mehr notwendig ist.

Schon da geht das Problem los da die Mute-Funktion über den DVBViewer Neustart hinaus aktiv bleibt.

Intern hatte ich das auch schon als wenig Sinnvoll erachtet ist ja aber auch nur eine/meine Meinung.

Link to comment

Da kann man sich drüber streiten. Ich finde es sinnvoll Mute über den Neustart hinaus zu behalten.

Darum ist das Problem aber auch nur mit einer Erweiterung im DVBV (wie bei Video A/B) vernünftig lösbar.

 

Mal sehen was die Entwickler dazu sagen. Der Mute-Status ist ja eh in einer Variable vorhanden. Ich wüsste nicht was dagegen sprechen sollte den Wert auch im Datamanager verfügbar zu machen.

Link to comment

Wenn hier schon was angepasst wird, sollte für alle Toggle-Actions jeweils eine Variable eingeführt werden, die den aktuellen Zustand beschreibt.

 

Toggles sind ja grundsätzlich gut, ohne Möglichkeit den Status abzufragen aber problematisch (wie man sieht).

Link to comment

wenn man den DVBViewer Pro mittels Kommandoparameter " -x26 -x27 " startet wird der Mute Status aufgehoben und die Lautstärke einmal gesenkt und direkt wieder erhöht.

Das klappt jedoch nur, wenn beim Start ein Sender eingeschaltet wird.

 

Ist die Option "Beim Start letzten Sender einschalten" ausgeschaltet, so geht dies nicht.

 

 

Obiges ist vielleicht eine Möglichkeit, wie ihr den Umstand, dass es keinen Mute Status zum anfragen gibt, umgehen könnt.

Link to comment

Nee das ist Käse und das weißt du doch auch. :D

Kann doch nicht jetzt jeder seinen DVBV so starten.

 

Würde ich das programmieren würde ich Mute bis zu einer DVBV Lösung weg lassen.

Sinnvolle workarounds klar, aber wenn sich die richtige Funktionalität nicht sicherstellen lässt würde ich da keine Zeit investieren.

Edited by nuts
Link to comment

Wie gesagt, erstmal bastel ich das so, das ich immer annehme das mute nicht gesetzt ist.
sprich klick auf den mute button -> ton aus. und mit klick auf lautstärke -> ton an.
fertig.

 

Habe jedoch ein anderes Problem,
Sobald ich in der Senderliste eine Gewisse Anzahl an Sendern überschreite, funktioniert die schöne Funktion

ChannelManager.GetByEPGChannelID(EpgID);

das gleiche gilt für:

ChannelManager.GetChannelByTID(EpgID & 0x0000FFFF, EpgID>> 16);

nicht mehr. Sprich, diese gibt mir einen Nullverweis zurück.
Sollte diese mir nicht die erste Übereinstimmung in der Senderliste geben?

Wie komme ich jetzt an den Sender der gegebenen ID heran?

Edited by t5b6_de
Link to comment

Nachtrag:
Der Fehler tritt nur auf, wenn man die Senderliste bearbeitet hat.

In dieem Fall habe ich die vorhandene Gelöscht und eine neue importiert. Die neue umfasst alle Sender der Satelliten Astra 1, 2, und 3 sowie Hotbird.

 

Dann sollte man über die ChannelID arbeiten und nicht mit der EPGServiceID.

Edited by t5b6_de
Link to comment

Gibt es eine Möglichkeit via COM-Interface eine Aufnahme abzuspielen?

 

sowas wie PlayRecording(recID)...

oder halt einfach datei abspielen?

Link to comment

Wird das Projekt eigentlich veröffentlicht? So wie du das in dem Thread andeutest wohl eher nicht.

 

Ich für meinen Teil hätte kein Interesse hier jemandem Hilfestellung für so ein Webinterface zu geben, nur damit es irgendwo als Privates Projekt verstaubt ohne das ein Nutzen für die "Community" entsteht.

Link to comment

Es gibt wohl mehrere Probleme:
1. Es ist eigentlich das Webinterface bekannter Linux-Receiver (DReambox, VU+, etc)
Enigma2 webinterface, ich weiß gerade nicht ob dies irgndwie modifiziert werden darf, privat darf man ja vieles, aber wenn das Öffentlich wird....

Man müsste schauen unter welchen lizenzen das läuft.

 

2. Der Server für den ich das Programmiere wurde bisher nicht veröffentlicht, dieser wurde von meinem Kumpel entwickelt und ich schreibe in unregelmäßigen Abständen einige Module für diesen.

 

3. ich habe ein Foto von der Fernbedienung bei amazon "geklaut"
man müsste das mit dem rechteinhaber ausdiskutieren ob das dort drin bleiben darf.

 

Ich kann gern den Quellcode veröffentlichen für das Modul, mit ein wenig Aufwand dürfte sich das auch in eigenen Webserver oder ASP umbauen lassen, da ich das ganze recht universell halte.

Das webinterface des Receivers von dem ich das habe, hab ich weitestgehend im Originalzustand belassen. Um möglichst wenige Änderungen daran durchführen zu müssen habe ich den Server-Teil um das Webinterface drumherumprogrammiert.

 

 

Ich hänge gerade dabei fest die Liste der Aufnahmen in das Webinterface zu bringen.

Im Original Webinterface des Receivers kann man durch einen Klick die aufnahmen abspielen, dies möchte ich möglichst auch erhalten und hier mit hereinbringen.

Link to comment

Nachtrag:
Ich werde das WebInterface hier veröffentlichen,
Von meinem Kumpel hab ich auch schon grünes Licht bekommen, ich darf den Webserver mit einer Minimalkonfiguration veröffentlichen.

Mal sehen, vielleicht schaffe ich es auch heute noch, dass ich das teil hier veröffentliche. Allerdings ist noch bei weitem nicht alles funktionsfähig.

Was bereits funktioniert:
Senderübersicht mit EPG Now und Next

Aktuell laufender sender
Auflistung der Aufnahmen einschließlich Beschreibung, löschen von Aufnahmen schreint nicht zu funktionieren, mittels RecordManager.DeleteEntry(recID), sofern es sich um aufnahmen vom Recording-Service handelt.

Web-Fernbedienung zum großteil, nicht alle Tasten sind belegt.

Screenshot: Handelt sich immer um ein Screenshot des Fensters, egal ob mit oder ohne OSD (Relikt aus Enigma2, da dort 2 verschiedene Buffer existieren, einmla für das VIdeo einmal für das OSD)

Edited by t5b6_de
Link to comment

Anbei der Download-Link zum Server:

http://dl.t5b6.de/DVBViewer%20E2%20Webinterface.zip

Anweisungen stehen in der readme.txt

Ich habe gerade eben noch das Multi-EPG in Gang gesetzt.

 

 

Voraussetzung sind x64 Betriebssystem, da ich leider nur eine x64 Version des Servers habe.

Sowie installiertes .NET 4.0 Framework.

 

Die Quellcodes gibt es später.

 

habs erstmal wieder vom Server genommen, aus irgndwelchen gründen antwortet dieser nicht immer wenn eine POST Anfrage rein kommt...

 

Nachtrag vom 05.03.

Das Webinterface ist online gestellt, ladet es euch probiert es aus, ich versuch da so viel weiter dran zu arbeiten wie ich es nur hinbekomme.

Das löschen von Aufnahmen funktioniert nur, wenn es sich um lokale Aufnahmen handelt, Aufnahmen vom Recording-Service werden nicht gelöscht.
Dies liegt nicht in meiner Hand, da dies das verhalten vom DVBViewer ist.

Edited by t5b6_de
Link to comment

Hallo,

 

Welche voraussetzungen müssen zum Abspielen einer Datei gegeben sein?
IPlaylistManager.PlayFile(string filename)
funktioniert bei mir nicht.
Leider weiß ich nicht warum.

Die datei existiert, das prüfe ich vor dem Aufruf der funktion nochmal nach:

IRecording rec = recMan[i];
if (recID == rec.recID)
{
    if (File.Exists(rec.Filename))
    {
        dvbv.PlayListManager.PlayFile(rec.Filename);
        state = true;
        message = "Active recording is now '" + rec.Title + "'";
        break;
    }
    else
    {
...
Link to comment

Nachtrag:

Selbst das Erstellen einer Wiedergabeliste, hinzufügen der Datei um diese dann abzuspielen funktioniert nicht.
Der gsamte PlaylistManager hat irndwie absolut keinen Einfluss auf den DVBViewer.

Bei funktionen wie IPlayList.Load(const Filename: WideString): WordBool; erhalte ich nur false zurück.
Egal welche Dateien.

 

Ich könnte bei gehen und den DVBViewer mit befehlzeilenargument Starten welcher die Wiedergabe der gewünschten Datei erzielt,

allerdings ist das nicht sinn der Sache.

 

bin blöd: IDVBViewer.PlayFile funktioniert...

 

Was ist da los, oder mache ich etwas Falsch?

 

Nachtrag:
Datamanager-Variablen:
Hinweis für die Entwickler des DVBViewers:
sollten zurückgesetzt werden, wenn eine neue Datei abgespielt wird, wenn keine Infos vorhanden sind, sind dort die Daten von der vorherigen Datei enthalten.

Führt zu falscher Anzeige.

Edited by t5b6_de
Link to comment

Schaut hier keiner mehr rein?

Ich benötige halt noch paar Infos,

wie komm ich an die Senderlogos der jeweiligen Sender heran?

 

eine möglichkeit wäre die Channellogos.ini zu laden...

Edited by t5b6_de
Link to comment

wie komm ich an die Senderlogos der jeweiligen Sender heran?

 

eine möglichkeit wäre die Channellogos.ini zu laden...

Übers COM-Interface gar nicht und das dort eine Funktion eingebaut wird halte ich für höchst unwahrscheinlich.

Channellogos.ini müsste doch funktionieren?

Link to comment

Ja, habe ich uach so gedacht,
Ini-Parser habe ich schon eingebaut, lade mir beim holen der DVBViewer Instanz auch gleich die ChannelLogos.ini mit.
dann dürfte das immer halbwegs aktuell sein.

Über das COM-Interface kommt man ja nur an das aktuelle Senderlogo dran...

Link to comment

Kleines Problem:

Wie setzt sich die Section in der Channellogos.ini zusammen?

 

[562954315180093]
c=Das Erste HD
logo=das erste hd.png
IChannelItem.ChannelID ist
2359890582721931325|Das Erste HD
oder die EpgChannelID:
66791485
Irgendwie muss ich doch von dem ChannelItem auf den Eintrag in der Channellogos.ini schließen können...
Weiß jemand genaueres?
Nachtrag:
so langsam komme ich dem auf die schliche:

562954315180093
in Hex:
0002 0001 03FB 283D
283D -> Service ID
03FB -> Transportstream ID
0001 -> Network ID
und was ist die 0002?
1 = Kabel
2 = Sat
3 = DVB-T
4 = ATSC
5 = DVB-IPTV
--> TDVBVTunerType +1
Edited by t5b6_de
Link to comment

Habe soeben neue version hochgeladne, jetzt auch für alle Windows nutzer (also auch die 32 Bit windows-user)

Link to comment

Die nächste release zieht sich noch ein klein wenig hin, hab im Moment etwas mehr um die hacken, und

die Timerverwaltung macht mir zur Zeit schwierigkeiten.
Erstelle ich einen Timer wo Enabled = false festgelegt ist, startet der timer trotzdem.
Ich bekomme es irgndwie nicht hin einen timer via Com-interface zu deaktivieren.

 

naja noch ein wenig geduld, am Wochenende werde ich wohl weiter nicht dazu kommen.

Link to comment

 

 

Erstelle ich einen Timer wo Enabled = false festgelegt ist, startet der timer trotz

 

Ich als C/C# Programmierer hatte auch schon Probleme mit den Bool-Werten in Delphi, der DVBV Haussprache.

 

Ich glaub FALSE ist dort 65365( -1 (MINUS!!!)) und nicht 0. Auch googeln nach Type: WORDBOOL hilft weiter.

 

erwin

Edited by erwin
Link to comment

Ich korrigier mich.

 

An der COM-Schnittstelle wird vom DVBV der Pascal-spezifische Datentyp WORDBOOL verwendet.

 

In C/C++ Syntax gilt dabei

#define WORDBOOL WORD
#define WORDBOOL_TRUE -1 // !!! MINUS 1 !!! NICHT +1 !!!
#define WORDBOOL_FALSE 0

erwin

Edited by erwin
Link to comment

Wenn er enabled = false übergibt, sollte das ja kein Problem sein. Das ist ja sogar bei delphi 0.

Link to comment

Die Frage ist, was ist false bzw enabled?

 

EIN Byte oder ZWEI Byte? An der COM-Schnittstelle werden 2 Byte (WORDBOOL!) gelesen, so dass ein

 

char enabled = false;

 

letzlich das Nachbarbyte mit einbezieht. Die Chancen stehen 255 : 1 dass dies KEINE 0 ist.

 

erwin

Edited by erwin
Link to comment

Hab eine neue Version am ersten Post angehängt sowie die Readme aktualisiert. Sollte das ding vll mal Changelog nennen...

 

 

Was noch zu tun ist:
Mediaplayer, sowie die Aufnahmeliste sortierbar machen, das funktioniert noch nicht.

 

ansonsten sollte es das bald gewesen sein.

 

 

Wenn ich soweit alles fertig habe bereinige ich den Code noch ein wenig, füge Kommentare hinzu und stelle ihn euch zur Verfügung.

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