mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
chapter downloading fixes
This commit is contained in:
parent
f977419f95
commit
462766c0db
2 changed files with 94 additions and 16 deletions
|
@ -36,6 +36,16 @@
|
||||||
return video;
|
return video;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.getCurrentSubtitleStream = function () {
|
||||||
|
return self.getSubtitleStream(self.currentSubtitleStreamIndex);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.getSubtitleStream = function (index) {
|
||||||
|
return self.currentMediaSource.MediaStreams.filter(function (s) {
|
||||||
|
return s.Type == 'Subtitle' && s.Index == index;
|
||||||
|
})[0];
|
||||||
|
};
|
||||||
|
|
||||||
self.remoteFullscreen = function () {
|
self.remoteFullscreen = function () {
|
||||||
|
|
||||||
var videoControls = $("#videoControls");
|
var videoControls = $("#videoControls");
|
||||||
|
@ -151,7 +161,62 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
self.setSubtitleStreamIndex = function (index) {
|
self.setSubtitleStreamIndex = function (index) {
|
||||||
self.changeStream(self.getCurrentTicks(), { SubtitleStreamIndex: index });
|
|
||||||
|
if (!self.supportsTextTracks()) {
|
||||||
|
self.changeStream(self.getCurrentTicks(), { SubtitleStreamIndex: index });
|
||||||
|
self.currentSubtitleStreamIndex = index;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var currentStream = self.getCurrentSubtitleStream();
|
||||||
|
|
||||||
|
var newStream = self.getSubtitleStream(index);
|
||||||
|
|
||||||
|
if (!currentStream && !newStream) return;
|
||||||
|
|
||||||
|
var selectedTrackElementIndex = -1;
|
||||||
|
|
||||||
|
if (currentStream && !newStream) {
|
||||||
|
|
||||||
|
if (!currentStream.IsTextSubtitleStream) {
|
||||||
|
|
||||||
|
// Need to change the transcoded stream to remove subs
|
||||||
|
self.changeStream(self.getCurrentTicks(), { SubtitleStreamIndex: -1 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!currentStream && newStream) {
|
||||||
|
|
||||||
|
if (newStream.IsTextSubtitleStream) {
|
||||||
|
selectedTrackElementIndex = index;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Need to change the transcoded stream to add subs
|
||||||
|
self.changeStream(self.getCurrentTicks(), { SubtitleStreamIndex: index });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.setCurrentTrackElement(selectedTrackElementIndex);
|
||||||
|
self.currentSubtitleStreamIndex = index;
|
||||||
|
};
|
||||||
|
|
||||||
|
self.setCurrentTrackElement = function (index) {
|
||||||
|
|
||||||
|
var textStreams = self.currentMediaSource.MediaStreams.filter(function (s) {
|
||||||
|
return s.Type == 'Subtitle' && s.IsTextSubtitleStream;
|
||||||
|
});
|
||||||
|
|
||||||
|
var allTracks = video.textTracks; // get list of tracks
|
||||||
|
|
||||||
|
for (var i = 0; i < allTracks.length; i++) {
|
||||||
|
|
||||||
|
var trackIndex = textStreams[i].Index;
|
||||||
|
|
||||||
|
if (trackIndex == index) {
|
||||||
|
allTracks[i].mode = "showing"; // show this track
|
||||||
|
} else {
|
||||||
|
allTracks[i].mode = "disabled"; // hide all other tracks
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange', function (e) {
|
$(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange', function (e) {
|
||||||
|
@ -532,7 +597,7 @@
|
||||||
return currentStream.Type == "Subtitle";
|
return currentStream.Type == "Subtitle";
|
||||||
});
|
});
|
||||||
|
|
||||||
var currentIndex = self.currentSubtitleStreamIndex;
|
var currentIndex = self.currentSubtitleStreamIndex || -1;
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
|
@ -742,7 +807,7 @@
|
||||||
mediaSourceId: mediaSource.Id
|
mediaSourceId: mediaSource.Id
|
||||||
};
|
};
|
||||||
|
|
||||||
if (selectedSubtitleStream && !selectedSubtitleStream.IsTextSubtitleStream) {
|
if (selectedSubtitleStream && (!selectedSubtitleStream.IsTextSubtitleStream || !self.supportsTextTracks())) {
|
||||||
baseParams.SubtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
|
baseParams.SubtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -842,19 +907,21 @@
|
||||||
|
|
||||||
html += '<source type="video/mp4" src="' + mp4VideoUrl + '" />';
|
html += '<source type="video/mp4" src="' + mp4VideoUrl + '" />';
|
||||||
|
|
||||||
var textStreams = subtitleStreams.filter(function (s) {
|
if (self.supportsTextTracks()) {
|
||||||
return s.IsTextSubtitleStream;
|
var textStreams = subtitleStreams.filter(function (s) {
|
||||||
});
|
return s.IsTextSubtitleStream;
|
||||||
|
|
||||||
for (var i = 0, length = textStreams.length; i < length; i++) {
|
|
||||||
|
|
||||||
var textStream = textStreams[i];
|
|
||||||
var textStreamUrl = ApiClient.getUrl('Videos/' + item.Id + '/' + mediaSource.Id + '/Subtitles/' + textStream.Index + '/Stream.vtt', {
|
|
||||||
});
|
});
|
||||||
|
|
||||||
var defaultAttribute = i.Index == mediaSource.DefaultSubtitleStreamIndex ? ' default' : '';
|
for (var i = 0, length = textStreams.length; i < length; i++) {
|
||||||
|
|
||||||
html += '<track data-index="' + textStream.Index + '" kind="subtitles" src="' + textStreamUrl + '" srclang="' + (textStream.Language || 'und') + '"' + defaultAttribute + '>';
|
var textStream = textStreams[i];
|
||||||
|
var textStreamUrl = ApiClient.getUrl('Videos/' + item.Id + '/' + mediaSource.Id + '/Subtitles/' + textStream.Index + '/Stream.vtt', {
|
||||||
|
});
|
||||||
|
|
||||||
|
var defaultAttribute = i.Index == mediaSource.DefaultSubtitleStreamIndex ? ' default' : '';
|
||||||
|
|
||||||
|
html += '<track kind="subtitles" src="' + textStreamUrl + '" srclang="' + (textStream.Language || 'und') + '"' + defaultAttribute + '>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html += '</video>';
|
html += '</video>';
|
||||||
|
|
|
@ -218,6 +218,17 @@
|
||||||
$(self).trigger('positionchange', [state]);
|
$(self).trigger('positionchange', [state]);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.supportsTextTracks = function () {
|
||||||
|
|
||||||
|
// Does not support changing tracks via mode property
|
||||||
|
if ($.browser.mozilla) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For now, until perfected
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
self.canPlayVideoDirect = function (mediaSource, videoStream, audioStream, subtitleStream, maxWidth, bitrate) {
|
self.canPlayVideoDirect = function (mediaSource, videoStream, audioStream, subtitleStream, maxWidth, bitrate) {
|
||||||
|
|
||||||
if (!mediaSource) {
|
if (!mediaSource) {
|
||||||
|
@ -243,7 +254,7 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subtitleStream && subtitleStream.IsGraphicalSubtitleStream) {
|
if (subtitleStream && (subtitleStream.IsGraphicalSubtitleStream || !self.supportsTextTracks())) {
|
||||||
console.log('Transcoding because subtitles are required');
|
console.log('Transcoding because subtitles are required');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -257,7 +268,7 @@
|
||||||
console.log('Transcoding because bitrate is too high');
|
console.log('Transcoding because bitrate is too high');
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var extension = (mediaSource.Container || '').toLowerCase();
|
var extension = (mediaSource.Container || '').toLowerCase();
|
||||||
|
|
||||||
// m4v's with high profile failing in chrome
|
// m4v's with high profile failing in chrome
|
||||||
|
@ -1123,7 +1134,7 @@
|
||||||
function sendProgressUpdate() {
|
function sendProgressUpdate() {
|
||||||
|
|
||||||
var state = self.getPlayerStateInternal(currentMediaElement, self.currentItem, self.currentMediaSource);
|
var state = self.getPlayerStateInternal(currentMediaElement, self.currentItem, self.currentMediaSource);
|
||||||
|
|
||||||
var info = {
|
var info = {
|
||||||
QueueableMediaTypes: state.NowPlayingItem.MediaType,
|
QueueableMediaTypes: state.NowPlayingItem.MediaType,
|
||||||
ItemId: state.NowPlayingItem.Id,
|
ItemId: state.NowPlayingItem.Id,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue