在我的自定义转换接收器应用程序中,在我的mediaManager.onEditTracksInfo回调中,我启用/禁用侧载标题如下:
mediaManager.onEditTracksInfo = function (event) {
if (!event.data || !event.data.activeTrackIds) {
return;
}
// if sideloaded tracks are available, show/hide those
if (sideloadedTracksAvailable) {
updateSideloadedTracksVisibility(event);
} else {
updateEmbeddedTracksVisibility(event);
}
onEditTracksInfoOrig(event);
};
updateSideloadedTracksVisibility = function (data) {
var mediaInformation = mediaManager.getMediaInformation() || {};
// disable currently enabled sideloaded TTML or VTT, if any
mediaPlayer.enableCaptions(false, cast.player.api.CaptionsType.TTML);
mediaPlayer.enableCaptions(false, cast.player.api.CaptionsType.WEBVTT);
enableActiveTracks(data.activeTrackIds, mediaInformation.tracks || []);
}
enableActiveTracks = function (activeTrackIds, tracks) {
// loops over tracks and if requested to be enabled calls
// mediaPlayer.enableCaptions(true, trackType, tracks[i].trackContentId);
}
以下是接收器应用DOM中<video>
元素的外观。一旦侧载轨道加载到onLoad()中的mediaManager中,轨道元素就会被添加到DOM中,其中src设置为tracks-array中第一个轨道的url。然后每当我使用trackI的activeId调用editTracksInfo时,新的track元素将被附加到<video>
元素,并且每当我关闭字幕时都会删除它。
<video id="videoEl" src="blob:http%3A//blob-url-here" cast-captions-879553="true" crossorigin="anonymous">
<track src="http://vtt/url/here/file.vtt" id="1" label="undefined" srclang="en-US" kind="subtitles"></track>
<track src kind="captions"> <!-- this gets added upon enabling a track, and removed when disabling tracks -->
</video>
字幕工作正常但我注意到每当我切换到侧载VTT trackId时,chromecast会显示两个具有相同内容的字幕流。这是一个已知问题还是我的代码做错了什么?它只发生在侧载的vtt轨道上。 Sideloaded TTML和嵌入式vtt看起来很好。我检查了sideloaded vtt文件的内容,它没有重复的字幕字符串。
答案 0 :(得分:1)
所以我终于想通了。显然,媒体播放器库自己处理侧载的VTT轨道。在使用MPL时,在重写的onEditTracksInfo事件处理程序中,我们只需要处理启用/禁用嵌入式TTML / VTT和侧载TTML。在调用默认事件处理程序(onEditTracksInfoOrig)时,MPL会自动处理Sideloaded VTT。这也解释了为什么带有vtt url的<track>
元素会自动附加到<video>
元素。该元素由MPL创建。这导致双重字幕显示,因为我和MPL都启用了VTT轨道。我改变了我的代码如下:
enableActiveTracks = function (activeTrackIds, tracks) {
// loops over tracks and if enable TTML track if requested
if (trackType === 'ttml') {
mediaPlayer.enableCaptions(true, trackType, tracks[i].trackContentId);
}
}
不幸的是,MPL documentation或custom receiver documentation中没有记录这一点。需要更新文档以便于查找此信息。