Javascript 画布视频字幕的动态定时文本跟踪
我已经研究和试验了我的大脑。我已经构建了一个工作应用程序,它使用HTML5画布来播放视频,并通过一个网页(一个游戏,某种程度上)与用户交互。工作起来很有魅力,但我想在视频中添加字幕,使其更容易访问。我甚至似乎都无法加载WebVTT文件,我已经通过尝试网络上的示例达到了伏都教编程的阶段,但没有取得任何进展。我试图将应用程序浓缩到最低限度,希望有人能提供一些关于我做错了什么的见解 当我点击画布时,视频播放,“…等待提示更改事件…”消息在播放时保持不变,然后在完成后转到“视频完成…重新加载以重试”消息(通过要求重新加载页面以重试测试来保持简单),因此基本机制似乎正在运行。它永远不会进入文本轨迹的“load”函数(永远不会显示“…loaded text track…”),并且永远不会调用updateSubtitle()函数。如果插入trackElement.readyStatus()调用,它总是返回0(毫不奇怪)。作为进一步说明,如果我添加一个Javascript 画布视频字幕的动态定时文本跟踪,javascript,html,html5-canvas,webvtt,Javascript,Html,Html5 Canvas,Webvtt,我已经研究和试验了我的大脑。我已经构建了一个工作应用程序,它使用HTML5画布来播放视频,并通过一个网页(一个游戏,某种程度上)与用户交互。工作起来很有魅力,但我想在视频中添加字幕,使其更容易访问。我甚至似乎都无法加载WebVTT文件,我已经通过尝试网络上的示例达到了伏都教编程的阶段,但没有取得任何进展。我试图将应用程序浓缩到最低限度,希望有人能提供一些关于我做错了什么的见解 当我点击画布时,视频播放,“…等待提示更改事件…”消息在播放时保持不变,然后在完成后转到“视频完成…重新加载以重试”消息
testStatus.innerHTML=“…加载的元数据…”“loadedmetadata”侦听器中的code>语句,它确实到达了那里
var canvasContext、videoElement、intervalHandle、testStatus、trackElement;
函数processFrame(){
canvasContext.drawImage(videoElement,193、50、256、194);
}
函数videoEnded(){
clearInterval(间隔句柄);
testStatus.innerHTML=“视频完成…重新加载以重试”;
}
var计数=0;
函数updateSubtitle(事件){
计数=计数+1;
testStatus.innerHTML=“count”+计数;
}
函数clickHandler(事件){
testStatus.innerHTML=“…正在等待提示更改事件…”;
setAttribute(“src”、“start.ogg”);
videoElement.load();
intervalHandle=setInterval(processFrame,25);
videoElement.play();
}
函数init(){
var canvasElement,textTrack;
canvasElement=document.createElement(“canvas”);
videoElement=document.createElement(“视频”);
videoElement.addEventListener(“loadedmetadata”,函数(){
trackElement=document.createElement(“track”);
trackElement.kind=“字幕”;
trackElement.label=“英语”;
trackElement.srclang=“en”;
trackElement.src=“启动\u en.vtt”;
trackElement.addEventListener(“加载”,函数(){
testStatus.innerHTML=“…加载的文本跟踪…”;
trackElement.mode=“显示”;
});
videoElement.appendChild(trackElement);
trackElement.addEventListener(“cuechange”,updateSubtitle,false);
});
var mainDiv=document.getElementById(“arghMainDiv”);
setAttribute(“id”、“mediaScreen”);
canvasElement.width=640;
canvasElement.height=480;
第一个孩子;
if(mainDiv.hasChildNodes()){
firstChild=mainDiv.firstChild;
mainDiv.insertBefore(canvasElement,第一个孩子);
}否则{
firstChild=mainDiv.appendChild(canvasElement);
}
testStatus=document.createElement(“p”);
setAttribute(“id”、“testStatus”);
mainDiv.insertBefore(testStatus,firstChild);
testStatus.innerHTML=“单击画布进行测试”;
canvasContext=canvasElement.getContext('2d');
canvasElement.addEventListener(“单击”,clickHandler);
videoElement.addEventListener(“结束”,videoEnded);
}
#fatalError{
颜色:红色;
}
#阿格迈迪夫{
文本对齐:居中;
}
#媒体屏幕{
边框:5px实心#303030;
左边距:自动;
右边距:自动;
显示:块;
游标:默认值;
}
TextTrack对象的问题