diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index c11d83f430c7b8658a72432d3aa90e49a7c8e748..c29d6123084cb592fe1f76ad1aa9c9f2d5f61f29 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -272,7 +272,7 @@ MediaDecoder::decode(VideoFrame& result)
     auto frame = result.pointer();
     int frameFinished = 0;
     ret = avcodec_send_packet(decoderCtx_, &inpacket);
-    if (ret < 0) {
+    if (ret < 0 && ret != AVERROR(EAGAIN)) {
         return ret == AVERROR_EOF ? Status::Success : Status::DecodeError;
     }
     ret = avcodec_receive_frame(decoderCtx_, frame);
@@ -343,7 +343,7 @@ MediaDecoder::decode(const AudioFrame& decodedFrame)
 
     int frameFinished = 0;
         ret = avcodec_send_packet(decoderCtx_, &inpacket);
-        if (ret < 0)
+        if (ret < 0 && ret != AVERROR(EAGAIN))
             return ret == AVERROR_EOF ? Status::Success : Status::DecodeError;
 
     ret = avcodec_receive_frame(decoderCtx_, frame);
@@ -393,7 +393,7 @@ MediaDecoder::flush(VideoFrame& result)
     int frameFinished = 0;
     int ret = 0;
     ret = avcodec_send_packet(decoderCtx_, &inpacket);
-    if (ret < 0)
+    if (ret < 0 && ret != AVERROR(EAGAIN))
         return ret == AVERROR_EOF ? Status::Success : Status::DecodeError;
 
     ret = avcodec_receive_frame(decoderCtx_, result.pointer());