So ich habe leider noch 1.7.35; ist aber nicht so wichtig.
Du könntest aber einfach die Dateien transfer.[hc] aus der 1.7.36 zum Testen nehmen.
Zitat
Wenn ich jetzt in cDevice::PlayVideo bzw. cDevice::PlayAudio bzw. cDevice::PlayTsAudio
(ich meine meine abgeleitetete Klasse) die Pakete wegwerfe, wenn mein interner Puffer
voll ist, dann habe ich Artefakte bei der Wiedergabe von Aufnahmen.
Du sollst ja auch keine Pakete "wegwerfen", die du noch brauchst.
Wenn dein Puffer voll ist, dann gibt 0 zurück und es wird nochmal versucht. Allerdings musst du das Paket "zeitnah" annehmen, denn es wird nicht beliebig lange versucht. Im Normalfall solltest du das Paket sofort annehmen, daß es mal erst beim zweiten Versuch angenommen wird, sollte schon die ganz große Ausnahme sein.
Zitat
Die Ursache ist, daß cDevice::Poll nicht richtig ausgewertet wird.
In dvbplayer.c wird DevicePoll(Poller, 10); mit 10ms aufgerufen, der Return Wert aber
nicht ausgewertet.
dvbplayer.c hat doch mit dem Transfer-Mode, um den es hier geht, gar nichts zu tun!?
Zitat
Mein Ausgabedevice schläft nur 10ms und damit werden meine Internen Puffer
natürlich sehr schnell bis zum erbrechen voll.
Entweder darf ich in cDevice::Poll länger schlafen oder der VDR sollte den Rückgabewert
auswerten.
Ich glaube, du bringst hier die Wiedergabe einer Aufzeichnung und den Live-Modus durcheinander.
Wird eine Aufzeichnung wiedergegeben, dann stehen die Daten quasi beliebig schnell zur Verfügung, und es ist klar, daß der Puffer eines Ausgabedevices vollläuft. Das ist völlig normal und unschädlich.
Im Live-Modus kommen die Daten vom Sender im Mittel in der Geschwindigkeit, wie sie das Ausgabedevice verarbeiten können muß, um ein Live-Signal in Echtzeit darzustellen. Wäre das Ausgabedevice zu langsam, dann würde sein Puffer auch hier volllaufen, und eine Live-Wiedergabe wäre nicht mehr möglich.
Klaus