1

玩了很多 Chromecast 以找到一个很好的隐藏式字幕解决方案(在我的项目中,我们已经使用 TTML 和分段 WEBVtt - 两者都不能“按原样”工作)我非常惊讶地发现我的最后一个好主意,不支持手动将“new VTTCue()”添加到 textTrack 元素。

我在这里阅读了很多问题的答案,其中的答案类似于“自己动手”,比如这个Chromecast 支持 TTML 吗?.

您可以简单地编写一个 Javascript 解析器来解析 [ttml] 文件,并使用 addTextTrack() 等方法在 javascript 中将提示添加到您的视频元素

好吧,它确实说这里支持 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 组合器

4

2 回答 2

1

由于 Chrome 的变化,即将对 Chromecast 进行的更新将需要对正在执行隐藏式字幕的接收器应用程序进行代码更改。

媒体播放器库对更改进行了修复,因此使用 MPL 的接收器不会受到 API 更改的影响。

不使用 MPL 的开发人员如果支持隐藏式字幕,则需要更改其接收器代码。

在 Chrome M37 中,TextTrackCue 仍然存在,但不能直接实例化。相反,VTTCue 需要被实例化。

为了处理差异,建议您的接收器使用以下 JavaScript polyfill:

window['VTTCue'] = window['VTTCue'] || window['TextTrackCue'];

这可确保始终定义 VTTCue。一旦 polyfill 就位,需要更新创建提示的代码以创建 VTTCue 对象而不是 TextTrackCue。

于 2014-08-05T16:58:22.653 回答
0

Chromecast 不支持 VTTCue,因此您必须使用 TextTrackCue 构造函数。IE

//...
cueData.forEach(function(cue){
    track.addCue(new TextTrackCue(cue.start, cue.end, cue.text))
});
//...
于 2014-08-05T06:53:44.147 回答