diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js
index 338b8e6fef..f56fc9648a 100644
--- a/src/components/htmlMediaHelper.js
+++ b/src/components/htmlMediaHelper.js
@@ -171,13 +171,29 @@ define(['appSettings', 'browser', 'events'], function (appSettings, browser, eve
// Appending #t=xxx to the query string doesn't seem to work with HLS
// For plain video files, not all browsers support it either
- var delay = browser.safari ? 2500 : 0;
- if (delay) {
- setTimeout(function () {
- setCurrentTimeIfNeeded(element, seconds);
- }, delay);
- } else {
+
+ if (element.duration >= seconds) {
+ // media is ready, seek immediately
setCurrentTimeIfNeeded(element, seconds);
+ } else {
+ // update video player position when media is ready to be sought
+ var events = ["durationchange", "loadeddata", "play", "loadedmetadata"];
+ var onMediaChange = function(e) {
+ if (element.currentTime === 0 && element.duration >= seconds) {
+ // seek only when video position is exactly zero,
+ // as this is true only if video hasn't started yet or
+ // user rewound to the very beginning
+ // (but rewinding cannot happen as the first event with media of non-empty duration)
+ console.log("seeking to " + seconds + " on " + e.type);
+ setCurrentTimeIfNeeded(element, seconds);
+ events.map(function(name) {
+ element.removeEventListener(name, onMediaChange);
+ });
+ }
+ };
+ events.map(function (name) {
+ element.addEventListener(name, onMediaChange);
+ });
}
}
}
diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js
index 07f39f8340..a153d9a147 100644
--- a/src/components/htmlvideoplayer/plugin.js
+++ b/src/components/htmlvideoplayer/plugin.js
@@ -506,12 +506,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
var seconds = (options.playerStartPositionTicks || 0) / 10000000;
if (seconds) {
val += '#t=' + seconds;
- // update video player position when file is ready
- var onMetadataLoaded = function() {
- elem.removeEventListener("loadedmetadata", onMetadataLoaded);
- elem.currentTime = seconds;
- };
- elem.addEventListener("loadedmetadata", onMetadataLoaded);
}
htmlMediaHelper.destroyHlsPlayer(self);