diff --git a/src/media/media_recorder.cpp b/src/media/media_recorder.cpp
index 5731dea951a13a022664166488a7ea228664ecc6..2f77948fca90bf6575807b1d50755c1afaf05d9b 100644
--- a/src/media/media_recorder.cpp
+++ b/src/media/media_recorder.cpp
@@ -71,8 +71,13 @@ struct MediaRecorder::StreamObserver : public Observer<std::shared_ptr<MediaFram
 
     ~StreamObserver()
     {
-        for (auto& obs : observablesFrames_) {
-            obs->detach(this);
+        while (observablesFrames_.size() > 0) {
+            auto obs = observablesFrames_.begin();
+            (*obs)->detach(this);
+            // it should be erased from observablesFrames_ in detach. If it does not happens erase frame to avoid infinite loop.
+            auto it = observablesFrames_.find(*obs);
+            if (it != observablesFrames_.end())
+                observablesFrames_.erase(it);
         }
     };