diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp
index f47bd17592ca7dbaa11ca9f1fdbb03f7797d12d4..e34fa381fe9a8114b5c4ebc19d66ac6f6d7e808d 100644
--- a/src/media/media_decoder.cpp
+++ b/src/media/media_decoder.cpp
@@ -73,6 +73,7 @@ MediaDecoder::~MediaDecoder()
 
 int MediaDecoder::openInput(const DeviceParams& params)
 {
+    inputParams_ = params;
     AVInputFormat *iformat = av_find_input_format(params.format.c_str());
 
     if (!iformat)
@@ -192,6 +193,9 @@ MediaDecoder::setupStream(AVMediaType mediaType)
     }
     avcodec_parameters_to_context(decoderCtx_, avStream_->codecpar);
     decoderCtx_->framerate = avStream_->avg_frame_rate;
+    // in case FFmpeg could not find a framerate, fall back to the ones found in openInput
+    if (mediaType == AVMEDIA_TYPE_VIDEO && (decoderCtx_->framerate.num == 0 || decoderCtx_->framerate.den == 0))
+        decoderCtx_->framerate = inputParams_.framerate;
 
     decoderCtx_->thread_count = std::max(1u, std::min(8u, std::thread::hardware_concurrency()/2));
 
diff --git a/src/media/media_decoder.h b/src/media/media_decoder.h
index df051508ca89bd94bd47c16332dbdfc8fc80b0b4..a0f5deada511dc5ab07f8263fecaefbb6971e6b3 100644
--- a/src/media/media_decoder.h
+++ b/src/media/media_decoder.h
@@ -34,6 +34,7 @@
 
 #include "audio/audiobuffer.h"
 
+#include "media_device.h"
 #include "media_stream.h"
 #include "rational.h"
 #include "noncopyable.h"
@@ -57,7 +58,6 @@ struct AudioFormat;
 class RingBuffer;
 class Resampler;
 class MediaIOHandle;
-struct DeviceParams;
 
 class MediaDecoder {
     public:
@@ -117,6 +117,8 @@ class MediaDecoder {
         int64_t startTime_;
         int64_t lastTimestamp_;
 
+        DeviceParams inputParams_;
+
         AudioBuffer decBuff_;
         AudioBuffer resamplingBuff_;