diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp
index 6de31b0711545e9d244941bcf14497bbcac7a41e..4946290eacfd27fbc5be4eaea3098824499adc7f 100644
--- a/src/media/audio/opensl/audio_player.cpp
+++ b/src/media/audio/opensl/audio_player.cpp
@@ -67,7 +67,8 @@ AudioPlayer::processSLCallback(SLAndroidSimpleBufferQueueItf bq)
         }
     }
 
-    callback_();
+    if (callback_)
+        callback_();
 
     while (playQueue_->front(&buf) && devShadowQueue_.push(buf)) {
         if ((*bq)->Enqueue(bq, buf->buf_, buf->size_) != SL_RESULT_SUCCESS) {
@@ -230,6 +231,7 @@ AudioPlayer::stop()
 {
     JAMI_DBG("OpenSL playback stop");
     std::lock_guard<std::mutex> lk(m_);
+    callback_ = {};
     SLuint32 state;
 
     SLresult result = (*playItf_)->GetPlayState(playItf_, &state);
diff --git a/src/media/audio/opensl/audio_recorder.cpp b/src/media/audio/opensl/audio_recorder.cpp
index 97d0416a2532992c1e744a6f8e05c489ec02bc79..3f00df441ff48953778d47610d24c7ba0a429080 100644
--- a/src/media/audio/opensl/audio_recorder.cpp
+++ b/src/media/audio/opensl/audio_recorder.cpp
@@ -54,7 +54,8 @@ AudioRecorder::processSLCallback(SLAndroidSimpleBufferQueueItf bq)
         /*if (devShadowQueue_.size() == 0) {
             (*recItf_)->SetRecordState(recItf_, SL_RECORDSTATE_STOPPED);
         }*/
-        callback_();
+        if (callback_)
+            callback_();
     } catch (const std::exception& e) {
         JAMI_ERR("processSLCallback exception: %s", e.what());
     }
@@ -250,6 +251,8 @@ AudioRecorder::stop()
 
     result = (*recItf_)->SetRecordState(recItf_, SL_RECORDSTATE_STOPPED);
     SLASSERT(result);
+    callback_ = {};
+
     result = (*recBufQueueItf_)->Clear(recBufQueueItf_);
     SLASSERT(result);