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

Add vtt and ass subtitle-offset in videoplayer

This commit is contained in:
redSpoutnik 2019-03-30 22:11:39 +01:00
parent 9677981344
commit 91241ceea1
5 changed files with 157 additions and 0 deletions

View file

@ -280,6 +280,7 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
btnFastForward.disabled = true;
btnRewind.disabled = true;
view.querySelector(".btnSubtitles").classList.add("hide");
view.querySelector(".subtitleSyncSliderContainer").classList.add("hide");
view.querySelector(".btnAudio").classList.add("hide");
view.querySelector(".osdTitle").innerHTML = "";
view.querySelector(".osdMediaInfo").innerHTML = "";
@ -295,8 +296,23 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
if (playbackManager.subtitleTracks(player).length) {
view.querySelector(".btnSubtitles").classList.remove("hide");
if(playbackManager.supportSubtitleOffset()) {
var index = playbackManager.getSubtitleStreamIndex(player);
// if there is an external subtitle stream enabled
if(index !== -1 && playbackManager.isSubtitleStreamExternal(index, player)){
// show subtitle sync slider
subtitleSyncSliderContainer.classList.remove("hide");
}else{
// hide subtitle sync slider
subtitleSyncSliderContainer.classList.add("hide");
}
}
} else {
view.querySelector(".btnSubtitles").classList.add("hide");
// hide subtitle sync slider
subtitleSyncSliderContainer.classList.add("hide");
}
if (playbackManager.audioTracks(player).length > 1) {
@ -1008,6 +1024,28 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
if (index !== currentIndex) {
playbackManager.setSubtitleStreamIndex(index, player);
}
return id;
}).then(function (id) {
var index = parseInt(id);
// on subtitle stream change
if (playbackManager.supportSubtitleOffset() && index !== currentIndex) {
/// if there is an external subtitle stream enabled
if (index !== -1 && playbackManager.isSubtitleStreamExternal(index, player)){
// set default offset to '0' (slider's middle value)
var subtitleSyncSliderMiddleValue = 50;
subtitleSyncSlider.value = subtitleSyncSliderMiddleValue.toString();
playbackManager.setSubtitleOffset(subtitleSyncSliderMiddleValue, player);
// show subtitle sync slider
subtitleSyncSliderContainer.classList.remove("hide");
} else {
// hide subtitle sync slider
subtitleSyncSliderContainer.classList.add("hide");
}
}
});
});
}
@ -1146,6 +1184,8 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
var programStartDateMs = 0;
var programEndDateMs = 0;
var playbackStartTimeTicks = 0;
var subtitleSyncSlider = view.querySelector(".subtitleSyncSlider");
var subtitleSyncSliderContainer = view.querySelector(".subtitleSyncSliderContainer");
var nowPlayingVolumeSlider = view.querySelector(".osdVolumeSlider");
var nowPlayingVolumeSliderContainer = view.querySelector(".osdVolumeSliderContainer");
var nowPlayingPositionSlider = view.querySelector(".osdPositionSlider");
@ -1268,6 +1308,21 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
nowPlayingVolumeSlider.addEventListener("touchmove", function () {
playbackManager.setVolume(this.value, currentPlayer);
});
subtitleSyncSlider.addEventListener("change", function () {
playbackManager.setSubtitleOffset(this.value, currentPlayer);
});
subtitleSyncSlider.addEventListener("touchmove", function () {
playbackManager.setSubtitleOffset(this.value, currentPlayer);
});
subtitleSyncSlider.getBubbleHtml = function (value) {
var newOffset = playbackManager.getOffsetFromSliderValue(value);
return '<h1 class="sliderBubbleText">' +
(newOffset > 0 ? "+" : "") + parseFloat(newOffset) + "s" +
"</h1>";
};
nowPlayingPositionSlider.addEventListener("change", function () {
var player = currentPlayer;