Chuyển sang Bộ thu dữ liệu web

Hướng dẫn này giải thích cách di chuyển ứng dụng Cast receiver v2 sang ứng dụng Trình nhận web mới nhất.

SDK ứng dụng truyền (CAF) mới, còn được gọi là Bộ thu web v3, là bản nâng cấp lớn so với SDK Bộ thu v2. SDK Bộ thu web cung cấp một SDK dễ dàng và hợp lý để phát triển các ứng dụng Trình thu thập dữ liệu web.

Bộ thu web cung cấp một API nhất quán hơn với các API gửi CAF mới. Gói này cung cấp đầy đủ tính năng tích hợp trình phát (MPL và Shaka), cũng như hỗ trợ triển khai và hỗ trợ đầy đủ cho nội dung đa phương tiện Truyền và Trợ lý Google. SDK CAF cũng cung cấp giao diện người dùng mặc định có thể dễ dàng tạo kiểu bằng CSS và dịch vụ liên kết dữ liệu để đơn giản hoá việc triển khai giao diện người dùng.

Tại sao nên di chuyển?

Bằng cách di chuyển ứng dụng Bộ thu v2 sang Trình nhận web, bạn có thể loại bỏ rất nhiều mã liên quan đến trình phát. Vì vậy, bạn có thể tập trung vào việc viết logic kinh doanh dành riêng cho ứng dụng.

CAF tích hợp liền mạch các trình phát MPL và Shaka để hỗ trợ nhiều loại nội dung hơn, bao gồm — Phát trực tiếp HTTP (TS và CMAF), Truyền phát MPEG-DASH, Phát mượt mà và các loại được hỗ trợ bởi tài sản nguồn Media Element (MP3, MP4, Icecast, v.v.). Để biết danh sách đầy đủ, hãy xem Nội dung nghe nhìn được hỗ trợ cho Google Cast. CAF hiện không hỗ trợ trình phát do người dùng cung cấp.

Việc chuyển sang CAF sẽ thêm tính năng hỗ trợ cho việc điều khiển bằng giọng nói thông qua Trợ lý Google. Mọi lệnh thoại mới có Trợ lý Google sẽ tự động được hỗ trợ khi sử dụng CAF.

Ngoài việc hỗ trợ các lệnh nội dung nghe nhìn mới, chẳng hạn như "thay đổi bản nhạc theo ngôn ngữ" và "thay đổi tốc độ phát", CAF cũng cung cấp khả năng xếp hàng đợi, hỗ trợ quảng cáo tích hợp sẵn và hỗ trợ trực tiếp tốt hơn.

Điều gì đã thay đổi?

API Bộ thu web cố gắng tuân theo các quy ước mà người gửi CAF giới thiệu cho AndroidiOS, và khá khác với phiên bản 2.

Web receiver đang sử dụng một vùng chứa tên mới cast.framework thay vì không gian tên cast.receiver cho tất cả các API hiển thị. Nhiều đối tượng dữ liệu được v2 sử dụng giống nhau trong CAF và được hiển thị trong không gian tên cast.framework.messages (thường nằm trong cast.receiver.media).

Các dịch vụ v2 sau đây được thay thế bằng các dịch vụ CAF tương ứng:

  • Lớp CastReceiverManager được thay thế bằng CastReceiverContext là một singleton quản lý phiên truyền, người gửi, gửi tin nhắn tuỳ chỉnh và các sự kiện của hệ thống toàn cầu. Bạn có thể sử dụng CastReceiverOptions để cung cấp các tuỳ chọn chung của ứng dụng (chẳng hạn như hàng đợi, phiên bản trình nhận, cấu hình phát, v.v.) cho ngữ cảnh.
  • Lớp MediaManager được thay thế bằng PlayerManager là thuộc tính của singleton CastReceiverContext, đồng thời quản lý phiên phát nội dung đa phương tiện, yêu cầu nội dung nghe nhìn, yêu cầu thoại của Trợ lý Google (CommandAndControlManager trong phiên bản 2) và kích hoạt các sự kiện nội dung nghe nhìn. Cấu hình cho trình phát (cast.player.api.Host trong MPL) do PlaybackConfig cung cấp. Cấu hình này có thể được cung cấp trên toàn cầu hoặc cho mỗi yêu cầu tải.

PlayerManager cũng cho phép các lớp của người quản lý phụ mới:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

Logic kinh doanh của người nhận

Trình xử lý sự kiện v2 hiển thị bộ thu (chẳng hạn như CastReceiverManager.onReady hoặc MediaManager.onLoad) để thêm logic kinh doanh. Trong CAF, trình xử lý sự kiện được thay thế bằng trình nghe sự kiện (CastReceiverContext.addEventListener) và trình chặn thông báo (PlayerManager.setMessageInterceptor). Bộ thu web có thể có nhiều trình nghe sự kiện cho một sự kiện (trình nghe không ảnh hưởng đến sự kiện) và một trình chặn cho mỗi thông báo. Trình chặn có thể cập nhật hoặc xử lý yêu cầu (trả về yêu cầu đã sửa đổi, thông báo thành công hoặc thông báo lỗi), và có thể là một trình xử lý không đồng bộ trả về lời hứa.

Trình chặn yêu cầu tải là nơi phổ biến nhất để thêm logic dành riêng cho ứng dụng. Đối với các yêu cầu tải từ người gửi, trình chặn tải có thể chuyển đổi mã nội dung thành URL nội dung. Trình chặn tải cũng sẽ được gọi để yêu cầu tải trước và lưu vào bộ nhớ đệm trước nếu không có trình chặn rõ ràng nào được cung cấp để tải trước hoặc lưu trước vào bộ nhớ đệm.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

Trình xử lý trạng thái nội dung đa phương tiện tuỳ chỉnh v2 cũng được thay thế bằng một trình chặn thông báo cho thông báo trạng thái nội dung phương tiện. Các ứng dụng Bộ thu web không muốn hiển thị URL nội dung đa phương tiện trong trạng thái nội dung đa phương tiện có thể cung cấp trình phân giải URL (PlayerManager.setMediaUrlResolver), trình cung cấp này chứa URL nội dung đa phương tiện cho yêu cầu tải. URL đó được CAF sử dụng nội bộ và không được cung cấp trong trạng thái nội dung phương tiện.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

Sự kiện

Web receiver cung cấp một loạt sự kiện từ cả CastReceiverContextPlayerManager. Các ứng dụng Bộ thu web có thể có nhiều trình nghe trên mọi sự kiện và cũng có thể cung cấp một trình nghe cho nhiều sự kiện. (Xem cast.framework.events.category cho một số nhóm sự kiện.)

Các sự kiện này bao gồm mọi yêu cầu của người dùng, tiến trình phát, quá trình xử lý trình phát và mọi sự kiện phần tử nội dung đa phương tiện cấp thấp (CAF không hiển thị chính phần tử nội dung đa phương tiện đó).

Ứng dụng Bộ thu web có thể thêm trình nghe sự kiện để hoạt động (ví dụ: thêm định nghĩa theo dõi văn bản khi tải xong) hoặc để phân tích.

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

Xe buýt thông báo tuỳ chỉnh

CAF không hiển thị bus thông báo trong API, thay vào đó, nó cung cấp CastReceiverContext.addCustomMessageListener để thêm trình nghe thông báo cho một vùng chứa tên cụ thể (chỉ một vùng chứa cho mỗi vùng chứa tên) và CastReceiverContext.sendCustomMessage để gửi thông báo trên vùng chứa tên. Bạn cần khai báo tất cả các vùng chứa tên trước khi khởi động Web receiver (nghĩa là trước khi gọi CastReceiverContext.start). Bạn có thể khai báo vùng chứa tên bằng cách thêm trình nghe thông báo vào vùng chứa tên đó hoặc có thể cung cấp dưới dạng tuỳ chọn bắt đầu trong CastReceiverOptions.customNamespaces.

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

Giao diện người dùng mặc định

CAF cung cấp giao diện người dùng Web receiver mặc định, hiển thị thanh tiến trình phát và siêu dữ liệu đa phương tiện nếu cần. Giao diện người dùng mặc định được cung cấp dưới dạng một phần tử tuỳ chỉnh (<cast-media-player>) có thể tạo kiểu với kiểu giống CSS.

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

Để tuỳ chỉnh nhiều hơn, ứng dụng Bộ thu web có thể triển khai giao diện người dùng riêng. Web receiver cung cấp lớp cast.framework.ui.PlayerDataBinder để giúp liên kết đối tượng giao diện người dùng với trạng thái phát của Bộ thu trên web.