曲目

音軌

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 的語言代碼。網頁 接收端 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 語言代碼。網路接收端 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 收到這些音軌後, 以強製字幕的形式呈現由於 Cast SDK 會 可以分開顯示強製字幕和隱藏式輔助字幕也就是說,觀眾不會 能夠選取強製字幕

啟用隱藏式輔助字幕時,系統會停用強製字幕 造成說明文字重疊關閉隱藏式輔助字幕或採用強製字幕時 那麼系統會根據 觀眾的音訊語言偏好設定。