Cast SDK には、ライブ コンテンツをサポートするための組み込み API が含まれています。これには、 すぐに使える柔軟性の高い UI と、デベロッパーが豊富な機能を備えた API を わずか数行のコードで実現できますLive API は 開始時間と終了時間、番組メタデータ、DVR コントロール、シーク可能ウィンドウ。
このガイドでは、以下を含む Live API へのストリームを構成する方法について説明します。 主要なライブシナリオを構成するためのコードとメタデータのサンプルに加え、 各シナリオのスクリーンショット
前提条件
実装に関する基本知識がある。 これを確認するには Web Receiver が必要です ご覧くださいさらに、コードサンプルを実行するには、 準拠しているのが特徴です。 キャストでサポートされているメディアタイプをご確認ください。一般に、ライブ機能では 一般的なライブ配信設定を サポートされているメディア。
このガイドでは、次の用語を使用します。
- シーク可能ウィンドウ - ユーザーがシークできるライブ ストリームの範囲。
- ライブエッジ - プレーヤーが利用できるライブ ストリームの最新部分。
- 再生ヘッド - 現在の再生位置の UI タイムスタンプ。
ライブ ストリームのキャスト
以下の 2 つの方法で、Web Receiver SDK で Live API を使用するように構成できます。 content:
- Web Receiver アプリケーションで
LOAD
メッセージ インターセプタを使用する。 (推奨) - 読み込みリクエストを使用してデータを復号します。
インターセプタは、
LoadRequestData
このオブジェクトには、読み込みリクエストに関する重要なメタデータがすべて含まれています。宛先
読み込みリクエストがライブ ストリーム用であることを示すには、
streamType
日付
mediaInformation
オブジェクトに対して
StreamType.LIVE
。
MediaInformation.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_ENDED
と LIVE_IS_MOVING_WINDOW_CHANGED
の 2 つのイベントが含まれます。
Live APIどちらのイベントも
LiveStatusEvent
このオブジェクトには、現在のライブ シーク可能な範囲が含まれます。
イベント | 説明 |
---|---|
LIVE_ENDED |
ライブ ストリームが終了するとトリガーされます。この時点で、LiveSeekableRange の end 値の更新が停止します。ユーザーは、ライブ検索可能な範囲内のコンテンツを引き続き表示できます。 |
LIVE_IS_MOVING_WINDOW_CHANGED |
ライブ配信のシーク可能な範囲が固定ウィンドウから移動ウィンドウに、またはその逆に変更された場合にトリガーされます。ライブ配信では、マニフェストによって以前のセグメントが削除されることをプレーヤーが検出すると、この状態になります。 |
ライブ配信のシナリオ
ライブ配信には 8 種類のシナリオがあり、それぞれ 3 つの主要な設定を行います。
- ストリーミングに開始時間が設定されています
- ストリームに終了時間があります
- ユーザーはライブ ストリームのシーク可能なウィンドウ内でシークできる
設定方法については、番組ガイドのデータを追加するをご覧ください。 それらの値を使用します。
以下は、ライブ配信でサポートされているシナリオの説明とスクリーンショットです。 API変数 T1 と T2 は、 移動することもできます
開始時間 | 終了時間 | シーク可能 | T1 | T2 | |
---|---|---|---|---|---|
シナリオ 1 | × | × | × | プレイヘッド | 非表示 |
シナリオ 7 | ○ | ○ | × | 開始時間を表示 | 終了時刻を表示 |
シナリオ 8 | ○ | ○ | ○ | 開始時間を表示 | 終了時刻を表示 |
シナリオ 1
開始時間 | 終了時間 | シーク可能 | T1 | T2 |
---|---|---|---|---|
× | × | × | プレイヘッド | 非表示 |
シナリオ 1 では、開始時間または終了時間が設定されておらず、ユーザーが 。ユーザーがストリーミングを停止すると、ライブエッジから再生が再開される 一時停止した場所が表示されます。
シナリオ 7
開始時間 | 終了時間 | シーク可能 | T1 | T2 |
---|---|---|---|---|
○ | ○ | × | プレイヘッド | プログラムの期間 |
シナリオ 7 には開始時刻と終了時刻が設定されていますが、シークすることはできません。この 2 つ UI のタイムスタンプ(T1 と T2)は、現在のプレイヘッド時間と合計を表します。 それぞれ異なりますユーザーがストリーミングの再生を一時停止または再開すると、 ライブエッジで再開できます上の例では、赤色の部分が シークバーは、ユーザーが開始してからのストリームの一部を表します。 できます。
シナリオ 8
開始時間 | 終了時間 | シーク可能 | T1 | T2 |
---|---|---|---|---|
○ | ○ | ○ | プレイヘッド | プログラムの期間 |
シナリオ 7 は開始時間と終了時間が設定されており、シーク可能です。2 つのタイムスタンプは UI の T1 と T2 は、現在のプレイヘッド時間と番組の合計を表します。 それぞれ異なりますユーザーが再生を一時停止または再開すると、ストリーミングが再開します。 ユーザーがシーク可能なウィンドウ内にいる場合、そのウィンドウの シークバーは、ユーザーがシークバックできる場所と、白で表示されている領域です。 は、ユーザーが早送りできる場所を表します。
シナリオを構成する
配信を特定のライブシナリオとして設定するには、次の 3 つのステップを行います。
- Set Stream Type - ライブ配信の種類として おすすめします。
- Add Program Guide Data - 開始時間を設定します。
MediaMetadata
オブジェクトで指定する必要があります。 - シーク機能の設定 - 有効または無効にします。 シークを無効にする。
再生動作
一時停止中も、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
を使用してください。