GStreamer multi pipeline time sync
Peter Biro
pettair at gmail.com
Sun Dec 6 23:00:48 UTC 2020
Hi,
I refactored my project based on Tim's examples, which works perfectly when the pipeline contains only a video source, although I found one strange thing in the behaviour:
the blocking of a pad work only in cases when there is a "tee" between the source and the blocked element, otherwise it will block the other parts of the pipeline (so I added on extra(unnecessary?) tee for the audio). Is this expected or I do something not properly?
But when I add an audio source things are getting a bit more complicated.
So I added the audio and moved the cacheing/buffering queue after the muxer () . But this way it generates invalid file on the output (VLC show this kind of issues: "ps warning: this does not look like an MPEG PS stream, continuing anyway; ps warning: garbage at input from 509, trying to resync...")
nvarguscamerasrc sensor-id=0 sensor-mode=0
! video/x-raw(memory:NVMM), width=(int)1980, height=(int)1080, format=(string)NV12, framerate=(fraction)20/1
! nvvidconv ! textoverlay name=text_overlay ! video/x-raw,format=I420 ! nvvidconv ! nvv4l2vp8enc ! tee name=video_stream_spilt
audiotestsrc ! vorbisenc ! queue ! file_sink_video_mux.
video_stream_spilt. ! queue ! webmmux name=file_sink_video_mux ! tee name=muxed_video_stream_spilt
muxed_video_stream_spilt. ! queue name=file_sink_queue ! filesink name=file_sink location=/tmp/video_out.webm
muxed_video_stream_spilt. ! fakesink
video_stream_spilt. ! rtpvp8pay mtu=1400 ! appsink name=app_sink
I tried to google around, but I not found any similar examples so I guess I cannot "buffer" muxed packets with a queue. Is this approach fundamentally wrong?
After this I tried to add queues before the mux, but this way the pipeline stops when Im unblocking the pads.
nvarguscamerasrc sensor-id=0 sensor-mode=0
! video/x-raw(memory:NVMM), width=(int)1980, height=(int)1080, format=(string)NV12, framerate=(fraction)20/1
! nvvidconv ! textoverlay name=text_overlay ! video/x-raw,format=I420 ! nvvidconv ! nvv4l2vp8enc ! tee name=video_stream_spilt
audiotestsrc ! vorbisenc ! tee name=audio_stream_spilt
audio_stream_spilt. ! queue name=file_sink_audio_queue ! file_sink_video_mux.
audio_stream_spilt. ! fakesink
video_stream_spilt. ! queue name=file_sink_video_queue ! webmmux name=file_sink_video_mux ! filesink name=file_sink location=/tmp/video_out.webm
video_stream_spilt. ! rtpvp8pay mtu=1400 ! appsink name=app_sink
I will attach the debug output, the corresponding part comes after the "startRecording: dcd - startRecording" log message. Im sure that im doing something wrong, since I think this should work.
Do you have any idea what am I doing wrong?
Thank you!
> On 2020. Dec 2., at 21:27, Peter Biro <pettair at gmail.com> wrote:
>
> Hi Tim.
>
> Thanks for the examples!
>
> I think I tried something similar before but as I remember when I set the state on the filesink (to be able to change the location) to GST_STATE_NULL it was propagated trough the pipeline and it caused glitches in the streaming.
>
> As I see you do kind of the same here with the 'autovideosink' and I guess you are not experience such thing since you block the pad on 'vrecq' to block?
>
> Bests,
> Peter
>
>> On 2020. Dec 2., at 0:30, Tim Müller <tim at centricular.com> wrote:
>>
>> Hi Peter,
>>
>> I have an example for save-to-file-with-backlog here:
>>
>> https://people.freedesktop.org/~tpm/code/test-backlog-recording-h264.c
>>
>> or (rtp variant):
>>
>> https://people.freedesktop.org/~tpm/code/test-backlog-recording-h264-rtp.c
>>
>> for what it's worth.
>>
>> And audiomixer element can produce silence samples if it operates in
>> live mode, which will happen if the upstream source is a live/capture
>> source or you force it into live mode with a dummy audiotestsrc is-
>> live=true branch.
>>
>> Alternatively .. ! interaudiosink interaudiosrc ! ...
>>
>> Cheers
>> Tim
>>
>> --
>> Tim Müller, Centricular Ltd - http://www.centricular.com
>>
>> _______________________________________________
>> 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/20201207/09f21569/attachment-0002.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: gst.log
Type: application/octet-stream
Size: 378240 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201207/09f21569/attachment-0001.obj>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20201207/09f21569/attachment-0003.htm>
More information about the gstreamer-devel
mailing list