1
0
Fork 0
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:
Luke Pulverenti 2014-06-11 22:38:40 -04:00
parent f977419f95
commit 462766c0db
2 changed files with 94 additions and 16 deletions

View file

@ -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>';

View file

@ -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,