diff --git a/src/media/audio/audio_input.cpp b/src/media/audio/audio_input.cpp
index bd06c1bbbc6b78959c63960148d44aa61a2dd064..62af583b8cd00722f4ab933fcc02f0dc7a9c0d2b 100644
--- a/src/media/audio/audio_input.cpp
+++ b/src/media/audio/audio_input.cpp
@@ -102,9 +102,8 @@ AudioInput::readFromDevice()
     if (not samples)
         return;
 
-    //if (muteState_) // audio is muted, set samples to 0
-    //    micData_.reset();
-    // TODO handle mute
+    if (muteState_)
+        libav_utils::fillWithSilence(samples->pointer());
 
     std::lock_guard<std::mutex> lk(fmtMutex_);
     if (bufferFormat != format_)
diff --git a/src/media/audio/audio_sender.cpp b/src/media/audio/audio_sender.cpp
index 9981141a7e38c0fc55a19e0212e385288e5f35cb..af5c9f5c7291e34866e70ea5df75f10a2b6d49ab 100644
--- a/src/media/audio/audio_sender.cpp
+++ b/src/media/audio/audio_sender.cpp
@@ -113,6 +113,7 @@ void
 AudioSender::setMuted(bool isMuted)
 {
     muteState_ = isMuted;
+    audioInput_->setMuted(isMuted);
     audioEncoder_->setMuted(isMuted);
 }