音軌
針對音軌選取功能,Web Receiver SDK 提供的 AudioTracksManager
類別可簡化並簡化音軌選取程序,讓您進一步控管屬性,例如名稱、網址和語言。此類別最適合用於 cast.framework.events.EventType.PLAYER_LOAD_COMPLETE
事件的事件處理常式。
這個 API 提供多種查詢和選取現行音軌的方法。以下範例說明如何透過指定 ID 來選取使用中的曲目:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const audioTracksManager = playerManager.getAudioTracksManager();
// Get all audio tracks
const tracks = audioTracksManager.getTracks();
// Choose the first audio track to be active by specifying its ID
audioTracksManager.setActiveById(tracks[0].trackId);
});
context.start();
AudioTracksManager
類別也提供 getActiveTrack()
方法。
以下範例說明如何選取特定語言的第一個音軌 (本例為英文):
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const audioTracksManager = playerManager.getAudioTracksManager();
// Set the first matching language audio track to be active
audioTracksManager.setActiveByLanguage('en');
});
context.start();
AudioTracksManager
類別也提供 getTracksByLanguage(language)
方法,可傳回特定語言的所有音軌。
音訊語言代碼是從媒體資訊清單擷取,因此應遵循 RFC 5646。語言代碼可以連續 2 個字元的字元 (例如「es」、「en」或「de」) 或 4 個字元的字眼 (例如「en-us」、「es-es」或「fr-ca」)。
如果媒體資訊清單遵循不同的語言代碼標準,則網路接收器應用程式必須將其轉換成符合 RFC 5646 標準的語言代碼。Web 依接收器 SDK 提供攔截功能 EDIT_AUDIO_TRACKS
來執行修改作業:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Intercept the EDIT_AUDIO_TRACKS request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_AUDIO_TRACKS, request => {
// write logic to convert language codes here
});
context.start();
如果在廣告插播時間點播放時,所有相同內容中的音軌 (例如語言) 都會留作於相同內容的廣告插播時間點後,即使廣告不同。
隱藏式輔助字幕 (字幕)
針對隱藏字幕軌,Web Receiver SDK 提供 TextTracksManager
類別,可簡化和簡化軌道選取程序,讓您進一步控管屬性,例如名稱、網址和語言。
TextTracksManager
類別最適合用於 cast.framework.events.EventType.PLAYER_LOAD_COMPLETE
事件的事件處理常式。
在 Web Receiver SDK 中,隱藏式輔助字幕是以其他 SDK 的形式簡化及簡化。
這個 API 支援控制 WebVTT、TTML 和 CEA-608。
TextTracksManager
類別提供多種查詢方式,以及選擇啟用的隱藏式字幕軌。以下範例說明如何透過指定 ID 來選取使用中的第一個曲目:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const textTracksManager = playerManager.getTextTracksManager();
// Get all text tracks
const tracks = textTracksManager.getTracks();
// Choose the first text track to be active by its ID
textTracksManager.setActiveByIds([tracks[0].trackId]);
});
context.start();
TextTracksManager
類別也提供 getActiveTracks()
方法。
以下範例說明如何選取特定語言的第一個文字音軌:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
const textTracksManager = playerManager.getTextTracksManager();
// Set the first matching language text track to be active
textTracksManager.setActiveByLanguage('en');
});
context.start();
TextTracksManager
類別也提供 getTracksByLanguage(language)
方法,可傳回特定語言的所有音軌。
文字語言代碼是從媒體資訊清單中擷取,因此應遵循 RFC 5646。語言代碼可以包含 2 個字元的遊詞 (例如「es」、「en」或「de」) 或 4 個字元的遊詞 (例如「en-us」、「es-es」或「fr-ca」)。
如果媒體資訊清單遵循不同的語言代碼標準,則網路接收器應用程式必須將任何傳入要求轉換為該標準。這些要求 (例如語音指令) 會使用 RFC 5646 語言代碼。Web Receiver SDK 提供攔截器 EDIT_TRACKS_INFO
,將要求轉譯成資訊清單的標準:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// intercept the EDIT_TRACKS_INFO request
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.EDIT_TRACKS_INFO, request => {
// write logic to convert language codes here
});
context.start();
這個 API 可讓開發人員動態新增隱藏式字幕軌 (在本例中為不同語言及頻外音軌),然後選取音軌做為新的使用中的測試群組:
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
playerManager.addEventListener(
cast.framework.events.EventType.PLAYER_LOAD_COMPLETE, () => {
// Create text tracks object
const textTracksManager = playerManager.getTextTracksManager();
// Create track 1 for English text
const track1 = textTracksManager.createTrack();
track1.trackContentType = 'text/vtt';
track1.trackContentId = 'http://example.com/en.vtt';
track1.language = 'en';
// Create track 2 for Spanish text
const track2 = textTracksManager.createTrack();
const track2Id = track2.trackId;
track2.trackContentType = 'text/vtt';
track2.trackContentId = 'http://example.com/spa.vtt';
track2.language = 'spa';
// Add tracks
textTracksManager.addTracks([track1, track2]);
// Set the first matching language text track to be active
textTracksManager.setActiveByLanguage('en');
});
context.start();
播放廣告插播時,無論內容是否使用不同的語言,在廣告插播時間點進行的所有文字音軌 (例如語言) 都會持續保留。
強製字幕
強製字幕或強制的旁白是疊加的文字,方便觀眾瞭解使用替代語言或釐清音訊的影響。有別於隱藏式輔助字幕,觀眾不需要啟用強製字幕,因為系統會根據觀眾的音訊偏好設定自動選擇字幕。
如要在 Cast 應用程式中加入強製字幕,您必須在資訊清單中加入這個內容。在資訊清單中,將音軌的角色設為 forced-subtitle
。當 Cask SDK 擷取這些音軌時,會將其視為強製字幕。由於 SDK SDK 會分開處理強製字幕和隱藏式輔助字幕,因此您不需要使用任何工具。這表示觀眾無法選取強製字幕。
啟用隱藏式輔助字幕時,系統會停用強製字幕功能,以免字幕遭到重疊。關閉字幕後,如果在資訊清單中提供強製字幕,系統會根據觀眾的音訊語言偏好設定顯示強製字幕。