mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-11-22 19:41:00 +00:00
webrtcsink: don't panic if input CAPS are not supported
If a user constrained the supported CAPS, for instance using `video-caps`: ```shell gst-launch-1.0 videotestsrc ! video/x-raw,format=I420 ! x264enc \ ! webrtcsink video-caps=video/x-vp8 ``` ... a panic would occur which was internally caught without the user being informed except for the following message which was written to stderr: > thread 'tokio-runtime-worker' panicked at net/webrtc/src/webrtcsink/imp.rs:3533:22: > expected audio or video raw caps: video/x-h264, [...] <br> > note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace The pipeline kept running. This commit converts the panic into an `Error` which bubbles up as an element `StreamError::CodecNotFound` which can be handled by the application. With the above `gst-launch`, this terminates the pipeline with: > [...] ERROR webrtcsink net/webrtc/src/webrtcsink/imp.rs:3771:gstrswebrtc:: > webrtcsink:👿:BaseWebRTCSink::start_stream_discovery_if_needed::{{closure}}:<webrtcsink0> > Error running discovery: Unsupported caps: video/x-h264, [...] <br> > ERROR: from element /GstPipeline:pipeline0/GstWebRTCSink:webrtcsink0: > There is no codec present that can handle the stream's type. <br> > Additional debug info: <br> > net/webrtc/src/webrtcsink/imp.rs(3772): gstrswebrtc::webrtcsink:👿:BaseWebRTCSink:: > start_stream_discovery_if_needed::{{closure}} (): /GstPipeline:pipeline0/GstWebRTCSink:webrtcsink0: > Failed to look up output caps: Unsupported caps: video/x-h264, [...] <br> > Execution ended after 0:00:00.055716661 <br> > Setting pipeline to NULL ... Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1540>
This commit is contained in:
parent
3fc38be5c4
commit
542030fd82
1 changed files with 1 additions and 1 deletions
|
@ -3530,7 +3530,7 @@ impl BaseWebRTCSink {
|
||||||
let is_video = match sink_caps.structure(0).unwrap().name().as_str() {
|
let is_video = match sink_caps.structure(0).unwrap().name().as_str() {
|
||||||
"video/x-raw" => true,
|
"video/x-raw" => true,
|
||||||
"audio/x-raw" => false,
|
"audio/x-raw" => false,
|
||||||
_ => panic!("expected audio or video raw caps: {sink_caps}"),
|
_ => anyhow::bail!("Unsupported caps: {}", discovery_info.caps),
|
||||||
};
|
};
|
||||||
|
|
||||||
codecs
|
codecs
|
||||||
|
|
Loading…
Reference in a new issue