Lücken im Premiere Sport EPG

Das Original Benutzerinterface Neutrino-SD incl. zapit, sectionsd, yWeb etc...
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Nico 77 hat geschrieben:Also bei dem Patch von dir und bei dem von Houdini bleibt das EPG bis Programmende erhalten und verschwindet nicht immer.
Ich erkläre noch einmal kurz, was dieser Patch beheben soll. Vor einigen Wochen hat Premiere etwas im PrivateEPG geändert.
Bis dahin kam ein Event nur einmal im Datenstrom vor und die Zeiten der Ausstrahlungen wurden alle in dieses eine Event gepackt. Leider gibt es hierbei das Problem, das nur eine Dauer pro Event angegeben werden kann. Das verursachte Probleme bei der Bezeichnung von Aufnahmendateien und den Inhalten der XML-Datei.
Jetzt ist es nun so, dass ein Event und die dazugehörige EventID mehrfach hintereinander im Datenstrom mit unterschiedlichen Zeiten und unterschiedlicher Dauer gesendet werden. Dabei tritt aber das Problem auf, dass die Version des sectionsd im CVS, Events mit der gleichen EventID beim Einfügen löscht. Dadurch wird eben nur das zuletzt vorkommende Event im Datenstrom in die Liste der Events eingefügt. Dieses Problem beheben die Änderungen von Houdini und mir.
Nico 77 hat geschrieben:Der Patch von Kroki zeigt neben der Zeit die Programme bei gelber Taste an?
Sowas war glaube ich schon mal in der Entwicklung hatte es aber Aufgrund von Problemen nicht in das CVS geschafft kann das sein?
Keine Ahnung. Ich habe auch nicht so ganz verstanden, was der Patch überhaupt macht.
Danke. :D Ich probiere die Datei nachher einmal aus. Im Moment gehts leider nicht.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Bist du dir sicher, dass du die richtige Datei hochgeladen hast? Das Binary ist nämlich genauso groß wie das CVS-Binary aus dem aktuellen JtG-Image. Sie verhält sich nämlich auch wie die CVS-Version. Durch den zusätzlichen Code müßte sie doch eigentlich größer sein. Vielleicht sind aber auch meine Änderungen der Änderungen fehlerhaft.
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Ja bin ich mir sicher, da ich den sectionsd aus dem CVS selber nicht verwende und die ganze Sache erst anpassen musste.
Ich weiß auch das ich deine Version kompiliert habe da in deinem Source ein ';' Fehler war. :wink:
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Mist, dann funktioniert meine Anpassung wohl nicht. :cry: Ich schau mir das gleich noch einmal an und poste nachher eine neue Version. Das fehlende Semikolon habe ich auch eben gefunden.
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Wenn du die Checksumme vergleichst wirst du auch feststellen das es unterschiedliche Versionen sind und Linux diese von der Größe her zufällig passend gestrippt hat. :)

http://home.arcor.de/mybase/md5Dropper.rar

Edit: Habe das binary mal kontrolliert, die Zeile aus dem printf 'sectionsd::updateEvent' gibts im JTG bzw im CVS sectionsd nicht. 8)
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Nico 77 hat geschrieben:Wenn du die Checksumme vergleichst wirst du auch feststellen das es unterschiedliche Versionen sind und Linux diese von der Größe her zufällig passend gestrippt hat.
Auf den Vergleich der MD5-Summe bin ich in dem Moment nicht gekommen, obwohl ich so ein MD5-Programm sonst recht oft benutze.

Kannst du nun mal bitte folgende Version kompilieren, testen und mir zur Verfügung stellen:
--- URL gelöscht ---

Leider löst diese Variante nicht dieses Problem:
Was aber eigentlich ein Problem sein sollte, ist der Fall, dass sich die Anfangszeit eines Events verschiebt. Dann würde diese neue Zeit meiner Meinung nach hinzugefügt werden, obwohl sie ja eigentlich die bisherige Anfangszeit ersetzen sollte.
Leider fällt mir dazu im Moment keine einfache Lösung ein, da die Events mit gleicher EventID zwar im Datenstrom hintereinander vorkommen, aber im sectionsd wohl leider umsortiert werden. :(


Edit:
In "sectionsd-updateevent-v3.cpp" habe ich den völlig falschen Ansatz zum herausfinden der gleichen Events verwendet. Ich programmiere gerade eine komplett neue Variante, die auch das Problem der sich verschiebenden Anfangszeiten löst. Ich lade die Datei dann später hoch.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Hallo Nico,
versuche bitte einmal folgende Version zu kompilieren. Sag bitte Bescheid, ob es überhaupt geht. Ich habe das nur theoretisch ausprobiert (auf einem Zettel). Falls es geht, gib mir doch bitte das Binary.

Link zum Patch entfernt

MfG Gaucho
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Danke, aber leider scheint es nur manchmal zu gehen. Teilweise fehlen leider immer noch Events, die dann nach dem Umschalten und wieder Zurückschalten auf das Sport Portal plötzlich da sind. Nach einem weiteren Um- und Zurückschalten sind sie dann aber teilweise wieder weg. Im Moment habe ich aber leider keine Ahnung, woran das liegen könnte. :cry:
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Was ist mit der Version von Houdini, was geht da nicht richtig?
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Gaucho316 hat geschrieben:Was aber eigentlich ein Problem sein sollte, ist der Fall, dass sich die Anfangszeit eines Events verschiebt. Dann würde diese neue Zeit meiner Meinung nach hinzugefügt werden, obwohl sie ja eigentlich die bisherige Anfangszeit ersetzen sollte.
Das ist das Problem. Ich habe noch einmal eine neue Variante hochgeladen. Die URL ist gleich geblieben.

Link zum Patch entfernt
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Nochmals vielen vielen Dank. Ich hoffe, dass ich dich mit meinen Änderungen nicht nerve. Es scheint aber jetzt zu funktionieren. :D Mal sehen, was ein etwas längerer Test ergibt.

Das Problem der vorigen Version war wohl, dass ich in der Funktion "addEventTimes", die der Funktion "updateEvent" in Houdinis Variante entspricht, etwas zuviel wegoptimiert habe. Dadurch wurden einige Events komplett aus der Liste gelöscht. Diese Änderungen habe ich nun wieder zurückgenommen. Das ist eben das Problem, wenn man nicht selbst kompilieren und probieren kann. Ist es eigentlich schwierig, sich eine Kompilierumgebung zum Erstellen einzelner Linux-Binaries (ich möchte keine Images erstellen) unter Windows einzurichten?
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Nein das nervt auf keinen Fall, bin doch froh wenn sich was tut! ;)

Ich mache das ganze über vmware Workstation, darin habe ich Knoppix installiert und stelle über Samba eine Verbindung zu Windows her.
Über strg+alt kann man dann wunderbar zwischen Windows und Linux hin und her zwitschen.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Nico 77 hat geschrieben:Nein das nervt auf keinen Fall, bin doch froh wenn sich was tut! ;)
Na dann ist ja gut.
Nico 77 hat geschrieben:Ich mache das ganze über vmware Workstation, darin habe ich Knoppix installiert und stelle über Samba eine Verbindung zu Windows her.
Über strg+alt kann man dann wunderbar zwischen Windows und Linux hin und her zwitschen.
Dann ist das ja einfacher, als ich dachte. Das werde ich mir wohl auch einrichten, wenn ich mal Zeit dafür habe.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Gaucho316 hat geschrieben:Das Problem der vorigen Version war wohl, dass ich in der Funktion "addEventTimes", die der Funktion "updateEvent" in Houdinis Variante entspricht, etwas zuviel wegoptimiert habe. Dadurch wurden einige Events komplett aus der Liste gelöscht.
Es tritt immer noch derselbe Fehler mit den eingefügten und dann wieder sporadisch verschwindenden Events auf. Also war die Optimierung doch in Ordnung und es liegt an etwas anderem. Ich muss mich wohl noch etwas tiefer in den sectionsd einarbeiten.
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Also ich habe noch ein wenig weiter getestet. Mein Algorithmus scheint prinzipiell zu funktionieren. Starte ich den sectionsd per Telnet, liest er beim ersten Umschalten aufs Sport Portal alle Events ein. Schalte ich dann um und wieder zurück, habe ich plötzlich einige Lücken. Es sind zwar weniger als mit der CVS-Version, aber es sind welche vorhanden. Es scheinen aber hier nicht nur einzelne Zeiten eines Events sondern das ganze Event zu fehlen. Vielleicht habe ich ja das Zurücksetzen der Variablen "current_content_id", "first_content_id" und "previous_content_id" auf Null an die falsche Stelle geschrieben. Das Problem ist aber nun, dass ich nicht genau weiss, wo ich es sonst einfügen sollte.
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Ich denke das du über die maximalen 6000 events gekommen bist und der sectionsd deshalb einige Werte channcelt.
Welche von den hier geposteten .cpp's empfiehlst du denn, die würde ich dann drin lassen und mal beobachten?
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Ich kann mir nicht vorstellen, dass die 6000 Events erreicht sind. In Houdinis Version fliegen ja auch keine Events raus.

Mach bitte mal ein Binary aus dem aktuell hochgeladenen Debug-Quelltext. Ich gebe hier per "printf" die Werte von "header.section_number", "current_content_id", "first_content_id" und "previous_content_id" vor jedem Vergleich der contentIDs aus.

Link zum Patch entfernt
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Code: Alles auswählen

sectionsd.cpp: In function `void* pptThread(void*)':
sectionsd.cpp:6339: warning: int format, long int arg (arg 2)
sectionsd.cpp:6340: warning: int format, long int arg (arg 2)
sectionsd.cpp:6341: warning: int format, long int arg (arg 2)
Bitte :) http://home.arcor.de/mybase/sectionsd-a ... _debug.rar
Nirvana
Erleuchteter
Erleuchteter
Beiträge: 646
Registriert: Mittwoch 16. April 2003, 14:12

Beitrag von Nirvana »

Sollte das mit den 6000 Events doch zutreffen, wäre das Event an der falschen Stelle in MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey eingeordnet.

Die 6000er Schranke löscht stumpf das letzte (also das am weitesten in der Zukunft liegende) Event in der Liste.

Frage also: Läuft das korrekt, wenn ein Event mehrere Startzeiten hat?
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Du meinst also dieses Stück Code in der Funktion "addEvent"?

Code: Alles auswählen

if (mySIeventsOrderUniqueKey.size() >= max_events) {
	//FIXME: Set Old Events to 0 if limit is reached...
	MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey::iterator lastEvent =
									mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.end();
	lastEvent--;

	//preserve events of current channel
	lockMessaging();
	while ((lastEvent != mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.begin()) &&
		((*lastEvent)->get_channel_id() == messaging_current_servicekey)) {
	  lastEvent--;
	}
	unlockMessaging();

	deleteEvent((*lastEvent)->uniqueKey());
}
Vielleicht läuft ja hier etwas nicht ganz so, wie gedacht.

Das einfügen von Zeiten läuft in meiner Funktion so:

Code: Alles auswählen

// Fuegt zusaetzliche Zeiten in ein Event ein
static void addEventTimes(const SIevent &evt)
{
	if (evt.times.size())
	{
		// D.h. wir fuegen die Zeiten in das richtige Event ein
		MySIeventsOrderUniqueKey::iterator e = mySIeventsOrderUniqueKey.find(evt.uniqueKey());

		if (e != mySIeventsOrderUniqueKey.end())
		{
			// Event vorhanden
			// Falls das Event in den beiden Mengen mit Zeiten nicht vorhanden
			// ist, dieses dort einfuegen
			MySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey::iterator e2 = mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.find(e->second);

			if (e2 == mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.end())
			{
				// nicht vorhanden -> einfuegen
				mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey.insert(e->second);
				mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey.insert(e->second);
			}

			// Und die Zeiten im Event updaten
			e->second->times.insert(evt.times.begin(), evt.times.end());
//			printf("Updating: %04x times.size() = %d\n", (int) e->second->uniqueKey(), e->second->times.size());
		}
	}
}
Sollte ich vielleicht vor dem ändern der Zeiten im Event das Event aus "mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey" und "mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey" löschen und hinterher wieder einfügen?
Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Ich habe jetzt einfach eine Version erstellt, die vor dem Einfügen von neuen Zeiten das Event aus den beiden Mengen "mySIeventsOrderServiceUniqueKeyFirstStartTimeEventUniqueKey" und "mySIeventsOrderFirstEndTimeServiceIDEventUniqueKey" löscht und hinterher wieder einfügt. Mal sehen, ob das etwas bringt.

Link zum Patch entfernt


Edit (16:30 Uhr):
Ich habe eben noch etwas in der Datei geändert.
Nico 77
Semiprofi
Semiprofi
Beiträge: 1383
Registriert: Freitag 18. April 2003, 15:12

Beitrag von Nico 77 »

Gaucho316
Contributor
Beiträge: 1688
Registriert: Donnerstag 17. Februar 2005, 20:24

Beitrag von Gaucho316 »

Der Tipp mit der Eventschranke und MySIeventsOrderFirstEndTimeServiceIDEventUniqueKey war Gold wert. Vielen Dank an Nico 77, Houdini und Nirvana. Es funktioniert endlich. :D Wenn noch ein paar mehr Leute getestet haben (sectionsd-addeventtimes-v5.rar nehmen), können die Änderungen eigentlich so ins CVS. Ich werde später noch ein diff erstellen und es hochladen.


Edit:
Das diff ist gegen die aktuelle Version 1.227 der sectionsd.cpp vom 08.06.2006.
Links zu Patches entfernt