ライブ配信

Cast SDK には、ライブ コンテンツをサポートするための組み込み API が含まれています。これには、 すぐに使える柔軟性の高い UI と、デベロッパーが豊富な機能を備えた API を わずか数行のコードで実現できますLive API は 開始時間と終了時間、番組メタデータ、DVR コントロール、シーク可能ウィンドウ。

このガイドでは、以下を含む Live API へのストリームを構成する方法について説明します。 主要なライブシナリオを構成するためのコードとメタデータのサンプルに加え、 各シナリオのスクリーンショット

前提条件

実装に関する基本知識がある。 これを確認するには Web Receiver が必要です ご覧くださいさらに、コードサンプルを実行するには、 準拠しているのが特徴です。 キャストでサポートされているメディアタイプをご確認ください。一般に、ライブ機能では 一般的なライブ配信設定を サポートされているメディア

このガイドでは、次の用語を使用します。

  • シーク可能ウィンドウ - ユーザーがシークできるライブ ストリームの範囲。
  • ライブエッジ - プレーヤーが利用できるライブ ストリームの最新部分。
  • 再生ヘッド - 現在の再生位置の UI タイムスタンプ。

ライブ ストリームのキャスト

以下の 2 つの方法で、Web Receiver SDK で Live API を使用するように構成できます。 content:

  1. Web Receiver アプリケーションで LOAD メッセージ インターセプタを使用する。 (推奨)
  2. 読み込みリクエストを使用してデータを復号します。

インターセプタは、 LoadRequestData このオブジェクトには、読み込みリクエストに関する重要なメタデータがすべて含まれています。宛先 読み込みリクエストがライブ ストリーム用であることを示すには、 streamType 日付 mediaInformation オブジェクトに対して StreamType.LIVEMediaInformation.duration-1 にする必要があります。プレーヤー インスタンスは 内容が LIVE の場合に計算を行います。

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

番組ガイドのデータを追加する

ライブ配信、特にテレビ チャンネルのような長時間にわたる配信では、次のことができます。 現在の再生に基づいて画面上のガイドや番組のメタデータを表示する 配置する必要がありますコンテンツ プロバイダは、 エンドユーザーのエクスペリエンスを向上させるために、Web Receiver アプリケーションでメタデータをプログラミングする 体験できます

ストリームの初期ガイドデータは LOAD メッセージで設定できます のライブ ストリームであることが示されたのと同じ方法で、 使用します。ライブ配信の個々のセクションや番組は、 として表される MediaMetadata オブジェクトはその後保存され、 キューMediaMetadata クラスは、プログラムの種類によって異なります。たとえば、 TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, その他

次のコード スニペットでは、MediaMetadata オブジェクトを使用して、 各番組の開始時間に UNIX タイムスタンプ: sectionStartAbsoluteTime プロパティです。番組の時間は秒単位で表されます。

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

ライブのシーク可能な範囲

Cast SDK には、ユーザーが自分の動画を ストリーム内のプレイヘッドに 拡張コントローラ デバイスでもタップ操作に対応できます。

LiveSeekableRange ユーザーがストリーム内でシークできる時間の範囲を表します。 Web Receiver: シーク可能な範囲に関する情報に PlayerManager.getLiveSeekableRange() このメソッドは、 LiveSeekableRange 渡されます。このオブジェクトの主なプロパティは次のとおりです。

  • start - 開始(秒単位)です。
  • end - プレーヤーがシークできる最長時間(秒単位)。 配信開始を基準として、使用可能なセグメントに基づいて
  • isMovingWindow - シーク可能な範囲かどうかを示すブール値 ストリームでの移動(つまり、古いセグメントがマニフェストから削除されます) すべてのライブ配信で true にする必要があります。
  • isLiveDone - ライブ ストリームに つまり新しいセグメントは生成されません

シーク可能な範囲のサイズを start から end はストリームで使用可能なセグメント数によって決定され、 一緒に体を動かしましょうたとえば、ストリームの開始時にシーク可能な 範囲は {start:0, end: 600, isMovingWindow: false, isLiveDone: false}、10 です ストリーミング開始から数秒後には {start: 10, end: 610, isMovingWindow: true, isLiveDone: false} になります。重要なポイントであるのは シーク可能な範囲内の終了時間は、リクエストが 新しいセグメントを生成しますしたがって、配信のセグメントの典型的な長さが 10 秒の場合、開始時間と終了時間は約 10 秒ごとに更新されます。 あります

再生位置の移動を無効にする

ストリーム内の移動を無効にするには、移動機能を削除する必要があります サポートされているメディア コマンドから次のコマンドを実行できます。

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

送信側アプリへの SEEK シグナルでサポートされるメディア コマンドを削除 ディスプレイやタッチ操作で移動は無効になりますが、 「OK Google, 30 秒巻き戻して」などと指示します。 サポートされている音声でのメディア コマンド 音声のメディア コマンドを無効にする方法の詳細をご覧ください。

ライブ フレームワーク イベント

LIVE_ENDEDLIVE_IS_MOVING_WINDOW_CHANGED の 2 つのイベントが含まれます。 Live APIどちらのイベントも LiveStatusEvent このオブジェクトには、現在のライブ シーク可能な範囲が含まれます。

イベント 説明
LIVE_ENDED ライブ ストリームが終了するとトリガーされます。この時点で、LiveSeekableRangeend 値の更新が停止します。ユーザーは、ライブ検索可能な範囲内のコンテンツを引き続き表示できます。
LIVE_IS_MOVING_WINDOW_CHANGED ライブ配信のシーク可能な範囲が固定ウィンドウから移動ウィンドウに、またはその逆に変更された場合にトリガーされます。ライブ配信では、マニフェストによって以前のセグメントが削除されることをプレーヤーが検出すると、この状態になります。

ライブ配信のシナリオ

ライブ配信には 8 種類のシナリオがあり、それぞれ 3 つの主要な設定を行います。

  • ストリーミングに開始時間が設定されています
  • ストリームに終了時間があります
  • ユーザーはライブ ストリームのシーク可能なウィンドウ内でシークできる

設定方法については、番組ガイドのデータを追加するをご覧ください。 それらの値を使用します。

以下は、ライブ配信でサポートされているシナリオの説明とスクリーンショットです。 API変数 T1T2 は、 移動することもできます

開始時間 終了時間 シーク可能 T1 T2
シナリオ 1 × × × プレイヘッド 非表示
シナリオ 2 いいえ いいえ ヘッドを再生 非表示
シナリオ 3 いいえ いいえ ヘッドを再生 非表示
シナリオ 4 いいえ ヘッドを再生 非表示
シナリオ 5 いいえ いいえ 開始時刻を表示 ヘッドを再生
シナリオ 6 いいえ 開始時刻を表示 ヘッドを再生
シナリオ 7 × 開始時間を表示 終了時刻を表示
シナリオ 8 開始時間を表示 終了時刻を表示

シナリオ 1

開始時間 終了時間 シーク可能 T1 T2
× × × プレイヘッド 非表示

シナリオ 1 では、開始時間または終了時間が設定されておらず、ユーザーが 。ユーザーがストリーミングを停止すると、ライブエッジから再生が再開される 一時停止した場所が表示されます。

シナリオ 7

シナリオ 7 と時刻表示の Chromecast のライブ UI を表示しているテレビ シナリオ 7 と時刻の表示のライブ UI を表示しているスマートフォン

開始時間 終了時間 シーク可能 T1 T2
× プレイヘッド プログラムの期間

シナリオ 7 には開始時刻と終了時刻が設定されていますが、シークすることはできません。この 2 つ UI のタイムスタンプ(T1 と T2)は、現在のプレイヘッド時間と合計を表します。 それぞれ異なりますユーザーがストリーミングの再生を一時停止または再開すると、 ライブエッジで再開できます上の例では、赤色の部分が シークバーは、ユーザーが開始してからのストリームの一部を表します。 できます。

シナリオ 8

シナリオ 8 と時刻の表示に関する Chromecast のライブ UI を表示しているテレビ シナリオ 8 と時刻表示のライブ UI を表示しているスマートフォン

開始時間 終了時間 シーク可能 T1 T2
プレイヘッド プログラムの期間

シナリオ 7 は開始時間と終了時間が設定されており、シーク可能です。2 つのタイムスタンプは UI の T1 と T2 は、現在のプレイヘッド時間と番組の合計を表します。 それぞれ異なりますユーザーが再生を一時停止または再開すると、ストリーミングが再開します。 ユーザーがシーク可能なウィンドウ内にいる場合、そのウィンドウの シークバーは、ユーザーがシークバックできる場所と、白で表示されている領域です。 は、ユーザーが早送りできる場所を表します。

シナリオを構成する

配信を特定のライブシナリオとして設定するには、次の 3 つのステップを行います。

  1. Set Stream Type - ライブ配信の種類として おすすめします。
  2. Add Program Guide Data - 開始時間を設定します。 MediaMetadata オブジェクトで指定する必要があります。
  3. シーク機能の設定 - 有効または無効にします。 シークを無効にする。

再生動作

一時停止中も、UI の再生メタデータは更新され続けます。 再生ヘッド時間とライブ エッジ時間が含まれます。ストリームを再開すると ストリーム構成によって異なる動作に注意してください。

シーク可能ストリーム

シーク可能なストリームが再開されると、次のようになります。

  • ライブエッジは、ライブ位置とシーク可能な範囲に更新される それに応じて調整されます
  • プレイヘッドが現在の番組から移動すると、スクラブバーが更新されます メタデータ(新しい番組の場合は開始時間と終了時間を含む)を あります)。
  • シーク可能なウィンドウの長さが X の場合、シーク可能な範囲は 「X」以下、または番組の先頭のいずれか小さい方までの文字列を表示します。
  • ユーザーが一時停止していて、現在時刻が過ぎている場合 ストリーミングは最初(左端)から再開されます。 クリックします。

シーク位置 LiveSeekableRange.end 一時停止を解除した後、ライブエッジで再生を再開できます。

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

シークできないストリーム

シークできないストリームが再開された場合:

  • この場合、再生はライブエッジで再開されます。
  • ライブの端が現在の番組より飛び出した場合、スクラブバーは 新しい番組のメタデータ(開始時間と終了時間を含む)で更新される 。

API サーフェスの変更とライブ UI のカスタマイズ

Cast SDK には、Terraform の代わりにカスタム ユーザー インターフェースを作成するための組み込みサポートが備わっています。 簡単に使用できるようになりますただし、 キャスト UX デザイン チェックリスト: 行うことができます。

ウェブレシーバー

ウェブレシーバーでは、 PlayerData 次のフィールドがあります。これによりデベロッパーはカスタム インターフェース:

  • isLive - 現在のストリームがライブ ストリームかどうかを示すフラグ。 VOD とは対照的です
  • liveSeekableRange - 画面上に表示されるシーク可能な範囲 クリックします。
  • mediaStartAbsoluteTime - セクションがいつ開始されたか(絶対時間) (UNIX エポック)。
  • sectionStartTimeInMedia - セクションの開始日時(開始日時を起点とする) 指定することもできます。
  • sectionDuration - セクションの長さ(秒単位)。

また 2 つのライブイベント

Android SDK

ライブ機能の一部として、Android のシークバー ウィジェットを UIMediaController は非推奨となりました。代わりに CastSeekBar を使用してください。