video js: Как получить фактический текст субтитров при 'cuechange' - PullRequest
0 голосов
/ 03 августа 2020

Я использую видео js со следующим кодом:

player.addRemoteTextTrack({ src: 'http://[somepath/to/vtt]' })

(я проверил, что на вкладке «Сеть» в chrome отображается запрос на файл VTT и звук.)

А затем:

const textTrack = player.textTracks()[0]
textTrack.addEventListener('cuechange', () => {
  const activeCue = textTrack.activeCues[0]
  console.log(activeCue.text, activeCue.startTime, activeCue.endTime)
})

cuechange срабатывает во время воспроизведения, но атрибут text не содержит фактического текста субтитров, но вместо этого выглядит как источник файла .m3u8. startTime и endTime реплики кажутся правильными.

Я думаю, что мне что-то не хватает, но я пытаюсь получить фактический текст инициированной реплики субтитров, но вместо этого смотрю вот так:

{"bandwidth":296728,"resolution":{"width":640,"height":268},"codecs":"avc1.42c015,mp4a.40.2","byteLength":319224,"uri":"https://...... (and so on)

1 Ответ

0 голосов
/ 04 августа 2020

Хорошо. Надеюсь, это поможет кому-то другому. Это немного сбивает с толку, но похоже, что происходит.

После того, как I addRemoteTextTrack(), player.textTracks().length становится 2.

  • Один из них - kind=metadata
  • Другой - kind=subtitles (тот, который я явно добавил)

Я слушал kind=metadata cuechange, предполагая, что удаленно добавленный трек был единственным в списке треков, и он срабатывает в нужное время на видео, даже без я загружаю удаленную текстовую дорожку. Я думаю, это означает, что в загружаемом потоке есть какая-то дорожка metadata для встроенных ключевых точек.

Когда я добавляю удаленную дорожку, попытка прослушивания дорожки kind=subtitle не кажется чтобы запустить событие cuechange, но я думаю, что это из-за видео js приоритета трека . Ни на одном из треков не было mode=showing, поэтому события cuechange запускались только для одного с приоритетом (первый элемент в массиве списка треков ... metadata один).

Решение состоит в том, чтобы просто добавить mode=showing к треку, который я явно добавляю для придания ему приоритета:

player.addRemoteTextTrack({
  src: 'http://[somepath/to/vtt]',
  mode: 'showing'
})

Теперь это позволяет мне прослушивать элемент списка треков, где kind=subtitle, и получать фактический текст

...