2015-10-13 40 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記錄。需要更新文檔以使這些信息容易找到。