Jump to content
Sign in to follow this  
tobiasm767

Arbeitsweise Von Dvbsource

Recommended Posts

tobiasm767

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

Share this post


Link to post
Griga
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 ;)

Share this post


Link to post
tobiasm767
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

Share this post


Link to post
tobiasm767

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?

Share this post


Link to post
Griga

Intern wird natürlich auch die Extension erfasst. Die Anzeige rundet jedoch auf Millisekunden.

Share this post


Link to post
ASe

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.

Share this post


Link to post
tobiasm767
Intern wird natürlich auch die Extension erfasst. Die Anzeige rundet jedoch auf Millisekunden.

 

danke für die schnelle antwort

Share this post


Link to post
Griga
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.

Share this post


Link to post
ASe
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?

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

Sign in to follow this  

×
×
  • Create New...