2015-10-13 51 views
1

双重复标题串在我的自定义投接收器的应用程序,在我的mediaManager.onEditTracksInfo回调,我启用/禁用侧载标题如下:侧载VTT显示在Chromecast

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); 
} 

下面是什么<video>元素看起来就像接收器应用DOM中一样。只要sideloading轨道在onLoad()中加载到mediaManager中,track元素就会添加到DOM,并将src设置为tracks-array中第一个轨道的url。然后,无论何时,只要我使用trackI的activeId调用editTracksInfo,就会将一个新的轨道元素附加到<video> eleement,并且每当我关闭字幕时都会被删除。

<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的显示了两个标题内容相同流。这是一个已知的问题,或者是我的代码做错了什么?它只发生在sideloaded的vtt轨道上。 Sideloaded TTML和嵌入式vtt看起来很好。我检查了sideloaded vtt文件的内容,它没有重复的字幕字符串。

+0

是您添加的第一个轨道元素? –

+0

没有。跟踪元素都由接收器和MPL控制。 无论何时提供activeTrackId以启用字幕 - sideloaded或embedded,并在禁用字幕时被删除,都会添加/删除>。 – codneto

+0

看看https://github.com/googlecast/Cast-Player-Sample;它是我们的参考接收机,不会遇到您提到的问题;它也处理轨道,所以也许看着源头可以给你一个暗示,你在做什么不同。 –

回答

1

所以我终于明白了这一点。很显然,Media Player Library自己处理侧装的VTT轨道。当使用MPL时,在重写的onTraitInfo事​​件处理程序中,我们只需要关注启用/禁用嵌入式TTML/VTT和侧载TTML。在调用默认事件处理程序(onEditTracksInfoOrig)时,负载VTT由MPL自动处理。这也解释了为什么带有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记录。需要更新文档以使这些信息容易找到。