音轨
对于音轨选择,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”)。
如果媒体清单遵循其他语言代码标准,则 Web
接收器应用需要将其转换为符合 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
类提供了各种方式来查询和选择已关闭
才能激活字幕轨道。以下示例展示了如何选择第一首曲目
使其变为有效状态:
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”)。
如果媒体清单遵循其他语言代码标准,则 Web
接收器应用需要将任何传入的请求转换为该标准。这些
请求(例如语音指令)使用 RFC 5646 语言代码。Web 接收器
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 会
来区分强制字幕和可选字幕这意味着,观看者不会
就可以选择强制字幕
启用字幕后,系统会停用强制字幕 图片说明重叠何时关闭字幕以及强制显示字幕 则根据视频字幕, 观看者的音频语言偏好设置