Jump to content

Sourcefilter Interface


erwin

Recommended Posts

Ähm, das ganze ist schon lange in der Pro, GE, TSPlayer und Service eingebaut. Das Posting von Griga ist über ein Jahr alt...

 

Sorry, Datum glatt übersehen.

 

 

Hab noch mal ne OT-Frage. Für mein plugin würde ich gern den DVBSource-Filter als Sourcefilter für ein TS-File einsetzen.

Der Filter hat leider kein IFileSourceFilter-Interface. Absicht - weil ihr so eine Fremdverwendung nicht gern seht? Falls nicht: Wie lade ich das TS-File?

 

mfg erwin

Link to comment
Wie lade ich das TS-File?

Gar nicht :) Die Anwendung muss die Datei öffnen, in einem separaten Thread lesen und die Daten dem passend konfigurierten DVBSource zuschieben. Alles über ein spezielles Interface weitab von bekannten DirectShow-Mitteln, das flexibel genug ist, um den DVBViewer Filter als Live- und Datei-Quellfilter verwenden zu können.

Link to comment

Wow!

Das Kerngeschäft des DVBSource-Filters ist der TS-Livestream. Der Dateifilter wird da nicht zusätzlich hineingewurschtelt sondern einfach davor gesetzt. Was nicht passt, wird passend gemacht! Genialitäten aus dem Hause DVBViewer!

 

Ich bastele seit geraumer Zeit an einem (RAM-)Ringpuffer basierten Timeshift-Plugin. Für ein par Goodies setze ich z.Z. den Haali-Media-Splitter ein. Angesichts meines eigentlich mißbräuchlichen Einsatzes dieses Quellfilters funktioniert auch alles ganz passabel. Aus 2 Gründen würde ich gern den DVBSource-Filter verwenden:

 

1. Warum sollte sich der Anwender einen zusätzlichen Quellfilter installieren, wenn er doch den DVBSource schon hat?

 

2. Ohne den Haali-Machern zu nah treten zu wollen, würde ich doch beide Filter hinsichtlich der Robustheit bezüglich nicht ganz so intakter TS-Streams vergleichen, insbesondere so wie ich sie verwende.

 

 

Alles über ein spezielles Interface weitab von bekannten DirectShow-Mitteln, das flexibel genug ist, um den DVBViewer Filter als Live- und Datei-Quellfilter verwenden zu können.

 

Diese spezielle Interface, welches aus einem File gelesene TS-Streams - live - einspielt, weckt bei mir jetzt

_Will haben_ Gefühle und ergibt jetzt einen 3. Punkt.

 

3. Zur Zeit unterschiebe ich dem Haali über IFileSourceFilter::Load mehr oder weniger gekonnt von Hinten durch die Brust einen TS-LIVESTREAM - kein TS-File. Ähnlich wollte ich es eigentlich mit dem DVBSource machen. Mit der Kenntnis euren Spezialinterfaces - wow sind ja ganz neue Perspektiven!

 

mfg erwin

Link to comment
Nur mal interessehalber: Wie löst du denn dieses Problem?

 

Etwas weiter unten hat erwin gepostet ;-)

 

Die Auffahrunfälle von read und write pointer konnte ich natürlich auch nicht aus der Welt schaffen. Aber die Wahrscheinlichkeit ihres Auftretens sowie deren Auswirkungen auf ein tolerable Maß begrenzen. Ich für meinen Teil kann mit diesen Macken leben und schiebe eben im Fall des Falles den Schieber ein Stückchen weiter. Muß halt nicht alles perfekt sein. Aus eurer Sicht sieht das natürlich anderes aus. Ich kann mir gut vorstellen was hier im Forum geschähe wenn ihr sowas anbieten würdet..

 

mfg erwin

Link to comment
Ähm... und wie war das bei dir noch mal? Du programmierst mit Delphi?

 

Leider nicht aktiv. C++ und C#. Aber wenn Du an Delphi-Code-Snippets denkst. Ist mir auch recht.

 

 

mfg erwin

Link to comment
Nur mal interessehalber: Wie löst du denn dieses Problem?

 

 

So jetzt da mehr Zeit noch ein par Infos:

 

Fall 1) - read pointer errreicht write pointer

(die Datenrate der wiedergegebenen Aufzeichnung ist im Mittel höher als die zur Zeit aufgezeichnete )

Ist nichts Neues. Habt ihr auch jetzt schon: read pointer bleibt einfach stehen. End-of-File

 

 

Fall 2) - write pointer erreicht read pointer

(die Datenrate der Aufzeichnung zur Zeit ist im Mittel höher als die Wiedergegebene )

 

- alle wandernden Pointer wrappen am Pufferende zum Pufferanfang

- Wenn der write pointer das Pufferende erreicht, wird er an den Pufferanfang gesetzt

- Wenn der write pointer den (logischen) Dateianfang (der liegt Anfangs am Pufferanfang und wandert dann durch den Puffer) erreicht, schiebt er den (logischen) Dateianfang vor sich her.

- Wenn der (logische) Dateianfang den read pointer erreicht, schiebt er den read pointer vor sich her. Hier liegt die von Griga erwähnte Crux: das gibt Bildaussetzer und Ruckler.

 

 

Gegenmaßnahmen:

 

- der (logische) Dateianfang (auch wenn er mitten innerhalb des Puffers liegt) entspricht immer der Sliderposition ganz links

 

d.h. da der Grund für die Artefakte der wandernde (logische) Dateianfang mit dem dann verschobenen read pointer ist:

 

- die Bildaussetzer und Ruckler haben links die größte Wahrscheinlichkeit. Diese Wahrscheinlichkeit nimmt dann von links nach rechts kontinuierlich ab. Hier ist die Wahrscheinlichkeit des ersten Auftretens der Ruckler gemeint soll heissen wenn an einer Position des Sliders keine Artefakte auftreten werden auch rechts davon keine Auftreten. Was ist also zu tun? Slider nicht ganz so weit in die linke Ecke, d.h. eben nicht ganz soweit zurückspulen.

 

- zusätzlich wird der read Pointer bei Bewegungen des Sliders (auch wenn dieser an den linken Rand der Slidebar geht) NIE an den (logischen) Dateianfang gesetzt sondern immer einige Megabyte danach. Das gibt Spielraum für statistische Schwankungen der Datenrate und dem read Pointer einnen gewissen Vorsprung vor dem evt. schiebenden (logische) Dateianfang.

 

mfg erwin

 

PS: Vielleicht sollten die Admins hieraus ein neues Topic machen da nun doch sehr Entwickler spezifisch

Edited by erwin
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...