Ruckeln beim Playback

to stream or not to stream
eule
Erleuchteter
Erleuchteter
Beiträge: 585
Registriert: Mittwoch 10. Oktober 2001, 00:00

Beitrag von eule »

wolgade hat geschrieben:Wieso das denn? Wenn die CPU ihre Leistungsaufnahme nicht senkt, indem sie Teile temporär schlafen legt, dann sinkt auch nicht die Heizleistung.
Diese Aussage trifft bei heutigen CPU's nicht mehr zu. Die Abwärme kommt hauptsächlich durch zwei Effekte zustande:
1. Leckströme, wo ein Teil des Stromes ungenutzt im Silizium versickert, da Aufgrund der feinen Strukturen und dünnen Isolierungen der Isolationswiderstand nicht mehr unendlich ist.
2. Ladungswechsel. Jeder Taktzyklus, jede Datenänderung in einem Register oder auch jede Zustandsänderung auf einem der internen Busse ist mit einem Ladungswechsel verbunden. Dazu muss man sich vorstellen, dass die Leiterbahn zu einem Transistor im Prozessor einem Widerstand entspricht und das Gate (Basis) eines Transistors entspricht einem Kondensator. Dieser Kondensator wird über den Leitungswiderstand ständig geladen und entladen. Der Stromfluß durch den Widerstand erzeugt Wärme (P=I²*R). Nun hat so eine CPU / MPU ein paar Millonen Transistoren, die zwar nie alle gleichzeitig angesteuert werden, aber vom Programm (Betriebssystem / Anwendung) abhängig mehr oder weniger intensiv genutzt werden. So ist z.B. ein deutlicher Unterschied in der Stromaufnahme zu verzeichnen, ob ich nur eine Warteschleife Programmiere (wenig Ladungswechsel), oder Daten über den Adreßbus von einer Stelle im RAM an eine Andere kopiere (viele Ladungswechsel).

Beim Vergleich zwischen einem Pentium und dem MPC bezüglich der Abwärme dürfte beim Pentium der Unterschied zwischen nichts tun und Vollast deutlich größer ausfallen, da der MPC außer einer CPU auch noch eine Vielzahl anderer Bestandteile besitzt, wie z.B. Taktteiler, Schieberegister (seriell-Wandler), Ports (Busregister), etc. Der MPC823 kann im Normalbetrieb nicht irgend einen Teil schlafen legen. Es gibt zwar auch die Möglichkeit, im Normalbetrieb die Spannung vom Core abzusenken, dies wird in der DBox imho nicht genutzt.

Der größte Hitzkopf in meinen DBox'en ist immer der Tuner, gefolgt von den AVIA's und der CPU.
palace
Erleuchteter
Erleuchteter
Beiträge: 441
Registriert: Dienstag 11. März 2003, 03:42

Beitrag von palace »

gmo18t hat geschrieben:das Coding in "stream2file.c" kann bestimmt noch optimiert werden. In jedem Fall ist das Setzen des DMX-Buffers via if (ioctl(fd, DMX_SET_BUFFER_SIZE, DMX_BUFFER_SIZE) < 0) unnötig, da dies keinerlei Auswirkung auf den tätsächlich verwendeten Buffer hat !
Der ist nämlich intern "hart" auf eine feste Größe verdrahtet (ich glaube 32 *940 Bytes für Video und Audio).
Der "ioctl" ist wegen DVB-API Konformität realisiert und allociert lediglich unnötig Speicher !

An sich sollte man sogar ganz ohne Ringbuffer auskommen (bei IDE), und die "reads" auf den Demux nicht mit jeweils nur 188 Bytes machen sondern mit den o.g. (32*940) Bytes, damit die Anzahl der "reads" und damit die CPU-Last merklich verringert wird !

Auch das Weglassen des Ringuffers und somit begrenzen auf nur einen Thread wird der CPU zugutekommen.
Hi, hat das jemand bereits getestet / umgesetzt?
Z80
Erleuchteter
Erleuchteter
Beiträge: 710
Registriert: Dienstag 3. September 2002, 12:54

Beitrag von Z80 »

edit
unsinn gelöscht :oops:

@AudioSlyer: war das die einzige änderung, die bei deinen tests zu der signifikant niedrigeren CPU-last führt?. :roll:
Zuletzt geändert von Z80 am Dienstag 12. September 2006, 09:57, insgesamt 2-mal geändert.
Charles Darwin jun.
Erleuchteter
Erleuchteter
Beiträge: 664
Registriert: Donnerstag 24. August 2006, 11:19

Beitrag von Charles Darwin jun. »

Z80 hat geschrieben:@AudioSlyer: war das die einzige änderung, die bei deinen tests zu der signifikant niedrigeren CPU-last führt?. :roll:
Ihr habt Audioslyer vergrault...und ich kann ihm das wirklich nicht übel nehmen...weil er war bis jetzt der einzige Dev, der was konkret zu dem Problem mit der Prozessorlast gesagt hat...

...und der jetzt eine Lösung gefunden hat :lol:

...behalt sie noch eine Weile für dich, Audioslyer :lol:
Zuletzt geändert von Charles Darwin jun. am Dienstag 12. September 2006, 12:56, insgesamt 1-mal geändert.
T-Tron
Interessierter
Interessierter
Beiträge: 67
Registriert: Mittwoch 2. November 2005, 07:45

Beitrag von T-Tron »

@Z80:
Die Änderungen im CVS betreffen nur den Movieplayer. Änderungen bei der Aufnahme wurden nicht eingecheckt.
Z80
Erleuchteter
Erleuchteter
Beiträge: 710
Registriert: Dienstag 3. September 2002, 12:54

Beitrag von Z80 »

T-Tron hat geschrieben:@Z80:
Die Änderungen im CVS betreffen nur den Movieplayer. Änderungen bei der Aufnahme wurden nicht eingecheckt.
:oops: :-?
AudioSlyer
Erleuchteter
Erleuchteter
Beiträge: 450
Registriert: Sonntag 28. Juli 2002, 01:18

Beitrag von AudioSlyer »

Es hagelt PMs.
Aus Zeitmangel hab ich das bei mir Quick&Dirty umgesetzt um zu testen.
Wenn ich meine "Klopapiersourcen" bereinigt habe, dann werde ich ein Diff anhängen. Vielleicht ist ein DEV ja schneller ;)

ICH HAB HIER NICHTS GEGEN DEVs, das will ich nochmal betonen.
Carjay macht hier sehr gute Arbeit und hat meinen vollen Respekt.
Zuletzt geändert von AudioSlyer am Dienstag 12. September 2006, 14:38, insgesamt 1-mal geändert.
Charles Darwin jun.
Erleuchteter
Erleuchteter
Beiträge: 664
Registriert: Donnerstag 24. August 2006, 11:19

Beitrag von Charles Darwin jun. »

Wäre auch schwer ohne DEVs... :lol: :lol: :lol:

...weil sonst müßt ich mich an die Breakdance-Aufnahmen von ARD gewöhnen :wink:
Ciao

CDj
Günther
Developer
Beiträge: 587
Registriert: Freitag 9. September 2005, 21:48

Beitrag von Günther »

gmo18t hat geschrieben: An sich sollte man sogar ganz ohne Ringbuffer auskommen (bei IDE), und die "reads" auf den Demux nicht mit jeweils nur 188 Bytes machen sondern mit den o.g. (32*940) Bytes, damit die Anzahl der "reads" und damit die CPU-Last merklich verringert wird !
So wie ich das sehe, ist der Buffer schon größer, nämlich 188*362

Code: Alles auswählen

// TS_SIZE is 188
#define IN_SIZE		(TS_SIZE * 362)
....
void * DMXThread(void * v_arg)
{
...
todo = IN_SIZE
r = read(*(int *)v_arg, vec[0].buf, todo);
}
Die Suche nach dem sync-Byte erfolgt in 188 byte Schritten, aber das ist ja nur am Anfang. Also obs was bringt muss man wohl mal austesten (vielleicht mal eine wirklich nackten dmx-lese-festplatten-schreib -Schleife zum testen - ist ja schnell gemacht :)). Im Grunde ist so ein Buffer ja eigentlich was Schönes, da er Unregelmäßigkeiten ausgleichen kann (Festplattendelays, andere gleichwertige Tasks usw.). Wirklich was bringen wird sicherlich vor allem eine mögliche IDMA
Unterstützung.

EDIT: Kennt den jemand die wirkliche Größe des DMX-Schreib- und Lesebuffer????

Günther
Carjay
Developer
Beiträge: 122
Registriert: Sonntag 23. April 2006, 12:37

Beitrag von Carjay »

Du zitierst den falschen Puffer. Die DVR-Puffergröße ist innerhalb der DVB-API festgelegt auf: 10*188*1024
Günther
Developer
Beiträge: 587
Registriert: Freitag 9. September 2005, 21:48

Beitrag von Günther »

Carjay hat geschrieben:Du zitierst den falschen Puffer. Die DVR-Puffergröße ist innerhalb der DVB-API festgelegt auf: 10*188*1024
D. h. die obige Funktion greift erst auf die DVB-API zu, welche wiederum auf den eigentlichen hardware chip zugreift? Ist das dann auch die Größe des Hardwarepuffers?
(völlig neue Baustelle :) )

Günther
Günther
Developer
Beiträge: 587
Registriert: Freitag 9. September 2005, 21:48

DMXSingleBufferThread(void

Beitrag von Günther »

Hier nur mal was zum testen ob es was bringt, den Ringbuffer wegzulassen. Den Ringbuffer in den Aufnahme-Optionen auf 0 setzten und neutrino neu starten(!). Dann wird der Ringbuffer nicht verwendet.
Konnte nur am Ton erkennen das es grundsätzlich funktioniert (habe gerade keinen Bildschirm dran). Vielleicht kann jemand noch eine Perfomance Messung machen.
(Fehler werden im Moment noch nicht abgefangen ...)

Code: Alles auswählen

### Eclipse Workspace Patch 1.0
#P head
Index: apps/tuxbox/neutrino/src/driver/stream2file.cpp
===================================================================
RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/driver/stream2file.cpp,v
retrieving revision 1.21
diff -u -r1.21 stream2file.cpp
--- apps/tuxbox/neutrino/src/driver/stream2file.cpp	29 Dec 2005 17:22:32 -0000	1.21
+++ apps/tuxbox/neutrino/src/driver/stream2file.cpp	13 Sep 2006 11:03:57 -0000
@@ -104,6 +104,9 @@
 
 static char myfilename[512];
 
+void * DMXSingleBufferThread(void * v_arg);
+
+
 typedef struct filenames_t
 {
 	const char * extension;
@@ -500,7 +503,13 @@
 			return STREAM2FILE_DVR_OPEN_FAILURE;
 		}
 		exit_flag = STREAM2FILE_STATUS_RUNNING;
-		pthread_create(&demux_thread[0], 0, DMXThread, &dvrfd);
+        
+        printf("Ringbuffers %d\n",ringbuffers);
+        if(ringbuffers == 0 )
+            pthread_create(&demux_thread[0], 0, DMXSingleBufferThread, &dvrfd);
+        else
+            pthread_create(&demux_thread[0], 0, DMXThread, &dvrfd);
+        
 	}
 	else
 	{
@@ -526,3 +535,176 @@
 	else
 		return STREAM2FILE_RECORDING_THREADS_FAILED;
 }
+
+
+/*****************************************************************/
+/* no buffer write queue                                         */
+/*****************************************************************/
+
+#define READ_DMX_SIZE (TS_SIZE * 160)  //  188 * 160 = 32 * 940 = 30080  (188 * 368 = 69184)
+
+void * DMXSingleBufferThread(void * v_arg)
+{
+	unsigned char buf[READ_DMX_SIZE];
+	int buf_read_pos = 0;
+	int buf_write_pos = 0;
+	ssize_t r = 0;
+	int w = 0;
+	struct pollfd pfd = {*(int*)v_arg, POLLIN|POLLERR,0 };
+	int pres;
+	int file_handler = -1;
+	unsigned long long file_size = 0;
+	const unsigned long long stop_size = (limit / TS_SIZE) * TS_SIZE;
+
+     printf ("[stream2file]: DMXSingleBufferThread\n");
+	/*****************************************************************/
+	/* open file */
+	/*****************************************************************/
+	char filename[FILENAMEBUFFERSIZE];
+
+	sprintf(filename, "%s.ts", myfilename);
+	if (file_handler != -1)
+		close(file_handler);
+	if ((file_handler = open(filename, use_o_sync ? O_WRONLY | O_CREAT | O_SYNC | O_TRUNC | O_LARGEFILE : O_WRONLY | O_CREAT | O_TRUNC | O_LARGEFILE, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0)
+	{
+		perror("[stream2file]: error opening outfile");
+		exit_flag = STREAM2FILE_STATUS_WRITE_OPEN_FAILURE;
+	}
+	if( strstr(filename, ".ts") != NULL )
+	{
+		genpsi(file_handler);
+	}
+	/*****************************************************************/
+	/* find offset  / bytes are afterwards written to file in READ/WRITE LOOP */
+	/*****************************************************************/
+	while (exit_flag == STREAM2FILE_STATUS_RUNNING)
+	{
+		if ((pres=poll (&pfd, 1, 15000))>0)
+		{
+			if (!(pfd.revents&POLLIN))
+			{
+				printf ("PANIC: error reading from demux, bailing out\n");
+				exit_flag = STREAM2FILE_STATUS_READ_FAILURE;
+			}
+			buf_write_pos = read(*(int *)v_arg, buf, TS_SIZE);
+			if (buf_write_pos > 0)
+			{
+				buf_read_pos = sync_byte_offset(buf, buf_write_pos);
+				if (buf_read_pos != -1)
+					break;
+			}
+		}
+		else if (!pres)
+		{
+			printf ("[stream2file]: timeout from demux\n");
+		}
+	}
+	/*****************************************************************/
+	/* READ/WRITE LOOP */
+	/*****************************************************************/
+	while (exit_flag == STREAM2FILE_STATUS_RUNNING)
+	{
+		/*****************************************************************/
+		/* read from dmux */
+		/*****************************************************************/
+		if( buf_write_pos < READ_DMX_SIZE/2)
+		{
+			if ((pres=poll (&pfd, 1, 15000))>0)
+			{
+				if (!(pfd.revents&POLLIN))
+				{
+					printf ("PANIC: error reading from demux, bailing out\n");
+					exit_flag = STREAM2FILE_STATUS_READ_FAILURE;
+					buf_write_pos = 0;
+				}
+				r = read(*(int *)v_arg, &buf[buf_write_pos], READ_DMX_SIZE - buf_write_pos);
+				if(r != READ_DMX_SIZE - buf_write_pos)
+					printf("r%d\n",r); // if write size is not as expected
+				
+				buf_write_pos = buf_write_pos + r;
+			}
+			else if (!pres)
+			{
+				printf ("[stream2file]: timeout reading from demux\n");
+			}
+		}
+	
+		/*****************************************************************/
+		/* write to file */
+		/*****************************************************************/
+		if ( buf_write_pos > TS_SIZE) 
+		{
+			if ((w = write(file_handler, &buf[buf_read_pos], buf_write_pos - buf_read_pos)) > 0)
+			{
+				buf_read_pos = buf_read_pos + w;
+				if(buf_read_pos == buf_write_pos)
+				{
+					buf_read_pos = 0;
+					buf_write_pos = 0;
+				}
+				else
+				{
+					printf("w%d\n",w); // if write size is not as expected
+				}
+				file_size = file_size + w;
+				if(file_size > stop_size)
+					exit_flag = STREAM2FILE_STATUS_IDLE; //exit if end of files 
+			}
+			else if ( w == 0)
+			{
+				printf("w0\n");
+				//exit_flag = STREAM2FILE_STATUS_WRITE_FAILURE;
+			}
+			else if (errno != EAGAIN)
+			{
+				perror("[stream2file]: error in write");
+			}
+		}
+		usleep(1);
+	}
+
+	/*****************************************************************/
+	/* sync file */
+	/*****************************************************************/
+	if (use_fdatasync)
+		fdatasync(file_handler);
+		
+	/*****************************************************************/
+	/* close file */
+	/*****************************************************************/
+	if (file_handler != -1)
+	{
+		close(file_handler);
+	}
+
+	/*****************************************************************/
+	/* close DMX */
+	/*****************************************************************/
+	if (v_arg == &dvrfd)
+		close(*(int *)v_arg);
+
+	if (v_arg == &dvrfd)
+		while (demuxfd_count > 0)
+			unsetPesFilter(demuxfd[--demuxfd_count]);
+
+	DEC_BUSY_COUNT;
+
+	/*****************************************************************/
+	/* Signal end of recording */
+	/*****************************************************************/
+	if ((v_arg == &dvrfd) || (v_arg == (&(demuxfd[0]))))
+	{
+		CEventServer eventServer;
+		eventServer.registerEvent2(NeutrinoMessages::EVT_RECORDING_ENDED, CEventServer::INITID_NEUTRINO, "/tmp/neutrino.sock");
+		stream2file_status2_t s;
+		s.status = exit_flag;
+		strncpy(s.dir,dirname(myfilename),100);
+		s.dir[99] = '\0';
+		eventServer.sendEvent(NeutrinoMessages::EVT_RECORDING_ENDED, CEventServer::INITID_NEUTRINO, &s, sizeof(s));
+		printf("[stream2file] pthreads exit code: %u\n", exit_flag);
+	}
+
+	pthread_exit(NULL);
+}
+
+
pOo
Einsteiger
Einsteiger
Beiträge: 144
Registriert: Sonntag 6. August 2006, 11:16

Beitrag von pOo »

Vielleicht sollte man mal anmerken, dass eventuell nicht die aufnahme bei manchen probleme macht, sonder eher der movieplayer beim abspielen. sie dev forum. diese leute sollten erstmal den Regen_Diabolisch.ts Stresstest machen.

just my poo cents ;)
Charles Darwin jun.
Erleuchteter
Erleuchteter
Beiträge: 664
Registriert: Donnerstag 24. August 2006, 11:19

Beitrag von Charles Darwin jun. »

Also das mit dem Movieplayerproblem kann ich net nachvollziehen...

...wenn bei der Aufnahme die Systemlast mehrmals auf 100% geht, dann hat man Ruckler...

...es ist definitiv ein Aufnahmeproblem!

...aber vielleicht irre ich mich ja :lol:
Ciao

CDj
BigHardy
Einsteiger
Einsteiger
Beiträge: 119
Registriert: Sonntag 19. Mai 2002, 21:15

Beitrag von BigHardy »

pOo hat geschrieben:Vielleicht sollte man mal anmerken, dass eventuell nicht die aufnahme bei manchen probleme macht, sonder eher der movieplayer beim abspielen. sie dev forum. diese leute sollten erstmal den Regen_Diabolisch.ts Stresstest machen.

just my poo cents ;)
Also bei mir ist definitiv die Aufnahme das Problem. Da tauchen bei mir die Queue-Overflows auf (sehr gut reproduzierbar auf ARD).
Wenn die Aufnahme sauber ist spielt der Movieplayer sie auch problemlos ab, zumindest das Video und die Nicht-AC3-Spuren.
AC3-Audio im Movieplayer habe ich noch nicht getestet, da die HDD-Dbox2 nicht an einem AC3-AV-Receiver hängt.
Auch springen ist kein Problem.

Hardy
Heavendenied
Einsteiger
Einsteiger
Beiträge: 145
Registriert: Samstag 5. Februar 2005, 20:38

Beitrag von Heavendenied »

Also ich hab auch (hauptsächlich bei ARD Aufnahmen) Ruckler beim abspielen. Aber wenn ich dann an der Stelle wo der Hänger war zurück spule und nochmal ablaufen lasse gibts keine Ruckler mehr, also muss es doch ein Problem beim Abspielen und nicht bei der Aufnahme sein, oder?
Z80
Erleuchteter
Erleuchteter
Beiträge: 710
Registriert: Dienstag 3. September 2002, 12:54

Beitrag von Z80 »

kann es sein, daß die ursachen der probleme gar nicht an der hohen datenrate an sich liegen, sondern evtl. an der ungewöhnlich hohen datenrate der audiospur (320kBit/s) bei der ard?

Code: Alles auswählen

avia_gt_dmx: queue 0 overflow
Carjay hat geschrieben:Das heißt, daß der Pufferinhalt im Demux-RAM nicht schnell genug von der CPU abgeholt wurde und - da Ringpuffer - der Schreibzeiger den Lesezeiger überholt hat.
In dem Fall wird der Puffer verworfen und diese Meldung ausgegeben.
Konsequenz? Naja, die Daten, die im Puffer waren sind weg.
BigHardy
Einsteiger
Einsteiger
Beiträge: 119
Registriert: Sonntag 19. Mai 2002, 21:15

Beitrag von BigHardy »

Heavendenied hat geschrieben:Also ich hab auch (hauptsächlich bei ARD Aufnahmen) Ruckler beim abspielen. Aber wenn ich dann an der Stelle wo der Hänger war zurück spule und nochmal ablaufen lasse gibts keine Ruckler mehr, also muss es doch ein Problem beim Abspielen und nicht bei der Aufnahme sein, oder?
Wenn ich eine Datei mit Overflows auf dem PC runterziehe und dann durch PX jage, zeigt PX mir unstimmigkeiten an.

Eine Datei ohne Overflows läuft ohne Fehler und Unstimmigkeiten durch PX.

Demnach zumindest bei mir ein Aufnahmeproblem.

Wenn ich ein TS-File, welches iO ist vom PC auf die DBox spiele, spielt der Movieplayer den Film auch einwandfrei ohne Ruckeln ab.

Wenn ich eine Datei mit Overflow (bei der Aufnahme) abspiele und es ruckelt, ruckelt es immer an derselben Stelle.
Für mich auch ein Hinweis, das es an der Aufnahme liegt.

Hardy
Nokia, Sat, Avia600, GTX, 2xIntel, nur Astra.
MPC823
Erleuchteter
Erleuchteter
Beiträge: 448
Registriert: Samstag 26. November 2005, 00:35

Beitrag von MPC823 »

@pOo

Wenn ich gleichzeitig mit der Dbox und der TD ARD aufnehme und den TS File der TD nacher auf die Dbox schiebe und der TS File der TD läuft sauber und der der DBOX nicht würde ich schon behaupten es liegt an der Aufnahme. Vor allem hat der TS File der TD noch AC3 drin !! & läuft trotzdem ruckelfrei.

Apropo habe ich das an anderer Stelle schon mal beschrieben.

Es muss erreicht werden das nie 100% CPU Last ereicht werden

Gruss MArtin
BigHardy
Einsteiger
Einsteiger
Beiträge: 119
Registriert: Sonntag 19. Mai 2002, 21:15

Beitrag von BigHardy »

@pOo

Sorry, wenn ich dumm Frage: was ist ein Regen_Diabolisch.ts Stresstest ?

Hardy
Nokia, Sat, Avia600, GTX, 2xIntel, nur Astra.
MTM
Foren-Moderator
Beiträge: 944
Registriert: Freitag 21. Januar 2005, 16:18

Beitrag von MTM »

Hallo,
er meint aus diesem Thread (Wabber-Queue): http://forum.tuxbox-cvs.sourceforge.net ... 665#301665
dieses Testfile: http://rapidshare.de/files/22779326/Reg ... ch.ts.html

MfG,
MTM.
BigHardy
Einsteiger
Einsteiger
Beiträge: 119
Registriert: Sonntag 19. Mai 2002, 21:15

Beitrag von BigHardy »

@MTM

Danke, werde ich mir mal zu Gemüte führen.

Hardy
Nokia, Sat, Avia600, GTX, 2xIntel, nur Astra.
Sebastian2
Einsteiger
Einsteiger
Beiträge: 329
Registriert: Donnerstag 21. Juli 2005, 13:27

Beitrag von Sebastian2 »

Also der film ruckelt doch etwas.

Auch das ORF ruckelt bei mir sehr wenig.

bringt ext2 abhilfe?

Hab ne phillips ;).
Charles Darwin jun.
Erleuchteter
Erleuchteter
Beiträge: 664
Registriert: Donnerstag 24. August 2006, 11:19

Beitrag von Charles Darwin jun. »

ext2 war bei mir die effektivste Änderung von allen...

...deshalb bin ich ja jetzt ein Fan von Palace, BigHardy und Wolgade :wink:
Ciao

CDj
petb
Erleuchteter
Erleuchteter
Beiträge: 785
Registriert: Samstag 6. August 2005, 03:39

Beitrag von petb »

MTM hat geschrieben:Hallo,
er meint aus diesem Thread (Wabber-Queue): http://forum.tuxbox-cvs.sourceforge.net ... 665#301665
dieses Testfile: http://rapidshare.de/files/22779326/Reg ... ch.ts.html
MfG,
MTM.
Hi,

bin der meinung das das File "einen" echten Fehler in der Mitte hat, das sollte normal sein, wenns da kurz klemmt.
Sonst sollte das Ding laufen.
(Habs allerdings nur per nfs abgespielt, nicht per IDE, da ich noch keins habe.)
Bye
PetB
1 x DBOX2 Phillips, 1 x DBOX2 Nokia, 1 x DBOX2 Sagem, 100er Gibertini (Astra / Hotbird), NFS Server