Я использую сервис Google для создания подписей в реальном времени для своей прямой трансляции. подписи имеют следующий формат: {начало: 0, расшифровка: "привет мир", конец: 15}
Теперь проблема в том, что эти объекты перекрываются. таким образом, если длительность первого составляет от 0 до 15, второго - от 12 до 23. Также может быть так, что первый имеет 3 строки данных, а второй объект заголовка имеет 2 строки данных. Я хочу убедиться, что без потерь показывается максимум 2 строки заголовка.
Я попытался разбить объект заголовка на два меньших объекта, но возникает проблема разделения длительности, возникает проблема перекрытия .. становится все грязно Мне было интересно, сталкиваются ли люди с подобной проблемой при работе с подписями? Пожалуйста, ведите меня. Я не смог найти решение в сети.
Я использую следующий код для обновления заголовков шоу журнала каждую секунду (в данный момент консоль регистрируется в этом коде).
function updateCaptionsText() {
let pastIndex;
let currentIndex;
//captions is an array storing captions objects in sequential order. and gets appended with new caption object every time a new object comes from live transcriptions service.***
// to mark captions as pastIndex whose end time is before current player time to splice them and mark captions as current to show them
if (!isNaN(playerTime) && playerTime > 0) {
for (let i = 0; i < captions.length; i++) {
if (captions[i].start <= playerTime) {
if (captions[i].end <= playerTime) {
pastIndex = i;
} else {
currentIndex = i;
}
} else {
break;
}
}
}
if (!isNaN(pastIndex) && pastIndex >= 0) {
captions.splice(0, pastIndex + 1);
}
if(!isNaN(pastIndex)){
currentIndex = currentIndex - pastIndex - 1;
}
let captionText: string = "";
if (!isNaN(currentIndex) && currentIndex >= 0) {
captions.slice(0, currentIndex + 1).forEach((caption) => {
captionText += `${caption.transcript}\n`;
});
}
console.log(`{captionText}`);
}
что за код выше он использует время окончания WRT player для определения заголовков, которые больше не требуются, и удаляет их каждую секунду из массива, если таковые имеются. Затем он выбирает из массива на основе текущего времени и времени окончания подписи, которые должны быть показаны сейчас (в основном те, чье время начала меньше времени игрока и время окончания еще не пришло), и отображает их. Мне нужна лучшая логика c, чтобы убедиться, что, скажем, 30 слов за раз показывают независимо от всего. пример данных здесь: https://pastebin.com/FAnVPvj0 (может не иметь перекрывающихся данных).