Jump to content

Arbeitsweise Von Dvbsource


tobiasm767

Recommended Posts

Hallo DVBViewer-Enterwickler,

 

ich arbeite gerade an einem Schnittprogramm für das schneiden von h.264 TS.

Und ich benutzte den DVBViewer gerne um die geschnittenen Transportstreams zu testen, da man sich im DVBSource-Filter die PTS/PCR-Werte anzeigen lassen kann.

Da ich aber bei den geschnittenen TS ab und an immer noch Probleme beim abspielen haben, nun meine Frage:

Welche (Zeitabhängigen)Werte nutzt ihr aus dem Stream um ihn abzuspielen?

Im Moment berechne ich den PCR und PTS/DTS neu.

Nutzt ihr noch was anderes oder habe ich evtl. nur einen Fehler in der Berechnung?

 

mfg

Tobias

Link to comment
Da ich aber bei den geschnittenen TS ab und an immer noch Probleme beim abspielen habe

Welche?

 

Welche (Zeitabhängigen)Werte nutzt ihr aus dem Stream um ihn abzuspielen?

Im wesentlichen die PTS, die für die DirectShow-Samples (-> IMediaSample.SetTime) auf einen streamtime-relativen Wert umgesetzt wird. Die Streamtime ist die DirectShow-Zeitbasis und beginnt nach einem Stop -> Run-Übergang des Filtergraphen mit 0.

 

Basis der Umrechnung ist die Differenz der empfangenen PTS zur DirectShow-Streamtime. Sobald die erste verwertbare Zeitangabe eintrifft (wobei es sich um eine Audio-PTS oder PCR aus dem empfangenen TS handeln kann, je nach dem was zuerst eintrudelt), wird der Offset ermittelt und bleibt im folgenden konstant:

 

Offset = erste empfangene Audio-PTS/PCR - aktuelle DirectShow Streamtime.

 

Im folgenden wird von allen empfangenen DVB-PTS dieser Offset abgezogen, um die streamtime-relative DirectShow-PTS zu erhalten, und weiterhin der auf der Eigenschaftsseite des DVBViewer Filters einstellbare Latency-Wert hinzuaddiert:

 

DirectShow PTS = DVB-PTS - Offset + Latency.

 

Die PCR kommt also nur dann einmalig für die Berechnung des Offsets zum Einsatz, wenn zu dem Zeitpunkt noch keine Audio-PTS vorliegt. DTS wird ignoriert.

 

So ungefähr... die Umrechnungs-Komplikationen, die sich daraus ergeben, dass DirectShow auf einer 10 MHz Clock basiert, die DVB-PTS auf 90 khz und die DVB-PCR auf 27 MHz lasse ich mal außen vor ;)

Link to comment
Welche?

mal kein Bild, mal kein Ton, mal beides nicht >_<

 

hattes es auch schon hinbekommen, dass die neuen TS im DVBViewer liefen aber dann gingen sie nicht im VLC.

Nun gehen sie dort aber nicht mehr im DVBV ;)

 

Also der PCR wird maximal einmal benutzt?

Wie groß muss der Vorsprung vor dem PTS mindestens sein oder ist das egal?

 

Was bedeutet die Fehlermeldung im DVBSource-Filter "Last Error: Graph too late(x)"?

 

und danke für die schnelle Antwort!

 

EDIT:

also habs hin bekommen und die TS laufen nun auch wieder ;)

Aber die Fehlermeldung mit dem "Graph too late(x)" bleibt...

Edited by tobiasm767
Link to comment
  • 10 months later...

hallo,

noch mal eine kleine frage zum dvbsource filter.

 

die pcr-anzeige in der dvbsource filteranzeige, nutzt diese nur die pcr program_clock_reference_base oder auch die program_clock_reference_extension?

Link to comment

Ich hätte auch noch eine (eher entwicklungstechnische) Frage zum DVBSource Filter. Kann man die Größe der an den nächsten DirectShow-Filter im Graphen übergebenen Media Samples im DVBSource-Filter beeinflussen (IMediaSample::GetBuffer, GetActualDataLength) und wenn ja, wie? Die momentane Größe liegt nach meinen Erfahrungen bei ca. 8192 Byte. Hintergrund: Ich arbeite momentan an einem Codec und nutze den DVBSource-Filter als Quellfilter. Mein Codec könnte durchschnittlich deutlich mehr Bytes pro Receive-Call verarbeiten. Danke für die Antwort.

Link to comment
Kann man die Größe der an den nächsten DirectShow-Filter im Graphen übergebenen Media Samples im DVBSource-Filter beeinflussen

Die Anwendung, die ihn verwendet, kann das konfigurieren. Ansonsten nicht.

Link to comment
  • 3 weeks later...
Die Anwendung, die ihn verwendet, kann das konfigurieren. Ansonsten nicht.

Laut DirectShow kann man während der Verbindungsherstellung von Output und Input-Pin die Allocator-Requirements angeben. Bezogen auf meinen Filter habe ich also in meinen Input-Pin gesagt, ich möchte einen größeren Buffer vom DVBSource-Output Pin. Die Methode wird auch vom DVBSource Output Pin aufgerufen, nur haben meine Änderungen leider keine Wirkung auf die MediaSample-Größe. Meinst Du mit Anwendung diejenige, die den Filtergraphen aufbaut, also kein Bestandteil des Filtergraphen ist? Z.B. den DVBViewer?

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