Web Receiver に移行

このガイドでは、Cast Receiver v2 アプリを最新のウェブ レシーバー アプリ

Web Receiver v3 とも呼ばれる新しい Cast Application Framework(CAF)SDK は、 Receiver v2 SDK からのメジャー アップグレードにWeb Receiver SDK は メディアの Web Receiver アプリケーションを開発するための、簡単で合理化された SDK です。

Web Receiver では、新しい CAF 送信者とより一貫性のある API が提供される APIプレーヤー(MPL と Shaka)と完全に統合されており、 キャスト メディアと Google アシスタントの実装とサポート 使用できます。CAF SDK には、簡単にスタイル設定できるデフォルト UI も用意されています。 データ バインディング サービスを使用して UI を簡単に実装できます。

移行の理由

Receiver v2 アプリケーションを Web Receiver に移行すると、 削除できるので、作文に集中できます アプリケーション固有のビジネス ロジックです。

CAF は MPL と Shaka のプレーヤーをシームレスに統合し、より幅広いプレーヤーをサポート HTTP Live Streaming(TS および CMAF)、MPEG-DASH、Smooth メディア要素のソース プロパティでサポートされているストリーミングおよび型(MP3、MP4、 Icecast など)。一覧については、Google Cast でサポートされているメディアをご覧ください。 現在、CAF はユーザーが指定するプレーヤーをサポートしていません。

CAF に移行すると、Google アシスタントによる音声操作に対応できるようになります。 新しい Google アシスタントの音声コマンドは、 CAF を使用します。

「言語ごとにトラックを変更」などの新しいメディア コマンドのサポートに加え、 CAF には、キューイング機能、組み込みの広告機能も備わっています。 より充実したリアルタイムサポートを利用できます。

何が変更されたのですか?

Web Receiver API は、 の CAF 送信者 AndroidiOS、 バージョン 2 とは大きく異なります。

Web Receiver は新しい名前空間を使用しています cast.framework 公開されたすべての API で、cast.receiver 名前空間ではなく、多く v2 で使用されていたデータ オブジェクトは CAF で同一であり、 cast.framework.messages (ほとんどが cast.receiver.media 以下でした)。

次の v2 サービスは、対応する CAF サービスに置き換えられます。

  • CastReceiverManager クラスを置換する CastReceiverContext これはシングルトンで、キャスト セッション、送信側、 グローバルなシステム イベントが含まれます。「 CastReceiverOptions グローバル アプリケーション オプション(キュー、レシーバなど)を バージョン、再生設定など)をコンテキストに追加します。
  • MediaManager クラスを置換する PlayerManager これは Pod の CastReceiverContext メディア セッション、メディア リクエスト、Google Cloud からの アシスタントの音声リクエスト(v2 では CommandAndControlManager)、 イベントを発生させますプレーヤーの構成 (MPL では cast.player.api.Host)の提供元 PlaybackConfig, グローバルに、または読み込みリクエストごとに指定できます。

PlayerManager は、新しいサブマネージャー クラスも公開しています。

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

レシーバーのビジネス ロジック

レシーバー v2 の公開イベント ハンドラ(CastReceiverManager.onReadyMediaManager.onLoad など)を使用して、ビジネス ロジックを追加します。CAF では、イベント ハンドラは イベント リスナーに置き換えられる (CastReceiverContext.addEventListener) メッセージ インターセプタ (PlayerManager.setMessageInterceptor)。 Web Receiver は、1 つのイベントに対して複数のイベント リスナーを設定できます(リスナー イベントには影響しない)、メッセージごとに 1 つのインターセプタが必要です。インターセプタ リクエストを更新または処理できる(変更されたリクエスト、 (メッセージ、エラー メッセージなど)が返されます。Promise を返す非同期ハンドラにすることもできます。

読み込みリクエスト インターセプタは、 アプリケーション固有のロジックを実行できます。送信者からの読み込みリクエストの場合、 インターセプターが Content ID をコンテンツ URL に変換する。負荷インターセプタは、 明示的なインターセプタがない場合は、プリロード リクエストと事前キャッシュ リクエストに対しても呼び出されます 指定されています。

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

v2 のカスタマイズされたメディア ステータス ハンドラも、次のメッセージに置き換えられます。 インターセプタを指定します。Web Receiver アプリがインストールを許可されていない メディア ステータスでメディア URL を公開できます。URL リゾルバを提供できる (PlayerManager.setMediaUrlResolver), 読み込みリクエストのメディア URL を提供します。その URL は CAF によって使用されます メディアのステータスには提供されません。

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

イベント

Web Receiver では CastReceiverContext および PlayerManager。 ウェブ レシーバー アプリには任意のイベントで複数のリスナーを設定できます。 1 つのリスナーを複数のイベントに提供することもできます(参照: cast.framework.events.category 表示することもできます)。

このイベントは、ユーザー リクエスト、再生の進行状況、プレーヤーの処理、 低レベルのメディア要素イベント(CAF はメディア要素自体を公開しません)。

Web Receiver アプリは、処理対象のイベント リスナーを追加できます(テキストや 読み込み完了時に定義を追跡したり、分析のために使用したりできます。

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

カスタム メッセージバス

CAF は API でメッセージバスを公開するのではなく、 CastReceiverContext.addCustomMessageListener 特定の Namespace にメッセージ リスナーを追加する(Namespace ごとに 1 つ) CastReceiverContext.sendCustomMessage Namespace でメッセージを送信します。すべての名前空間は、 Web Receiver の起動(つまり、 CastReceiverContext.start)。 Namespace は、 メッセージ リスナーを追加するか、Python コードで開始オプションとして 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'
});

デフォルト UI

CAF にはデフォルトのウェブ レシーバー UI があり、再生の進行状況バーと 追加することもできます。デフォルト UI はカスタム要素として提供される (<cast-media-player>) CSS のようなスタイル設定で スタイル設定が可能です

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

Web Receiver アプリで独自の UI を実装すれば、さらにカスタマイズできます。「 Web Receiver は cast.framework.ui.PlayerDataBinder クラスを使用して UI オブジェクトを Web Receiver の再生状態にバインドします。