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);