Home > Blockchain >  Gstreamer use compositor with shmsrc
Gstreamer use compositor with shmsrc

Time:12-26

I have the a few pipelines that send raw video shmsink like below.

gst-launch-1.0 videotestsrc ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! timeoverlay ! queue ! shmsink socket-path=/tmp/test1 shm-size=20000000 sync=true

gst-launch-1.0 videotestsrc ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! timeoverlay ! queue ! shmsink socket-path=/tmp/test2 shm-size=20000000 sync=true

I am trying to mux the videos using the compositor plugin in another process like this

gst-launch-1.0 shmsrc socket-path=/tmp/test1 is-live=true ! queue ! video/x-raw,format=I420,width=640,height=360 ! compositor name=comp sink_1::xpos=860 ! videoconvert ! autovideosink \
shmsrc socket-path=/tmp/test2 is-live=true ! queue ! video/x-raw,format=I420,width=640,height=360 ! comp.

However I get an assertion error that GST_FORMAT_TIME is not available like below.

ERROR:../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideoaggregator.c:2322:gst_video_aggregator_sink_event: assertion failed: (seg.format == GST_FORMAT_TIME)
Bail out! ERROR:../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideoaggregator.c:2322:gst_video_aggregator_sink_event: assertion failed: (seg.format == GST_FORMAT_TIME)
[1]    268025 abort (core dumped)  GST_DEBUG=4 gst-launch-1.0 shmsrc socket-path=/tmp/test1 is-live=true !

This is all implemented programatically using gstreamer-rs (gstreamer rust).

But I am able to reproduce the same issue running the pipelines above.

Is there a way to manually add GST_FORMAT_TIME?

I tried the videomixer element and have the same issue there. I tried inserting identity sync=true but that doesnt seem to do the trick.

I appreciate any help in this!

Thanks a lot!

CodePudding user response:

It seems to work with do-timestamp=true and an increased shm-size:

gst-launch-1.0 shmsrc socket-path=/tmp/test1 is-live=true do-timestamp=true ! queue ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! compositor name=comp sink_1::xpos=860 ! videoconvert ! autovideosink shmsrc socket-path=/tmp/test2 is-live=true do-timestamp=true ! queue ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! comp.

gst-launch-1.0 videotestsrc ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! timeoverlay ! queue ! shmsink socket-path=/tmp/test1 shm-size=200000000

gst-launch-1.0 videotestsrc do-timestamp=true ! video/x-raw,format=I420,width=640,height=360,framerate=15/1 ! timeoverlay ! queue ! shmsink socket-path=/tmp/test2 shm-size=200000000

however it doesn't seem to be in sync even if adding sync=true.

  • Related