cgiesen Posted March 6, 2007 Share Posted March 6, 2007 Hallo Zusammen, kann mir mal einer BITTE eine Codeschnippsle geben, wie ich mit VB die Channels.dat auslesen kann? Ich baue gerade eine TVTV.de Plugin und will den Namen den TVTV für einen Sender hat via Crosslink Tabelle den 'echten' Namen bzw. ID zuordnen. Lieben Dank Carsten Quote Link to comment
hackbart Posted March 6, 2007 Share Posted March 6, 2007 Die channels.dat ist nicht wirklich zukunftssicher. Probiere bitte die Com-Schnittstelle für das Bearbeiten der EPG Einträge. Christian Quote Link to comment
cgiesen Posted March 6, 2007 Author Share Posted March 6, 2007 Hi, gerne, aber ich komme mit der Doku nicht wirklich klar. Kannst Du mir ein Beispiel geben? Gruß Carsten Quote Link to comment
cgiesen Posted March 8, 2007 Author Share Posted March 8, 2007 Hallo Zusammen, ich habe jetzt zwei Tage probiert. Leider ohne Erfolg. Ich bekomme nichts zurück. Ich habe es so versucht: Inherits System.Windows.Forms.Form Implements DVBViewerServer.IChannelCollection Private drvDet As DataRowView Public list(100, 29) As Object Private dvdet As DataView und dann habe ich so versucht an DAten zu kommen: res = GetChannelList(list) Debug.Print(list(0, 1)) Und das alles in VisualBasich 2005 Express. Kann mir da mal bitte einer helfen? Danke Carsten Quote Link to comment
cgiesen Posted March 9, 2007 Author Share Posted March 9, 2007 Hallo Zusammen, hat denn noch keiner die Schnittstelle mit VisualBasic 2005 Express genutzt? Das kann ich ja fast nicht glauben! Ich würde so gerne meine TVTV Schnittstelle fertig bekommen. Denn der Teil der TVT abfragt ist fertig. Ich muss nur noch die Timer erzeugen..... Gruß Carsten Quote Link to comment
Lars_MQ Posted March 9, 2007 Share Posted March 9, 2007 Dim MyManager As DVBViewerServer.IDVBViewer Dim SomeObj As New Object Dim u As Integer Dim i As Integer Dim C As Integer MyManager = GetObject(, "DVBViewerServer.DVBViewer") u = MyManager.ChannelManager.GetChannelList(SomeObj) For i = 0 To u - 1 For C = 0 To UBound(SomeObj, 2) ListBox1.Items.Add(SomeObj(i, C)) Next Next End Sub Auf die schnelle zusammengehackt. Füllt eine Listbox mit den channeleigenschaften (2. dimension des Arrays). Anstatt u könnte man in der ersten schleife auch ubound(SomeObj,1) verwenden, dann aber ohne das - 1. Wichtig: 1. Der DVBViewer muss laufen. 2. Ein Verweis auf die DVBViewer COM bibliothek wurde in VB 2005 angelegt. (Projekt|Verweis hinzufügen|COM) Alle anderen Listen lassen sich analog behandeln. Achtung, es fehlt jeglich prüfung, die object müssen natürlich jeweils auf <> nothing (also nil oder null) geprüft werden, da es sonst exceptions hagelt. Ich hoffe das hilft etwas weiter. Quote Link to comment
Lars_MQ Posted March 9, 2007 Share Posted March 9, 2007 Hier ein kleines Demo mit sourcen und allem möglichen (vielleicht erklärt mir einer bei gelegenheit, was wirklich wichtig ist von dem kram den vb net da anlegt). Es lädt die Kanalliste aus dem DVBViewer und zeigt beim anklicken eines kanals das entsprechende EPG. Das ist nur ein Demo, um die funktionsweisen zu demonstrieren und ist keine vollständige (oder gar sinnvolle) application. DemoDVB.zip Quote Link to comment
cgiesen Posted March 9, 2007 Author Share Posted March 9, 2007 (edited) Hallo Zusammen, das hat mir super geholfen! Bleibt noch das: (List[i, 4] + 1) shl 29 + List[i, 20] shl 16 + List[i, 26] + '|' + List[i, 1] Das ist wohl C# und soll die Id für die Timers nachbilden. Wie mache ich das in Visual Basic? Ich habe es so versucht, das stimmt aber nicht: (LShiftLong((channel(i, 4) + 1), 29) & LShiftLong(channel(i, 20), 16) & channel(i, 26) & "|" & channel(i, 1)) Private OnBits(0 To 31) As Long Public Function LShiftLong(ByVal Value As Long, _ ByVal Shift As Integer) As Long If (Value And (2 ^ (31 - Shift))) Then GoTo OverFlow LShiftLong = ((Value And OnBits(31 - Shift)) * (2 ^ Shift)) Exit Function OverFlow: LShiftLong = ((Value And OnBits(31 - (Shift + 1))) * _ (2 ^ (Shift))) Or &H80000000 End Function Gruß Carsten Edited March 9, 2007 by cgiesen Quote Link to comment
Lars_MQ Posted March 9, 2007 Share Posted March 9, 2007 Hallo Zusammen, das hat mir super geholfen! Bleibt noch das: (List[i, 4] + 1) shl 29 + List[i, 20] shl 16 + List[i, 26] + '|' + List[i, 1] Das ist wohl C# und soll die Id für die Timers nachbilden. Wie mache ich das in Visual Basic? Gruß Carsten Nein das ist pascal. In VB würde obiges statement lauten: (List(i, 4) + 1) << 29 + List(i, 20) << 16 + List(i, 26) + '|' + List(i, 1) ohne garantie Quote Link to comment
cgiesen Posted March 9, 2007 Author Share Posted March 9, 2007 Hi, das war es leider nicht: Ist=1073741824256898|ProSieben Soll= 1090519938|ProSieben Aber erstmal Danke und gute Nacht Carsten Quote Link to comment
Lars_MQ Posted March 10, 2007 Share Posted March 10, 2007 Dim l As ULong Dim m As ULong l = (ChanList(0, 4) + 1) m = (ChanList(0, 20)) Somevalue = CStr((l << 29) + (m << 16) + ChanList(0, 26)) + "|" + ChanList(0, 1) Da macht VB ein bisserl mist. Hintergrund: die bitschiebe operationen liefern ein ergebniss bis max(Eingangsdatentyp), daher die ganzen zuweisungen... Quote Link to comment
cgiesen Posted March 10, 2007 Author Share Posted March 10, 2007 Hallo, jetzt bekomme ich: 107374182416777216898|ProSieben Ich glaube die Formel ist nicht richtig. Ich habe hier im Forum gelesen, dass das die ChannelID für die Timers sein soll. LG Carsten Quote Link to comment
cgiesen Posted March 10, 2007 Author Share Posted March 10, 2007 Hi, OK ich habe es. Wenn da ein Plus steht soll man es auch nehmen. Ich war nur verwirrt, weil man Zeichenketten und Zahlen nicht mit + sondern mit & verbindet. Habe ich mal so gelernt.... Aufjedenfall jetzt gehts am Montag weiter. Blöd ist zwar, das DVBViewer dafür laufen muss, ist aber auch je nur um die Settings zu machen. Aber ich frage mich wie man auf diesen Teil kommt: Dim MyManager As DVBViewerServer.IDVBViewer .... MyManager = GetObject(, "DVBViewerServer.DVBViewer") Aus der Doku habe ich das nicht gelesen, oder bin ich blind? Gruß Carsten Quote Link to comment
Lars_MQ Posted March 10, 2007 Share Posted March 10, 2007 Die formel ist richtig. Übernimm das 1:1 wie ich es oben beschrieben habe. Quote Link to comment
cgiesen Posted March 12, 2007 Author Share Posted March 12, 2007 Hallo, ich brauche doch nochmal Hilfe. Wie kann ich denn jetzt der Timers.XML einen Eintarg hinzufügen, OHNE das DVBViewer läuft? Ich habe schon versucht die Timers.XML in ein Dataset zu laden, das klappt aber nicht, weil das Format nicht erkannt wird. dsTimerList.ReadXml(timersPath) Dim dtTimerList As New DataTable dtTimerList = dsTimerList.Tables.Item("section") Dim tRow As DataRow, tCol As DataColumn und dann For Each tRow In dtTimerList.Rows For Each tCol In dtTimerList.Columns Debug.Print(tCol.ColumnName & " = " & tRow(tCol.Ordinal)) Next Next Da findet er aber die Einträge nicht sauber. Danke Carsten Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 (edited) Hallo, so habe ich es jetzt geschafft einen neuen Eintrag in der Timers.xml zu machen: Dim myDVB As DVBViewerServer.IDVBViewer myDVB = GetObject(, "DVBViewerServer.DVBViewer") myDVB.TimerManager.AddItem("VOX", "13.04.2007", "20:15", "21:15", "Test", False, False, 0, 0, 0) Das doofe ist nur, das dafür DVBViewer rennen muss. Laut Doku gibt es aber auch den DVBVservice der hat eingentlich auch eine TimerManager Funktion. So habe ich es ohne Erfolg probiert: Dim myDVB As DVBVservice.IRecordingEngine myDVB = GetObject(, "DVBVservice.RecordingEngine") myDVB.AddItem("VOX", "13.04.2007", "20:15", "21:15", "Test", False, False, 0, 0, 0) Hat einer eine Idee? Danke Carsten Edited March 13, 2007 by cgiesen Quote Link to comment
Lars_MQ Posted March 13, 2007 Share Posted March 13, 2007 Das wird mit dem Recordingservice nicht so funktionieren. Es ist keine dokumentierte Schnittstelle und nur für interne zwecke gedacht. Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 Hallo Lars, hast Du eine Idee was ich sonst machen kann? Die Timers.xml direkt anzusprechen klappt auch nicht. Jedenfalls nicht mit meinem KnowHow Aber gehen muss es doch irgendwie. Gruß Carsten Quote Link to comment
Lars_MQ Posted March 13, 2007 Share Posted March 13, 2007 Du könntest das tvgenial plugin zwischenschalten. Das trägt timer sowohl in den laufenden DVBViewer Pro/GE als auch in die timers.xml bzw setup.ini ein. Das ganze per parameter beim aufruf des programms. Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 Hi, das wäre dann aber die letzte Möglichkeit Eigentlich müßte ich die Timers.xml ja direkt bearbeiten können. Das Format ist mir bei dieser Variante nur nicht klar. Ich finde dazu keine Doku. Ich meine nicht den Inhalt, sondern die Struktur! Aber ich werde nochmal suchen. Ich mache mein Plugin nicht ja nur weil ich die Funktion haben will, sondern auch um zu lernen! Gruß Carsten PS: Ist aber schon schade das es kein COM-Object gibt. Gerade in Verbindungen des GENIALEN DVBVservice wäre das doch logisch! Quote Link to comment
Lars_MQ Posted March 13, 2007 Share Posted March 13, 2007 Da der service noch lange nicht fertig entwickelt ist, habe ich im moment nicht vor irgendwelche Doku dazu zu erstellen. Alle sachen werden rein von mir in plugins genutzt und ich muss mir keine sorgen machen, wenn ich mal kurzfristig was erweitern muss Sobald sich das ganze stabilisiert hat, werde ich sicherlich auch eine doku veröffentlichen. Zu der Timers.xml: Die einzelnen Einträge wirst Du von hand zerlegen müssen. Das format ist nicht besonders schlau und ch rate davon ab, Dich darin festzubeissen, da ich das im nächsten grossen release mit sicherheit komplett umstelle auf ein ordentliches und flexibles xmlformat inklusive EPG beschreibungen und diverser erweiterungen. Dazu werde ich auch eine entsprechende interface COM bibliothek mitliefern die alle zugriffe darauf abstrahiert und unabhängig macht ob der DVBViewer nun läuft oder nicht. Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 Hallo Lars, cool, dann baue doch auch bitte ein 'freies' Feld ein. Dort könnte ich dann z.B. die TVTV Record_id eintragen. Das ist dann ideal wenn ich einen Eintrag wieder aus der Merkliste entferne, das leifert mir die Schnittstelle als ACTION=delete. Dann könnte ich nach der Id suchen, und diesen Eintrag löschen! *UNGEDULD AN* Wann ist das nächste größere Release fällig ? LG Carsten Quote Link to comment
Lars_MQ Posted March 13, 2007 Share Posted March 13, 2007 Ohje das wird dauern, im moment befindet sich alles noch im alpha stadium. cool, dann baue doch auch bitte ein 'freies' Feld ein. Dort könnte ich dann z.B. die TVTV Record_id eintragen. Ich habe eigentlich vor timern eine art benannte Properties eigenschaft zu verpassen, ähnlich wie die dataproperties. Damit kann man dann konstrukte wie timer.property['MeineID']=12345 machen. Das wird mit abgespeichert, vom viewer selber aber nicht ausgewertet. Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 (edited) Hallo Lars, vielleicht hilft es beim Denken. Das ist das was man von TVTV bekommt: <?xml version="1.0" encoding="iso-8859-1" ?> - <epg> - <result> <errorcode>0</errorcode> <serial>1173820611</serial> <records>1</records> </result> - <prog> <progid>42865435</progid> <tvtvid>1</tvtvid> <channel>ARD</channel> <start>2007-03-18T19:15</start> <end>2007-03-18T20:45</end> <action>rec</action> <title>Tatort</title> <ltext>D 2006, Krimi</ltext> <dtext>Der Bestatter Gerd Hönninger wurde im eigenen Unternehmen "Ruhe sanft" mit einem Kerzenleuchter erschlagen. Die Münsteraner Pathologie vermeldet einen Einbruch. Und bei Kommissar Thiel läuft gerade alles drunter und drüber: Statt seinen Urlaub genießen zu können, muss er den egozentrischen Prof. Karl-Friedrich Boerne als Untermieter ertragen. Da sind Konflikte natürlich vorprogrammiert. Auch die Spuren am Tatort deuten auf eine heftige Auseinandersetzung hin. Unter dringendem Mordverdacht steht Hönningers jüngerer Bruder Frank, der ebenfalls im Bestattungsunternehmen tätig ist. Offensichtlich hatten die beiden kein besonders gutes Verhältnis. Im Internet stoßen die Ermittler derweil auf eine bizarre Totenkult-Seite. Unbekannte zeigen hier Fotos von Toten, denen man eine weiße Lilie auf die Brust gelegt hat. Diese Spur führt Kommissar Thiel zu Lucie Wulfes. Die junge Arzttochter hat Kontakt zur Münsteraner Gruftie-Szene. Ihr Vater Dr. Michael Wulfes ist geschockt.</dtext> <country>D</country> <year>2006</year> <format>9</format> <content>16</content> <content>17</content> <name type="3">Manfred Stelzer</name> <name type="1">Axel Prahl (Frank Thiel)</name> <name type="1">Jan Josef Liefers (Professor</name> <name type="1">Friederike Kempter (Nadeshda</name> <subtitle>3</subtitle> <audio>2</audio> <video>1</video> </prog> </epg> Anhand von Serial kann ich checken, welche Version ich habe. Wenn ich diese Datei also alle 5 min. abrufe und die serial ist immer gleich, kann ich direkt wieder aufhören! Gruß Carsten Edited March 13, 2007 by cgiesen Quote Link to comment
cgiesen Posted March 13, 2007 Author Share Posted March 13, 2007 Hi, ich habe gerade mal testweise einen Eintrag in der Timers.xml hinzugefügt. Reicht das nicht aus? Es tut sich bei mir nichts in der PVR Ansicht. Und wenn ich den Viewer beende, ihat die Datei wieder den alten Zustand. Welche Dateien muss ich den manipulieren? Gruß Carsten Quote Link to comment
hdv Posted March 13, 2007 Share Posted March 13, 2007 Hallo, beschreibst du den auch die richtige Timers.xml? Die findest du unter DVBViewer Pro -> Hilfe -> Info -> Versionsinfo -> (die blaue Pfadangabe anklicken). Das hängt mit dem verwendeten UserMode zusemmen. Wenn du direkt die Timers.xml beschreibst, beschreibt der DVBViewer sie ja beim Beenden mit dem Inhalt aus der Rekorder-Programmierung, auch wenn nichts eingetragen ist. Der DVBViewer kontrolliert ja nicht, ob seit dem Laden dieser Datei Veränderungen vorgenommen wurden, wenn er sie beim Schließen neu schreibt. Quote Link to comment
cgiesen Posted March 14, 2007 Author Share Posted March 14, 2007 Hi, ja das tue ich! Ich habe es aber nochmal überprüft beschreibst du den auch die richtige Timers.xml? Gruß Carsten Quote Link to comment
cgiesen Posted March 14, 2007 Author Share Posted March 14, 2007 Hallo Lars, Alle sachen werden rein von mir in plugins genutzt und ich muss mir keine sorgen machen, wenn ich mal kurzfristig was erweitern muss Sobald sich das ganze stabilisiert hat, werde ich sicherlich auch eine doku veröffentlichen. kannst Du mich vielleicht trotzdem einweihen? Ich habe kein Problem damit, mein Prgramm dann schnell anzupassen Wie gesagt, ich will nur OHNE den DVBViewer laufen lassen zu müssen einen Eintrag für den PVR machen. Gruß Carsten Quote Link to comment
UPollaehne Posted March 18, 2007 Share Posted March 18, 2007 (edited) Das doofe ist nur, das dafür DVBViewer rennen muss.Laut Doku gibt es aber auch den DVBVservice der hat eingentlich auch eine TimerManager Funktion. So habe ich es ohne Erfolg probiert: Dim myDVB As DVBVservice.IRecordingEngine myDVB = GetObject(, "DVBVservice.RecordingEngine") myDVB.AddItem("VOX", "13.04.2007", "20:15", "21:15", "Test", False, False, 0, 0, 0) Hat einer eine Idee? GetObject setzt voraus, dass der Viewer läuft. Wenn Du stattdessen CreateObject verwendest, dann wird der DVBViewer gestartet. Sinnvollerweise machst Du also beides. Erstmal GetObject (für den Fall, dass der Viewer schon läuft) und wenn das fehlschlägt ein CreateObject. Die durch CreateObject erzeugte Viewer Instanz läuft weiter, auch wenn alle COM Referenzen beseitigt wurden. Um sie wieder los zu werden muss die Quit Methode aufgerufen werden (was man natürlich nur dann macht, wenn man selber der Viewer gestartet hat). So in der Art werde ich das jetzt mal in Java implementieren, nachdem ich hier gelesen habe, dass das Lesen der channels.dat pfui ist. ;-) Edited March 18, 2007 by UPollaehne Quote Link to comment
cgiesen Posted August 16, 2007 Author Share Posted August 16, 2007 Hallo Lars, ich habe heute angefangen VB2005 beigebracht zu bekommen und habe mir zum üben dann noch mal mein Tool vorgenommen. Zur Erinnerung, ich will Records einfügen. Ist Die Schnittstelle jetzt schon benutzbar? LG Carsten Ohje das wird dauern, im moment befindet sich alles noch im alpha stadium. Ich habe eigentlich vor timern eine art benannte Properties eigenschaft zu verpassen, ähnlich wie die dataproperties. Damit kann man dann konstrukte wie timer.property['MeineID']=12345 machen. Das wird mit abgespeichert, vom viewer selber aber nicht ausgewertet. Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.