diff --git a/src/components/htmlvideoplayer/plugin.js b/src/components/htmlvideoplayer/plugin.js
index b52b86797..e52ac0ec7 100644
--- a/src/components/htmlvideoplayer/plugin.js
+++ b/src/components/htmlvideoplayer/plugin.js
@@ -584,6 +584,19 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return showTrackOffset;
}
+ function getTextTrack() {
+ var videoElement = self._mediaElement;
+ if (videoElement) {
+ return Array.from(videoElement.textTracks)
+ .find(function(trackElement) {
+ // get showing .vtt textTack
+ return trackElement.mode === 'showing';
+ });
+ } else {
+ return null;
+ }
+ }
+
self.setSubtitleOffset = function(offset) {
var offsetValue = parseFloat(offset);
@@ -592,28 +605,15 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
if (currentAssRenderer) {
updateCurrentTrackOffset(offsetValue);
} else {
- var videoElement = self._mediaElement;
- var mediaStreamTextTracks = getMediaStreamTextTracks(self._currentPlayOptions.mediaSource);
-
- Array.from(videoElement.textTracks)
- .filter(function(trackElement) {
- // get showing .vtt textTacks
- return trackElement.mode === 'showing';
- })
- .forEach(function(trackElement) {
-
- var track = customTrackIndex === -1 ? null : mediaStreamTextTracks.filter(function (t) {
- return t.Index === customTrackIndex;
- })[0];
-
- if (track) {
- offsetValue = updateCurrentTrackOffset(offsetValue);
- setVttSubtitleOffset(trackElement, offsetValue);
- } else {
- console.log("No available track, cannot apply offset : " + offsetValue);
- }
-
- });
+ var trackElement = getTextTrack();
+ // if .vtt currently rendering
+ if (trackElement) {
+ setTextTrackSubtitleOffset(trackElement, offsetValue);
+ } else if (currentTrackEvents) {
+ setTrackEventsSubtitleOffset(currentTrackEvents, offsetValue);
+ } else {
+ console.log("No available track, cannot apply offset: ", offsetValue);
+ }
}
};
@@ -629,16 +629,27 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return relativeOffset;
}
- function setVttSubtitleOffset(currentTrack, offsetValue) {
+ function setTextTrackSubtitleOffset(currentTrack, offsetValue) {
if (currentTrack.cues) {
+ offsetValue = updateCurrentTrackOffset(offsetValue);
Array.from(currentTrack.cues)
.forEach(function(cue) {
cue.startTime -= offsetValue;
cue.endTime -= offsetValue;
});
}
+ }
+ function setTrackEventsSubtitleOffset(trackEvents, offsetValue) {
+
+ if (Array.isArray(trackEvents)) {
+ offsetValue = updateCurrentTrackOffset(offsetValue);
+ trackEvents.forEach(function(trackEvent) {
+ trackEvent.StartPositionTicks -= offsetValue;
+ trackEvent.EndPositionTicks -= offsetValue;
+ });
+ }
}
self.getSubtitleOffset = function() {
@@ -1033,6 +1044,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return;
}
+ self.resetSubtitleOffset();
var item = self._currentPlayOptions.item;
destroyCustomTrack(videoElement);