Jump to content

Channels.dat In Visualbasic Auslesen


cgiesen

Recommended Posts

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

Link to comment

Die channels.dat ist nicht wirklich zukunftssicher. Probiere bitte die Com-Schnittstelle für das Bearbeiten der EPG Einträge.

 

Christian

Link to comment

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

Link to comment

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

Link to comment

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

 

Ich hoffe das hilft etwas weiter.

Link to comment

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

Link to comment

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 by cgiesen
Link to comment
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. :biggrin:

In VB würde obiges statement lauten:

(List(i, 4) + 1) << 29 + List(i, 20) << 16 + List(i, 26) + '|' + List(i, 1)

ohne garantie :bounce:

Link to comment

Hi,

 

das war es leider nicht:

Ist=1073741824256898|ProSieben

Soll= 1090519938|ProSieben

 

Aber erstmal Danke und gute Nacht

 

Carsten

Link to comment

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

Link to comment

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

Link to comment

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

Link to comment

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

Link to comment

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 by cgiesen
Link to comment

Hallo Lars,

 

hast Du eine Idee was ich sonst machen kann?

Die Timers.xml direkt anzusprechen klappt auch nicht. Jedenfalls nicht mit meinem KnowHow :wacko:

 

Aber gehen muss es doch irgendwie.

 

Gruß

 

Carsten

Link to comment

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.

Link to comment

Hi,

 

das wäre dann aber die letzte Möglichkeit :wacko:

 

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!

Link to comment

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

Link to comment

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 ? :bye:

 

LG

 

Carsten

Link to comment

Ohje das wird dauern, im moment befindet sich alles noch im alpha stadium. :bye:

 

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.

Link to comment

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 by cgiesen
Link to comment

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

Link to comment

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.

 

:bye:

Link to comment

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 :bye: 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 (w00t)

 

Wie gesagt, ich will nur OHNE den DVBViewer laufen lassen zu müssen einen Eintrag für den PVR machen.

 

Gruß

 

Carsten

Link to comment
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 by UPollaehne
Link to comment
  • 4 months later...

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.

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