Элемент HTML5 дорожки субтитров не обновляется в видео

Я столкнулся с проблемой, мне нужно динамически изменить источник дорожки субтитров с javascript.

Текущее поведение таково, что никаких изменений не происходит, а старые субтитры продолжают отображаться.

Это HTML:

<video style="width: 50%;" class="m-5" id="vid" controls>
      <track src="oldPath.vtt" id="subtitleTrack" label="English" kind="subtitles" srclang="en" default />
</video>

Это Javascript:

let subtitleTrack = document.getElementById("subtitleTrack");

function subtitleEdited(newTrackPath) {
  //....
  subtitleTrack.src = newTrackPath;
  //....
}

Мне нужно, чтобы после изменения источника дорожки новые подписи загружались непосредственно в видео.

Я попытался загрузить видео еще раз, но ничего не вышло, добавив video.load() после смены источника трека.


Обновить

После дальнейшего исследования проблема, похоже, связана с проблемами кеширования. Мне нужно, чтобы новый путь был таким же старым (путь имеет новые обновления локально), но браузер берет свою копию из кеша, не обновляя ее из локальных файлов. __

Второе обновление

Спасибо за ответ @Terry.

Я попытался добавить к источнику управление версиями, но ничего не получил.

Проверьте размер ответа. ?v=2 ответ пуст.Скриншот сети

PS Проект электронный. Во всяком случае, не думаю, что это может быть частью проблемы.

2 ответа

Решение

Я не понял проблему.

проблема заключалась в том, что я пытался получить доступ к файлу субтитров, пока другая функция его редактировала. Поэтому я добавил обратный вызов, чтобы предотвратить это.

А также, применив ответ @Terry, чтобы добавить этот запрос для очистки кеша.

Теперь он работает после применения вышеуказанных изменений.

Как вы упомянули в своих комментариях (и в своем обновленном вопросе), вы используете точно такой же путь трека. Вместо этого браузер будет выполнять выборку из кеша, поскольку путь к файлу не изменился: хорошей идеей будет просто добавить строку запроса, блокирующую кеш, вsrc атрибут, чтобы браузер игнорировал кеш:

let subtitleTrack = document.getElementById("subtitleTrack");

function subtitleEdited(newTrackPath) {
  //....
  subtitleTrack.src = newTrackPath + '?t=' + new Date().getTime();
  //....
}

Конечно, если вам удобнее использовать шаблонные литералы, это может быть более читаемым:

subtitleTrack.src = `${newTrackPath}?t=${new Date().getTime()}`;
Другие вопросы по тегам