diff --git a/src/media/audio/opensl/opensllayer.cpp b/src/media/audio/opensl/opensllayer.cpp
index 9766ff94699496e6cc3be9ebac03e438064a7c8a..e687ad4bf55356221dac0dd5fa21d527b95a5ebe 100644
--- a/src/media/audio/opensl/opensllayer.cpp
+++ b/src/media/audio/opensl/opensllayer.cpp
@@ -44,7 +44,6 @@ namespace jami {
 OpenSLLayer::OpenSLLayer(const AudioPreference& pref)
     : AudioLayer(pref)
 {
-    initAudioEngine();
 }
 
 // Destructor
@@ -57,8 +56,12 @@ void
 OpenSLLayer::startStream(AudioDeviceType stream)
 {
     using namespace std::placeholders;
+    if (engineObject_)
+        initAudioEngine();
+
     std::lock_guard<std::mutex> lock(mutex_);
     JAMI_WARN("Start OpenSL audio layer");
+
     if (stream == AudioDeviceType::PLAYBACK) {
         if (not player_) {
             try {
@@ -181,8 +184,6 @@ OpenSLLayer::shutdownAudioEngine()
 {
     JAMI_DBG("Stopping OpenSL");
     stopAudioCapture();
-    freeRecBufQueue_.clear();
-    recBufQueue_.clear();
 
     if (player_) {
         player_->stop();
@@ -192,10 +193,6 @@ OpenSLLayer::shutdownAudioEngine()
         ringtone_->stop();
         ringtone_.reset();
     }
-    freePlayBufQueue_.clear();
-    playBufQueue_.clear();
-    freeRingBufQueue_.clear();
-    ringBufQueue_.clear();
 
     // destroy engine object, and invalidate all associated interfaces
     JAMI_DBG("Shutdown audio engine");
@@ -205,6 +202,13 @@ OpenSLLayer::shutdownAudioEngine()
         engineInterface_ = nullptr;
     }
 
+    freeRecBufQueue_.clear();
+    recBufQueue_.clear();
+    freePlayBufQueue_.clear();
+    playBufQueue_.clear();
+    freeRingBufQueue_.clear();
+    ringBufQueue_.clear();
+
     startedCv_.notify_all();
     bufs_.clear();
 }