玩了很多Chromecast,找到一个很好的解决隐藏式字幕的方法(在我的项目中,我们已经使用了TTML和分段的WEBVtt - 两者都不起作用“就是这样”)我非常沮丧地发现我最后的亮点想法,不支持手动将“new VTTCue()”添加到textTrack-element。
我已经在这里阅读了很多问题的答案,答案就像这样的“自己动手”Does Chromecast support TTML?。
你可以简单地编写一个Javascript解析器来解析[ttml]文件并将提示添加到你的视频中 javascript中的元素使用addTextTrack()等方法
嗯,确实说这里支持TTML https://github.com/googlecast/CastClosedCaptioning-chrome,但没关系。
因此没有权力 - 谷歌答案(VTTCue的代码替代品)我求助于专业人士 - 如何添加提示不支持VTTCue?
我真正想到的(希望)能起作用:
loadTTML().done(function(ttml){
var cueData = extractCueDataFromTTML(ttml);
var vid = document.querySelector('video');
vid.addTextTrack("subtitles", "sample");
var track = vid.textTracks[0];
cueData.forEach(function(cue){
track.addCue(new VTTCue(cue.start, cue.end, cue.text))
});
})
注意: 这是为了避免将TTML写入WEBVtt转换器或分段WEBVtt组合器
答案 0 :(得分:1)
由于Chrome的更改,即将推出的Chromecast更新需要对正在执行隐藏字幕的接收方应用进行代码更改。
媒体播放器库已修复此更改,因此使用MPL的接收器不会受到API更改的影响。
未使用MPL的开发人员如果支持隐藏式字幕,则需要更改其接收器代码。
在Chrome M37中,TextTrackCue仍然存在,但无法直接实例化。相反,VTTCue需要实例化。
为了处理差异,建议您为接收器使用以下JavaScript polyfill:
window['VTTCue'] = window['VTTCue'] || window['TextTrackCue'];
这确保始终定义VTTCue。填充完成后,需要更新创建提示的代码以创建VTTCue对象而不是TextTrackCue。
答案 1 :(得分:0)
Chromecast不支持VTTCue,因此您必须使用的是TextTrackCue构造函数。 即。
//...
cueData.forEach(function(cue){
track.addCue(new TextTrackCue(cue.start, cue.end, cue.text))
});
//...