1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Changed to non-blocking subtitles

This commit is contained in:
Daniel Hartung 2019-09-12 21:24:16 +02:00
parent a640781d4e
commit ba0d637f91
6 changed files with 64 additions and 56 deletions

View file

@ -200,6 +200,27 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return self._currentSrc;
};
self._fetchQueue = 0;
self.isFetching = false;
function incrementFetchQueue() {
if (self._fetchQueue <= 0) {
self.isFetching = true;
events.trigger(self, "beginFetch");
}
self._fetchQueue++;
}
function decrementFetchQueue() {
self._fetchQueue--;
if (self._fetchQueue <= 0) {
self.isFetching = false;
events.trigger(self, "endFetch");
}
}
function updateVideoUrl(streamInfo) {
var isHls = streamInfo.url.toLowerCase().indexOf('.m3u8') !== -1;
@ -510,20 +531,15 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
} else*/ if (browser.chromecast && val.indexOf('.m3u8') !== -1 && options.mediaSource.RunTimeTicks) {
setTracks(elem, tracks, options.item, options.mediaSource);
return setCurrentSrcChromecast(self, elem, options, val);
}
else if (htmlMediaHelper.enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && val.indexOf('.m3u8') !== -1) {
setTracks(elem, tracks, options.item, options.mediaSource);
return setSrcWithHlsJs(self, elem, options, val);
} else if (options.playMethod !== 'Transcode' && options.mediaSource.Container === 'flv') {
setTracks(elem, tracks, options.item, options.mediaSource);
return setSrcWithFlvJs(self, elem, options, val);
} else {
@ -532,8 +548,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return htmlMediaHelper.applySrc(elem, val, options).then(function () {
setTracks(elem, tracks, options.item, options.mediaSource);
self._currentSrc = val;
return htmlMediaHelper.playWithPromise(elem, onError);
@ -968,8 +982,8 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return fetchSubtitlesUwp(track, item);
}
incrementFetchQueue();
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
var url = getTextTrackUrl(track, item, '.js');
@ -978,15 +992,19 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
xhr.onload = function (e) {
resolve(JSON.parse(this.response));
decrementFetchQueue();
};
xhr.onerror = reject;
xhr.onerror = function (e) {
reject(e);
decrementFetchQueue();
}
xhr.send();
});
}
function setTrackForCustomDisplay(videoElement, track) {
function setTrackForDisplay(videoElement, track) {
if (!track) {
destroyCustomTrack(videoElement);
@ -1267,60 +1285,17 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa
return t.Index === streamIndex;
})[0];
setTrackForDisplay(self._mediaElement, track);
if (enableNativeTrackSupport(self._currentSrc, track)) {
setTrackForCustomDisplay(self._mediaElement, null);
if (streamIndex !== -1) {
setCueAppearance();
}
} else {
setTrackForCustomDisplay(self._mediaElement, track);
// null these out to disable the player's native display (handled below)
streamIndex = -1;
track = null;
}
var expectedId = 'textTrack' + streamIndex;
var trackIndex = streamIndex === -1 || !track ? -1 : mediaStreamTextTracks.indexOf(track);
var modes = ['disabled', 'showing', 'hidden'];
var allTracks = self._mediaElement.textTracks; // get list of tracks
for (var i = 0; i < allTracks.length; i++) {
var currentTrack = allTracks[i];
console.log('currentTrack id: ' + currentTrack.id);
var mode;
console.log('expectedId: ' + expectedId + '--currentTrack.Id:' + currentTrack.id);
// IE doesn't support track id
if (browser.msie || browser.edge) {
if (trackIndex === i) {
mode = 1; // show this track
} else {
mode = 0; // hide all other tracks
}
} else {
if (currentTrack.label.indexOf('manualTrack') !== -1) {
continue;
}
if (currentTrack.id === expectedId) {
mode = 1; // show this track
} else {
mode = 0; // hide all other tracks
}
}
console.log('Setting track ' + i + ' mode to: ' + mode);
currentTrack.mode = modes[mode];
}
}
function updateTextStreamUrls(startPositionTicks) {