sendrecv/Rust: Only set pipeline to Playing after connecting to the signals
authorSebastian Dröge <sebastian@centricular.com>
Fri, 31 Jul 2020 09:03:46 +0000 (12:03 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 31 Jul 2020 09:03:46 +0000 (12:03 +0300)
Might miss some signal emissions otherwise, especially the
on-negotiation-needed signal.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-examples/-/merge_requests/21>

webrtc/sendrecv/gst-rust/src/main.rs

index 961b97d..904b072 100644 (file)
@@ -142,13 +142,6 @@ impl App {
         // Channel for outgoing WebSocket messages from other threads
         let (send_ws_msg_tx, send_ws_msg_rx) = mpsc::unbounded::<WsMessage>();
 
-        // Asynchronously set the pipeline to Playing
-        pipeline.call_async(|pipeline| {
-            pipeline
-                .set_state(gst::State::Playing)
-                .expect("Couldn't set pipeline to Playing");
-        });
-
         let app = App(Arc::new(AppInner {
             args,
             pipeline,
@@ -228,6 +221,13 @@ impl App {
             }
         });
 
+        // Asynchronously set the pipeline to Playing
+        app.pipeline.call_async(|pipeline| {
+            pipeline
+                .set_state(gst::State::Playing)
+                .expect("Couldn't set pipeline to Playing");
+        });
+
         Ok((app, send_gst_msg_rx, send_ws_msg_rx))
     }