Bản nhạc

Bản âm thanh

Để lựa chọn bản âm thanh, SDK Web Receiver cung cấp một lớp AudioTracksManager giúp đơn giản hoá và hợp lý hoá việc lựa chọn bản nhạc, giúp bạn có nhiều quyền kiểm soát hơn và có thể truy cập tốt hơn vào các thuộc tính, chẳng hạn như tên, URL và ngôn ngữ. Lớp này được sử dụng tốt nhất trong trình xử lý sự kiện cho sự kiện cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

API này cung cấp nhiều cách để truy vấn và chọn các bản âm thanh đang hoạt động. Dưới đây là ví dụ về cách chọn một kênh sẽ hoạt động bằng cách chỉ định ID của kênh đó:

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

Lớp AudioTracksManager cũng cung cấp một phương thức getActiveTrack().

Dưới đây là ví dụ về cách chọn bản âm thanh đầu tiên cho một ngôn ngữ cụ thể, trong trường hợp này là tiếng Anh:

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

Lớp AudioTracksManager cũng cung cấp phương thức getTracksByLanguage(language) trả về tất cả các bản nhạc cho ngôn ngữ được chỉ định.

Mã ngôn ngữ âm thanh được truy xuất từ tệp kê khai nội dung nghe nhìn và phải tuân theo RFC 5646. Mã ngôn ngữ có thể được trình bày theo danh pháp 2 ký tự (chẳng hạn như "en", "en" hoặc "de") hoặc 4 ký tự (như "en-us", "es-es" hoặc "fr-ca").

Nếu tệp kê khai nội dung nghe nhìn tuân theo một tiêu chuẩn mã ngôn ngữ khác, thì ứng dụng Trình nhận web sẽ cần chuyển đổi tệp đó thành mã ngôn ngữ tuân thủ RFC 5646. SDK của trình nhận web cung cấp một trình chặn EDIT_AUDIO_TRACKS để thực hiện các sửa đổi:

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

Khi phát qua các điểm chèn quảng cáo, mọi lựa chọn bản âm thanh, chẳng hạn như ngôn ngữ, được tạo trước điểm ngắt sẽ vẫn tồn tại sau điểm chèn cho cùng một nội dung, ngay cả khi quảng cáo bằng ngôn ngữ khác.

Phụ đề chi tiết

Để lựa chọn phụ đề gốc được theo dõi, SDK Bộ thu web cung cấp lớp TextTracksManager giúp đơn giản hoá và hợp lý hoá việc lựa chọn kênh, giúp bạn có nhiều quyền kiểm soát hơn và có quyền truy cập tốt hơn vào các thuộc tính, chẳng hạn như tên, URL và ngôn ngữ.

Bạn nên sử dụng lớp TextTracksManager trong trình xử lý sự kiện cho sự kiện cast.framework.events.EventType.PLAYER_LOAD_COMPLETE.

Tính năng lựa chọn phụ đề trong SDK của trình thu thập dữ liệu web được đơn giản hoá và hợp lý hoá với các phần khác của SDK.

API hỗ trợ kiểm soát WebVTT, TTML và CEA-608.

Lớp TextTracksManager cung cấp nhiều cách để truy vấn và chọn một kênh phụ đề để đóng. Dưới đây là ví dụ về cách chọn kênh đầu tiên sẽ hoạt động bằng cách chỉ định ID của kênh đó:

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

Lớp TextTracksManager cũng cung cấp một phương thức getActiveTracks().

Dưới đây là ví dụ về cách chọn bản văn bản đầu tiên cho một ngôn ngữ cụ thể:

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

Lớp TextTracksManager cũng cung cấp phương thức getTracksByLanguage(language) trả về tất cả các bản nhạc cho ngôn ngữ được chỉ định.

Mã ngôn ngữ văn bản được truy xuất từ tệp kê khai nội dung nghe nhìn và phải tuân theo RFC 5646. Mã ngôn ngữ có thể được trình bày theo danh pháp 2 ký tự (chẳng hạn như "en", "en" hoặc "de") hoặc danh pháp 4 ký tự (chẳng hạn như "en-us", "es-es" hoặc "fr-ca").

Nếu tệp kê khai nội dung nghe nhìn tuân theo một tiêu chuẩn mã ngôn ngữ khác, ứng dụng Web thu nhận cần chuyển đổi mọi yêu cầu đến thành chuẩn đó. Những yêu cầu này, chẳng hạn như lệnh thoại, sử dụng mã ngôn ngữ RFC 5646. SDK của Web Receiver cung cấp một trình chặn EDIT_TRACKS_INFO để dịch các yêu cầu sang tiêu chuẩn của tệp kê khai:

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 này cho phép nhà phát triển tự động thêm phụ đề mới vào trường hợp này (đối với các ngôn ngữ và bản nhạc không thuộc phạm vi) rồi chọn một kênh làm bản phát hành mới:

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

Khi phát qua các điểm chèn quảng cáo, bất kỳ lựa chọn bản nhạc văn bản nào, chẳng hạn như ngôn ngữ, thực hiện trước điểm ngắt sẽ vẫn tồn tại sau điểm ngắt cho cùng một nội dung, ngay cả khi quảng cáo bằng ngôn ngữ khác.

Phụ đề bắt buộc

Chú thích bắt buộc hoặc tường thuật cưỡng bức là lớp phủ văn bản hiển thị để người xem có thể hiểu khi nào ngôn ngữ thay thế được sử dụng hoặc để làm rõ âm thanh. Không giống như phụ đề, người xem không cần bật phụ đề bắt buộc vì phụ đề tự động được chọn dựa trên tùy chọn âm thanh của người xem.

Để thêm phụ đề bắt buộc vào ứng dụng Truyền, bạn cần đưa phụ đề đó vào tệp kê khai. Trong tệp kê khai, hãy đặt vai trò của kênh là forced-subtitle. Khi SDK Cask nhận được những phụ đề này, SDK sẽ xác định chúng là phụ đề bắt buộc. Bạn không cần thực hiện thao tác nào của người gửi vì SDK truyền sẽ tách riêng phụ đề bắt buộc và phụ đề. Điều này có nghĩa là người xem sẽ không thể chọn phụ đề bắt buộc.

Khi bạn bật phụ đề, phụ đề bắt buộc sẽ bị vô hiệu hoá để ngăn tình trạng phụ đề chồng lên nhau. Khi phụ đề tắt và nếu phụ đề bắt buộc được cung cấp trong tệp kê khai, thì phụ đề bắt buộc sẽ xuất hiện dựa trên lựa chọn ưu tiên về ngôn ngữ của người xem.