diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index f19ec1ebc8b85bc1b1c5859b64d95e8932f88310..c2c7ff20f87b7ef615438e05bf4b76514b798b3e 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -120,6 +120,8 @@ VideoRtpSession::restartSender()
         if (videoLocal_)
             videoLocal_->attach(sender_.get());
     }
+
+    setupVideoPipeline();
 }
 
 void VideoRtpSession::startReceiver()
@@ -170,15 +172,7 @@ void VideoRtpSession::start(std::unique_ptr<IceSocket> rtp_sock,
     startSender();
     startReceiver();
 
-    // Setup video pipeline
-    if (conference_)
-        setupConferenceVideoPipeline(*conference_);
-    else if (sender_) {
-        if (videoLocal_)
-            videoLocal_->attach(sender_.get());
-    } else {
-        videoLocal_.reset();
-    }
+    setupVideoPipeline();
 }
 
 void VideoRtpSession::stop()
@@ -211,6 +205,19 @@ void VideoRtpSession::forceKeyFrame()
         sender_->forceKeyFrame();
 }
 
+void
+VideoRtpSession::setupVideoPipeline()
+{
+    if (conference_)
+        setupConferenceVideoPipeline(*conference_);
+    else if (sender_) {
+        if (videoLocal_)
+            videoLocal_->attach(sender_.get());
+    } else {
+        videoLocal_.reset();
+    }
+}
+
 void VideoRtpSession::setupConferenceVideoPipeline(Conference& conference)
 {
     RING_DBG("[call:%s] Setup video pipeline on conference %s", callID_.c_str(),
diff --git a/src/media/video/video_rtp_session.h b/src/media/video/video_rtp_session.h
index 45e0b5c384d7bbba816b0cb44453e439b73e663e..ca469b828f203d49ac2bc65f1ceee19f9bd53392 100644
--- a/src/media/video/video_rtp_session.h
+++ b/src/media/video/video_rtp_session.h
@@ -74,6 +74,7 @@ public:
 
 private:
     void setupConferenceVideoPipeline(Conference& conference);
+    void setupVideoPipeline();
     void startSender();
     void startReceiver();