Lagu

Trek audio

Untuk pemilihan trek audio, Web Receiver SDK menyediakan class AudioTracksManager yang menyederhanakan dan menyederhanakan pemilihan trek, memberi Anda kontrol lebih besar serta akses yang lebih baik ke properti, seperti nama, URL, dan bahasa. Class ini paling baik digunakan dalam pengendali peristiwa untuk peristiwa cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

API menyediakan berbagai cara untuk membuat kueri dan memilih trek audio aktif. Berikut adalah contoh cara memilih jalur yang akan aktif dengan menentukan ID-nya:

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();

Class AudioTracksManager juga menyediakan metode getActiveTrack().

Berikut adalah contoh cara memilih trek audio pertama untuk bahasa tertentu, dalam hal ini bahasa Inggris:

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();

Class AudioTracksManager juga menyediakan metode getTracksByLanguage(language) yang menampilkan semua jalur untuk bahasa yang ditentukan.

Kode bahasa audio diambil dari manifes media dan harus mengikuti RFC 5646. Kode bahasa dapat disajikan dalam nomenklatur 2 karakter (seperti "es", "en" atau "de"), atau nomenklatur 4 karakter (seperti "en-us", "es-es" atau "fr-ca").

Jika manifes media mengikuti standar kode bahasa yang berbeda, aplikasi Penerima Web harus mengonversinya menjadi kode bahasa yang sesuai dengan RFC 5646. Web Receiver SDK menyediakan pencegat EDIT_AUDIO_TRACKS untuk melakukan modifikasi:

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();

Saat memutar melalui jeda iklan, pilihan trek audio apa pun, seperti bahasa, yang dibuat sebelum jeda akan tetap ada setelah jeda untuk konten yang sama, meskipun iklan menggunakan bahasa yang berbeda.

Teks tertutup (subtitel)

Untuk pemilihan trek teks tertutup, Web Receiver SDK menyediakan class TextTracksManager yang menyederhanakan dan menyederhanakan pemilihan trek, memberi Anda kontrol lebih besar serta akses yang lebih baik ke properti, seperti nama, URL, dan bahasa.

Class TextTracksManager paling baik digunakan di pengendali peristiwa untuk peristiwa cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

Pemilihan teks tertutup di Web Receiver SDK disederhanakan dan disederhanakan dengan bagian SDK lainnya.

API ini mendukung pengontrolan WebVTT, TTML, dan CEA-608.

Class TextTracksManager menyediakan berbagai cara untuk membuat kueri dan memilih trek teks tertutup agar aktif. Berikut adalah contoh cara memilih jalur pertama yang akan aktif dengan menentukan ID-nya:

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();

Class TextTracksManager juga menyediakan metode getActiveTracks().

Berikut adalah contoh cara memilih trek teks pertama untuk bahasa tertentu:

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();

Class TextTracksManager juga menyediakan metode getTracksByLanguage(language) yang menampilkan semua jalur untuk bahasa yang ditentukan.

Kode bahasa teks diambil dari manifes media dan harus mengikuti RFC 5646. Kode bahasa dapat disajikan dalam nomenklatur 2 karakter (seperti "es", "en" atau "de"), atau nomenklatur 4 karakter (seperti "en-us", "es-es" atau "fr-ca").

Jika manifes media mengikuti standar kode bahasa yang berbeda, aplikasi Penerima Web harus mengonversi permintaan masuk ke standar tersebut. Permintaan ini, seperti perintah suara, menggunakan kode bahasa RFC 5646. Web Receiver SDK menyediakan EDIT_TRACKS_INFO interseptor untuk menerjemahkan permintaan ke standar manifes Anda:

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 memungkinkan developer untuk menambahkan trek teks tertutup baru secara dinamis, dalam hal ini untuk berbagai bahasa dan trek out-of-band, lalu memilih trek untuk menjadi trek aktif baru:

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();

Saat memutar melalui jeda iklan, pilihan trek teks apa pun, seperti bahasa, yang dibuat sebelum jeda akan tetap ada setelah jeda untuk konten yang sama, meskipun iklan menggunakan bahasa yang berbeda.

Teks otomatis

Teks otomatis atau narasi paksa adalah overlay teks yang ditampilkan sehingga penonton dapat memahami kapan bahasa alternatif digunakan atau untuk mengklarifikasi audio. Tidak seperti teks tertutup, penonton tidak perlu mengaktifkan teks paksa karena otomatis dipilih berdasarkan preferensi audio penonton.

Untuk menambahkan teks paksa ke aplikasi Cast, Anda harus menyertakannya sebagai bagian dari manifes. Di manifes Anda, tetapkan peran trek menjadi forced-subtitle. Saat mengambil trek ini, Cask SDK akan mengidentifikasinya sebagai teks paksa. Tidak ada tugas pengirim yang diperlukan karena SDK Cast akan memisahkan teks paksa dan teks tertutup. Artinya, penonton tidak akan dapat memilih teks paksa.

Jika teks tertutup diaktifkan, teks otomatis akan dinonaktifkan agar teks tidak tumpang-tindih. Jika teks tertutup dinonaktifkan dan jika teks otomatis disediakan dalam manifes, teks paksa akan ditampilkan berdasarkan preferensi bahasa audio penonton.