mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2025-01-22 08:58:15 +00:00
4cc2498c24
In `webrtcsink`, we terminate a session by setting the session's pipeline to `Null` like this: ```rust pipeline.call_async(|pipeline| { [...] pipeline.set_state(gst::State::Null); [...] // the following cvar is awaited in unprepare() cvar.notify_one(); }); ``` However, `pipeline.call_async` keeps a ref on the pipeline until it's done, which means the `cvar` is notified before `pipeline` is actually 'disposed', which happens in a different thread than `unprepare`'s. [`gst_rtp_bin_dispose`] releases some resources when the pipeline is unrefed. In some cases, those resources are actually released after the main thread has returned, leading various issues. This commit uses tokio runtime's `spawn_blocking` instead, which allows owning and disposing of the pipeline before the `cvar` is notified. [`gst_rtp_bin_dispose`]: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-good/gst/rtpmanager/gstrtpbin.c#L3108 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1225> |
||
---|---|---|
.. | ||
aws | ||
hlssink3 | ||
ndi | ||
onvif | ||
raptorq | ||
reqwest | ||
rtp | ||
webrtc | ||
webrtchttp |