PTS/DTS clearing in gcc sink pad

Mathieu Duponchelle mathieu at centricular.com
Fri Jan 13 14:24:51 UTC 2023


Hey,

One aspect of the google congestion control algorithm is the pacing and
grouping of packets, see
https://datatracker.ietf.org/doc/html/draft-ietf-rmcat-gcc-02#section-4
:

> When media encoder produces data, this is fed into a Pacer queue.
> The Pacer sends a group of packets to the network every burst_time
> interval.  RECOMMENDED value for burst_time is 5 ms.  The size of a
> group of packets is computed as the product between the target
> bitrate and the burst_time.

The purpose of setting PTS and DTS to None at this point is, to the
best of my knowledge, to make sure that once the element has done the
grouping and decides it is time to send a group of packets, nothing
downstream interferes and delays the rendering according to the
timestamps.

I CC'd Thibault Saunier so that he can confirm that that is the
intention, I remember discussing this with him then, but I can't
remember why we didn't set the current running time as DTS on the
groups of packets when outputting them, it wouldn't make a difference
in practice but would perhaps be more explicit.

To answer your second question, no, I don't think anything will reset
timestamps after the pacer in webrtcsink's pipelines.

Cheers,
Mathieu

On Fri, 2023-01-13 at 22:12 +0800, Jun Xiao via gstreamer-devel wrote:
> Hi Mathieu,
> 
> In gcc/imp.rs, I found the sink pad is doing following:
>   mutbuf.set_pts(None);
>   mutbuf.set_dts(None);
> 
> I am curious what the purpose of this clearing is, and will DTS/PTS
> be re-provisioned by any subsequent element in a pipeline? Could you
> help to elaborate this.
> 
> Thanks,
> Jun


More information about the gstreamer-devel mailing list