隐藏字幕-Chromecast字幕支持



为了找到一个好的隐藏字幕解决方案,我反复使用Chromecast(在我的项目中,我们已经使用了TTML和分段WEBVtt,这两种方法都不能"按原样"工作),我发现我最后一个好主意,手动将"new VTTCue()"添加到textTrack元素中,却不受支持,这让我非常沮丧。

我在这里读到了很多问题的答案,答案都是"自己动手",比如Chromecast支持TTML吗?。

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

嗯,它确实说这里支持TTML IShttps://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组合器

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

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

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

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

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

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

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

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

//...
cueData.forEach(function(cue){
    track.addCue(new TextTrackCue(cue.start, cue.end, cue.text))
});
//...

最新更新