I have a Nvidia Xavier AGX that is connected to a 4K video camera streaming uncompressed at 30FPS.
On the AGX, I have several different applications (Linux processes) that need to consume this video.
Because of the very high bandwidth of video-data, I would like to share the video between the applications in a copy-free way. EGLStreams seem perfect for this purpose.
Application A is connected directly to the camera. It is responsible for extracting the video data and publishing it to an EGLStream.
Application B,C and D are not connected to the camera, but would each like to consume the EGLStream for processing.
It would be ideal if all the applications could use GStreamer as the framework to do this. That would require the following architectures:
Application A (simplified):
gst-launch-1.0 nvarguscamerasrc ! ... ! nveglstreamsink
Application B,C,D (simplified):
gst-launch-1.0 nveglstreamsrc ! ... ! appsink
- Is this possible to implement with the currently available GStreamer building blocks supplied by NVidia?
- I am not able to find any way to create an EGLStream Producer using GStreamer?
Any pointers or insight is greatly appreciated!
Do you use Jetapck 4 or Jetpack 5? For Jetpack 4, we would suggest use NvBuffer APIs fo r sharing NvBuffer between processes. Please take a look at
How to share the buffer in process context？ - #11 by DaneLLL
Thanks for the advice. I am using jetpack 5.
Sorry for the late response, have you managed to get issue resolved or still need the support? Thanks
Thanks for following up!
I currently had to revert to gstreamer shmsink/shmsrc. This is not perfectly efficient, but it is the best I have at the moment.
Any ideas of how to share video stream one-to-many between gstreamer processes would be appreciated!
For better advice, you may better tell your case. Please provide details from your camera source with:
# Here assuming /dev/video0 for your 4K camera:
v4l2-ctl -d0 --list-formats-ext
You may also say if you need full video quality or if some compression is affordable.
For using shmsrc/shmink, it may require do-timestamp=1 for shmsink and you would have to manage deletion of the socket depending on if customer pipeline closed later than producer.
Depending on your filesystem, you may also try fifos such as here
You may also try v4l2loopbck.
You may also use RTP/VRAW such as here.
All of these may result in CPU overhead, the amount would depend on your hardware.
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.