rtsp-server: media-factory: Make sure a shared media is actually still usable

Previously it was possible that a shared media was just in the process of being unprepared because the last client disappeared, while another client retrieved it from the cache and then tried to use it. Unless the media was reusable this would've then failed unnecessarily.

To avoid this it is necessary to lock the media directly in gst_rtsp_media_factory_construct() and return a locked media. After locking the cached media it is necessary to check if the media was ever unprepared or is actually reusable and based on that either reuse it or create a new media.

This minimally changes the gst_rtsp_media_factory_construct() API to always return a locked media, and adds a new gst_rtsp_media_can_be_shared() function to check if a media can actually be shared in practice.

Merge request reports