diff --git a/src/media/audio/opensl/audio_player.cpp b/src/media/audio/opensl/audio_player.cpp
index 2294ce222d459312366ab8557dfa3ec36f50e8ba..6de31b0711545e9d244941bcf14497bbcac7a41e 100644
--- a/src/media/audio/opensl/audio_player.cpp
+++ b/src/media/audio/opensl/audio_player.cpp
@@ -170,6 +170,7 @@ AudioPlayer::AudioPlayer(jami::AudioFormat sampleFormat,
 AudioPlayer::~AudioPlayer()
 {
     JAMI_DBG("Destroying OpenSL playback stream");
+    std::lock_guard<std::mutex> lk(m_);
 
     // destroy buffer queue audio player object, and invalidate all associated interfaces
     if (playerObjectItf_) {
@@ -192,6 +193,7 @@ AudioPlayer::setBufQueue(AudioQueue* playQ, AudioQueue* freeQ)
 bool
 AudioPlayer::start()
 {
+    std::lock_guard<std::mutex> lk(m_);
     JAMI_DBG("OpenSL playback start");
     SLuint32 state;
     SLresult result = (*playItf_)->GetPlayState(playItf_, &state);
@@ -227,6 +229,7 @@ void
 AudioPlayer::stop()
 {
     JAMI_DBG("OpenSL playback stop");
+    std::lock_guard<std::mutex> lk(m_);
     SLuint32 state;
 
     SLresult result = (*playItf_)->GetPlayState(playItf_, &state);