字幕轨道 HTML5 元素不在视频中更新
Subtitle Track HTML5 Element Don't Update in Video
我遇到了问题,我需要从 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
响应为空。
P.S。项目是 electron project.Anyways,我不认为它可能是问题的一部分。
正如您在评论(和更新后的问题)中提到的,您使用的是完全相同的轨道路径。这将导致浏览器改为从缓存中获取,因为文件路径没有改变:一个好主意是简单地向 src
属性添加一个缓存破坏查询字符串,这样浏览器将忽略缓存:
let subtitleTrack = document.getElementById("subtitleTrack");
function subtitleEdited(newTrackPath) {
//....
subtitleTrack.src = newTrackPath + '?t=' + new Date().getTime();
//....
}
当然,如果您更习惯使用模板字面量,这可能更适合阅读:
subtitleTrack.src = `${newTrackPath}?t=${new Date().getTime()}`;
我想念这个问题。
问题是我试图访问字幕文件,而其他功能正在编辑它。所以我添加了一个回调来防止这种情况。
并且还通过应用@Terry 的回答来添加缓存破坏查询。
应用上述更改后,它现在可以正常工作了。
我遇到了问题,我需要从 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
响应为空。
P.S。项目是 electron project.Anyways,我不认为它可能是问题的一部分。
正如您在评论(和更新后的问题)中提到的,您使用的是完全相同的轨道路径。这将导致浏览器改为从缓存中获取,因为文件路径没有改变:一个好主意是简单地向 src
属性添加一个缓存破坏查询字符串,这样浏览器将忽略缓存:
let subtitleTrack = document.getElementById("subtitleTrack");
function subtitleEdited(newTrackPath) {
//....
subtitleTrack.src = newTrackPath + '?t=' + new Date().getTime();
//....
}
当然,如果您更习惯使用模板字面量,这可能更适合阅读:
subtitleTrack.src = `${newTrackPath}?t=${new Date().getTime()}`;
我想念这个问题。
问题是我试图访问字幕文件,而其他功能正在编辑它。所以我添加了一个回调来防止这种情况。
并且还通过应用@Terry 的回答来添加缓存破坏查询。
应用上述更改后,它现在可以正常工作了。