How to synchronize buffer timestamp across two gstreamer pipeline(appsink,appsrc, rtspserver)

Jake Zhang zjpseudo at gmail.com
Fri Jun 17 02:45:34 UTC 2016


Thanks for quick reply Nicolas.

I am still pretty new with Gstreamer so please bear with me if my questions
sounds trivial to you.
My appsrc has been in live mode and my v4l2src has been set as
do-timestamp. Like I said, the pipeline is running without any issue, but I
really need make sure the time-stamp of the same buffer on two pipelines
are the same, as we need use PTS a frame tag to do some other processing on
the RTSP client side .


On Thu, Jun 16, 2016 at 9:27 PM, Nicolas Dufresne <nicolas at ndufresne.ca>
wrote:

> So,
>
> Assuming you didn't do any mistake, what you have now is buffer in
> pipeline 2 that are really late. To be able to play those the way you do
> you'll have to set pipeline 1 latency on your pipeline 2 appsrc. As you
> have multiple branches in pipeline 1, you'll be to implement do-latency
> signal, so you submit on appsink early,
>
How can I submit buffers earlier? Should I just subtract latency of
pipeline1 from bastime of pipeline2 to make sure the buffer is early
enough?

> and render late enough to be on sync whit pipeline 2 sink. Make sure
> appsrc is set to live mode.
>
How the gstreamer will drop a buffer?

Reading from the documentation, I learned that the buffer will be processed
if the buffer running time = pipeline running time.
pipeline running time = clock time - basetime
buffer time = PTS -segment.start (which is zero in my case).
So I guess, I should either change the basetime of pipeline2 to offset the
pipeline1 latency or change the segment.start time?

Thanks again.



Le 16 juin 2016 5:21 PM, "Jake Zhang" <zjpseudo at gmail.com> a écrit :
>
> Greetings,
>
> I have been working on this for a while but still have no luck to get this
> working. My pipeline can be simplified as below:
>
> pipeline1:
> v4l2src -> tee -> x264enc -> appsink1
>              ->  appsink2
>
> RTSP server pipeline2:
> appsrc -> omxh264enc -> rtph264pay
>
> Pipeline 1 have other processing unit and I will need pull buffers from
> appsink2 and push those buffers into appsrc of RTSP server.
> My RTSP server part of implementation is very similar to test-appsrc.c of
> gst-rtsp-server 1.6.4.
>
> The buffer I got from appsink already has their own PTS and to get RTSP
> pipeline2 running, I have to re-stamp the buffer PTS the exactly same way
> as test-appsrc.c (set ctx->timestamp=0 and increment based of buffer
> duration) otherwise, the RTSP server will not get running.
>
> I have went through the gstreamer manual and I have some basic
> understanding about running time/ base time and stream time
> I have tried below things:
> 1. set the basetime of pipeline2 to be the same as pipeline1
> 2. set the start time of pipeline2 to be GST_CLOCK_TIME_NONE
> 3. make sure the two pipeline is using the same clock.
> 4. I have checked the segment event on the appsrc of pipeline2 and the
> value is as below, and I have tried generate a new segment to appsrc sink
> pad but I have a hard time know how to set the right base and start value.
> //appsrc0:src segment: rate 1 format 3, start: 0:00:00.000000000, stop:
> 99:99:99.999999999, time: 0:00:00.000000000 base: 0:00:00.000000000
>
> Why I have to re-stamp the PTS of the buffer?
> pipeline2 running time = clocktime - basetime of pipeline1, so pipeline2
> should be able to process buffers with original PTS, right?
>
> How I can  retain the original buffer PTS in pipeline2? I guess segment
> event is the right direction to go, but like I said I have not figure out
> how to play with segment to let pipeline2 happy with original PTS.
>
> Thanks in advance for any comments here.
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20160616/f4feeee3/attachment-0001.html>


More information about the gstreamer-devel mailing list