diff --git a/src/media/media_decoder.cpp b/src/media/media_decoder.cpp index c0ceae9c54b6eebe8aa6acf365ca1139bfffa8ec..05f208dea99f49a21905a9fbc358e660a916749a 100644 --- a/src/media/media_decoder.cpp +++ b/src/media/media_decoder.cpp @@ -579,7 +579,8 @@ MediaDecoder::decode(AVPacket& packet) | AV_ROUND_PASS_MINMAX)); lastTimestamp_ = frame->pts; if (emulateRate_ and packetTimestamp != AV_NOPTS_VALUE) { - auto frame_time = getTimeBase() * (packetTimestamp - avStream_->start_time); + auto startTime = avStream_->start_time == AV_NOPTS_VALUE ? 0 : avStream_->start_time; + rational<double> frame_time = rational<double>(getTimeBase()) * (packetTimestamp - startTime); auto target_relative = static_cast<std::int64_t>(frame_time.real() * 1e6); auto target_absolute = startTime_ + target_relative; if (target_relative < seekTime_) {