Sideloaded VTT在chromecast上显示双重复制的字幕字符串

时间:2015-10-13 08:52:21

标签: chromecast google-cast

在我的自定义转换接收器应用程序中,在我的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文件的内容,它没有重复的字幕字符串。

1 个答案:

答案 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 documentationcustom receiver documentation中没有记录这一点。需要更新文档以便于查找此信息。