트랙

오디오 트랙

오디오 트랙 선택의 경우 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는 강제 자막과 자막을 구분하므로 발신자 작업이 필요하지 않습니다. 즉, 시청자는 강제 자막을 선택할 수 없습니다.

자막이 사용 설정되어 있으면 자막이 중복되지 않도록 강제 자막이 사용 중지됩니다. 자막이 사용 중지된 상태에서 매니페스트에 강제 자막이 제공되는 경우 시청자의 오디오 언어 설정에 따라 강제 자막이 표시됩니다.