오디오 트랙
오디오 트랙 선택의 경우 Web Receiver SDK는 트랙 선택을 간소화하고 간소화하는 AudioTracksManager
클래스를 제공하므로 이름, URL, 언어와 같은 속성을 더 효과적으로 제어하고 더 효과적으로 액세스할 수 있습니다. 이 클래스는 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
클래스를 제공하여 이름, URL 및 언어와 같은 속성에 대한 더 세밀한 제어와 액세스를 제공합니다.
TextTracksManager
클래스는 cast.framework.events.EventType.PLAYER_LOAD_COMPLETE
이벤트의 이벤트 핸들러에서 사용하는 것이 가장 좋습니다.
웹 수신기 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는 이러한 트랙을 선택할 때 강제 자막으로 식별합니다. Cast SDK는 강제 자막과 자막을 구분하므로 발신자 작업이 필요하지 않습니다. 즉, 시청자는 강제 자막을 선택할 수 없습니다.
자막이 사용 설정되어 있으면 자막이 중복되지 않도록 강제 자막이 사용 중지됩니다. 자막이 사용 중지된 상태에서 매니페스트에 강제 자막이 제공되는 경우 시청자의 오디오 언어 설정에 따라 강제 자막이 표시됩니다.