[Bug 788340] Dynamically reconfigure pipeline in PLAY based on transports

GStreamer (GNOME Bugzilla) bugzilla at gnome.org
Thu Oct 19 13:09:58 UTC 2017


https://bugzilla.gnome.org/show_bug.cgi?id=788340

--- Comment #11 from Sebastian Dröge (slomo) <slomo at coaxion.net> ---
(In reply to Patricia Muscalu from comment #7)
> (In reply to Sebastian Dröge (slomo) from comment #2)
>  > @@ +2181,3 @@
> > +
> > +      if (gst_rtsp_stream_is_complete (stream)) {
> > +        complete = TRUE;
> > 
> > Shouldn't it only be considered complete once *all* streams are complete?
> 
> But what if not all media streams are active (<=> media contains two streams
> but only one is requested). The missing part here is, to make sure that all
> active streams are complete before performing a seek on media pipeline. Do
> you agree?

You know from the SETUPs that happened before PLAY/RECORD which streams are
requested, and all those need to be complete. Or not?

(In reply to Patricia Muscalu from comment #9)
> (In reply to Patricia Muscalu from comment #7)
> > (In reply to Sebastian Dröge (slomo) from comment #2)
> >  > @@ +2181,3 @@
> > > +
> > > +      if (gst_rtsp_stream_is_complete (stream)) {
> > > +        complete = TRUE;
> > > 
> > > Shouldn't it only be considered complete once *all* streams are complete?
> > 
> > But what if not all media streams are active (<=> media contains two streams
> > but only one is requested). The missing part here is, to make sure that all
> > active streams are complete before performing a seek on media pipeline. Do
> > you agree?
> 
> The problem here is to find a mapping between active transports (session
> media has this information) and active streams.

Can we expose that information easily?


(In reply to Patricia Muscalu from comment #8)
> (In reply to Sebastian Dröge (slomo) from comment #6)
> > > > @@ +611,3 @@
> > > >    priv = media->priv;
> > > >  
> > > > +  data.position = G_MAXINT64;
> > > > 
> > > > Why this change? Generally, -1 is returned (GST_CLOCK_TIME_NONE) if nothing
> > > > else can be found
> > > 
> > > GST_CLOCK_TIME_NONE is not a proper initial value because we are actually
> > > using MIN function now.
> > 
> > G_MAXINT64 is not ideal either though, for position queries in TIME format
> > values above that are valid too). I'm not sure what to suggest here though,
> > the position/duration query API is broken by the usage of int64 but actually
> > using uint64 for TIME format.
> 
> The initial value of data.position is set to G_MAXINT64 and if the query
> position fails (<=> data.ret == FALSE), the position is set to
> GST_CLOCK_TIME_NONE.

Ok :)


(In reply to Patricia Muscalu from comment #10)
> (In reply to Sebastian Dröge (slomo) from comment #2)
> > @@ +2678,3 @@
> > +    g_object_set (priv->appsink[0], "async", FALSE, "sync", FALSE, NULL);
> > +  if (priv->appsink[1])
> > +    g_object_set (priv->appsink[1], "async", FALSE, "sync", FALSE, NULL);
> > 
> > Why don't we do this right after creation of the sinks?
> > Why for both indizes?
> 
> In the current implementation on master:
> * in case of udp && tcp: both indices are used
> * in case of tcp: the async and sync flags are set to false only for rtcp
> appsink.

The RTCP sinks are always sync=async=false, the RTP sinks are always
sync=async=true or not?

-- 
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list