Как ограничить заголовки двумя строками? - PullRequest
0 голосов
/ 01 апреля 2020

Я использую сервис 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 (может не иметь перекрывающихся данных).

...