RTSP server maxes out 1 CPU core

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

RTSP server maxes out 1 CPU core

wilson1994
Hi,

I'm trying to use gst-rtsp-server to transfer an uncompressed video stream
with a high frame rate (>80 fps) over a dedicated network to 1 client.

My pipeline setup is quite simple and looks like this:

    gst_rtsp_media_factory_set_launch (factory, "( appsrc name=source !
rtpgstpay name=pay0 )");

I notice that the bottleneck is that I max out 1 core of my CPU, while the
others are not in use, which prevents me from achieving the required frame
rate.

A solution would be to insert a queue to divide the pipeline into multiple
threads, but 90% of the pipeline is unexposed to me as it's integrated in
the gst-rtsp-server.

Therefore I wonder if there is some way I can spread out the workload of
gst-rtsp-server over multiple cores?




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: RTSP server maxes out 1 CPU core

Nicolas Dufresne-5


Le jeu. 31 oct. 2019 14 h 40, wilson1994 <[hidden email]> a écrit :
Hi,

I'm trying to use gst-rtsp-server to transfer an uncompressed video stream
with a high frame rate (>80 fps) over a dedicated network to 1 client.

My pipeline setup is quite simple and looks like this:

    gst_rtsp_media_factory_set_launch (factory, "( appsrc name=source !
rtpgstpay name=pay0 )");

I notice that the bottleneck is that I max out 1 core of my CPU, while the
others are not in use, which prevents me from achieving the required frame
rate.

A solution would be to insert a queue to divide the pipeline into multiple
threads, but 90% of the pipeline is unexposed to me as it's integrated in
the gst-rtsp-server.

Therefore I wonder if there is some way I can spread out the workload of
gst-rtsp-server over multiple cores?

Simple thing to try is to add a queue (thread) after the payloader, and name is pay0 (even if it not a payloader, it should still work. That will split the load of packetization (which will likely copy the stream) in its own thread. That being said, adding buffer list support to this payloader, and sub-buffer support may be required for such a high bitrate case.





--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: RTSP server maxes out 1 CPU core

wilson1994
Hi,

Thank you for your response, I didn't know I could also have a queue as pay0
!

Can you please tell me what you mean with buffer list support and sub buffer
list support in the payloader, and some general pointers on how to achieve
that?




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: RTSP server maxes out 1 CPU core

Nicolas Dufresne-5


Le lun. 4 nov. 2019 10 h 25, wilson1994 <[hidden email]> a écrit :
Hi,

Thank you for your response, I didn't know I could also have a queue as pay0
!

Can you please tell me what you mean with buffer list support and sub buffer
list support in the payloader, and some general pointers on how to achieve
that?

Are you saying you are looking forward working on this inside GStreamer code ? It's not related to your code, but upstream code (just to clarify). GstBufferList is a container for multiple GstBuffer that let you send multiple GstBuffer in one call. Many elements in the RTP stack is still missing for that, which is required for high bitrate.





--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: RTSP server maxes out 1 CPU core

wilson1994
Hi,

I'm sorry, I thought you meant some parameters to be tweaked in the
pipeline.

I ended up achieving the desired frame rate by:

* adding queue after the rtpgstpay
* Increasing the MTU size of rtpgstpay (1400 by default, while max udp
packet size is 65,535 bytes). Taking an MTU of 65000 brought down the CPU
load by more than 50%.

So pipeline looks like this:

    gst_rtsp_media_factory_set_launch (factory, "( appsrc name=source !
rtpcustompay mtu=65000 ! queue max-buffer-size=4 name=pay0 )");




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: RTSP server maxes out 1 CPU core

Nicolas Dufresne-5
Le mardi 05 novembre 2019 à 02:26 -0600, wilson1994 a écrit :

> Hi,
>
> I'm sorry, I thought you meant some parameters to be tweaked in the
> pipeline.
>
> I ended up achieving the desired frame rate by:
>
> * adding queue after the rtpgstpay
> * Increasing the MTU size of rtpgstpay (1400 by default, while max udp
> packet size is 65,535 bytes). Taking an MTU of 65000 brought down the CPU
> load by more than 50%.

That's fair workaround, good catch. Of course these large packet will
get split on most network, but probably not a huge problem in that
context.

>
> So pipeline looks like this:
>
>     gst_rtsp_media_factory_set_launch (factory, "( appsrc name=source !
> rtpcustompay mtu=65000 ! queue max-buffer-size=4 name=pay0 )");
>
>
>
>
> --
> Sent from: http://gstreamer-devel.966125.n4.nabble.com/
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel