タイムシフトをサポートする

TV 入力サービスでタイムシフト API を使用して、ユーザーが一時停止、巻き戻し、再生を行えるようにする ライブ番組を早送りできます。アプリが タイムシフトにより、ユーザーはコンテンツを柔軟に視聴できるようになります。

  • 短時間の中断を処理している間にプログラムを一時停止できるため、 重要な瞬間を見逃すことがありません。
  • すでに見たことのあるコンテンツや 関心がないかもしれません
  • 番組コンテンツを好きなタイミングまで巻き戻して再視聴する

図 1. タイムシフトに使用される Android TV の再生コントロール

タイムシフトは、番組データの短時間かつ一時的な録画セグメントを使用して、 ライブ番組を再生する機能を実装します。これらのタイムシフトは再生できません 録音、録音、録画、録音を行なうこともできます。つまり、 番組を一時停止して翌日に見るためのタイムシフトや、 別のチャンネルに切り替えたときに表示されます。

必要に応じてテレビ録画の API を使用する ユーザーが番組コンテンツを録画して、現在の再生以外で視聴できるようにします あります。

タイムシフトのサポートを追加する

TV 入力サービスにタイムシフトのサポートを追加するには、 TvInputService.Session クラスのタイムシフト API アプリでタイムシフト録画の録画と再生を処理し、 タイムシフトをサポートする入力サービスが提供するシステム。

実装する TvInputService.Session メソッドは次のとおりです。 次のとおりです。

入力サービスがサポートしていることをシステムに通知する方法について詳しくは、 タイムシフトについては、 タイムシフトのステータスをシステムに通知する

TIF Companion Library を使用して TvInputService.Session クラスを ExoPlayer を使用するタイムシフトの実装。こちらの タイムシフト API メソッドを BaseTvInputService.Session - 独自に指定 説明します。TIF Companion Library の使用方法について詳しくは、 TIF Companion ライブラリをご覧ください。

セッション開始時にコンテンツを録画する

ユーザーは、 選択するか、選択ボタンを同時に押すか、 再生コントロールに移動するか 専用の再生コントロールを使用できます。

ユーザーは 番組コンテンツやテレビの視聴中にタイムシフトをいつでも使用する タイムシフト コンテンツの録画は、 あなたのチャンネルの onTune() 説明します。さらに、 次の番号に電話をかけて、録音できることをシステムに通知します。 notifyTimeShiftStatusChanged(int), 記載されている タイムシフトのステータスをシステムに通知する

録画コンテンツ ストレージを管理する

テレビ入力サービスは、タイムシフトの録画を アプリがローカルに保持し、システムにより呼び出されたときにコンテンツを再生 タイムシフト手法( onTimeShiftResume()。 コンテンツがすでにクラウドに保存され、アプリで管理できる場合 タイムシフト録画の場合は、代わりに Cloud Storage を できます

保護されたコンテンツを使用している場合、テレビ入力サービスが 録画コンテンツを適切に暗号化し、コンテンツを復号化して、 おすすめします。

録画した動画コンテンツには大量のストレージが必要になることがあるため、 録画したコンテンツを慎重に管理する必要があります。再生中に セッション時間が、記録および保存できる時間を タイムシフトの録画を調整すると、 ただし、確実に現在の時刻がキャプチャされるようにします。たとえば、ユーザーが の再生時間が 31 分で、タイムシフト録画が最長です。 30 分です。録画と開始時間を調整して、 表示されます。

テレビ入力サービスがタイムシフトに対応していない場合は、 通知する必要があります。通知する方法について詳しくは、 タイムシフトのサポート制限について詳しくは、 タイムシフトのステータスをシステムに通知する

ユーザーが別のチャンネルに切り替えたときや、再生を終了したとき 録画したタイムシフト データを削除する。

タイムシフトのステータスをシステムに通知する

テレビ入力サービスがタイムシフトをサポートしている場合は、 notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE): 実装 ユーザーがチューニングすると onTune() 追加できます

入力サービスのタイムシフト機能がある場合にシステムに通知する 変更, 使用 notifyTimeShiftStatusChanged(int)。 たとえば、テレビ入力サービスがタイムシフトをサポートしていない場合 なんらかの理由で、Google Meet のビデオ会議が notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)

テレビ入力サービスがタイムシフトにまったく対応できない場合は、 notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) トリガーされます。システムはすべての入力サービスを 呼び出しなし 入力サービスとしての notifyTimeShiftStatusChanged() タイムシフトをサポートしています。取り上げる入力サービスは、API レベル 22 および 挙げられます

再生時間をトラッキングする

タイムシフト録画の開始位置は、最も早い絶対時間です ユーザーがシークできる位置(エポックからのミリ秒数)。これは、 通常は動画の再生が開始されてから onTune() が呼び出されます。 ただし、ユーザーが視聴したコンテンツの量が上限を 新しいセグメントの録画を開始する必要があります。 それに応じて開始時間を更新します。

タイムシフト録画の現在の位置は、現在の再生箇所です エポックからのミリ秒で示した位置。この位置は継続的に変化しています 。通常、再生エンジンを使用してこれを決定できます。 値を渡す必要があります。

Kotlin

override fun onTimeShiftGetCurrentPosition(): Long =
        tvPlayer?.run {
            currentProgram?.let { program ->
                currentPosition + program.startTimeUtcMillis
            }
        } ?: TvInputManager.TIME_SHIFT_INVALID_TIME

Java

@Override
public long onTimeShiftGetCurrentPosition() {
  if (getTvPlayer() != null && currentProgram != null) {
    return getTvPlayer().getCurrentPosition() +
      currentProgram.getStartTimeUtcMillis();
  }
  return TvInputManager.TIME_SHIFT_INVALID_TIME;
}

システムが呼び出しを行う時点で、指定した開始時刻が onTimeShiftGetStartPosition() が、指定した現在の時間の位置を超えることはありません。 onTimeShiftGetCurrentPosition()。 システムはこれらの呼び出しを使用して 再生コントロール UI でタイムシフト時間を更新する。

再生パラメータをサポートする

タイムシフト中に再生速度を変更する際には再生パラメータが使用されます。対象 たとえば、ユーザーが現在の再生を巻き戻すことにした場合、 パラメータが負の再生速度でアプリに渡されている。 タイムシフトは、2 倍または 3 倍の再生速度にも対応しています。 早送りするだけです

システムは onTimeShiftSetPlaybackParams(PlaybackParams) メソッドを PlaybackParams オブジェクトで使用して、 パラメータを指定します。この情報を使用して メディア再生エンジンを適切に設定する必要があります。

再生エンジンがパラメータをサポートしていない場合は 想定される動作を可能な限りエミュレートします。たとえば再生が エンジンが 2 倍速に対応していない場合は、再生でシーク操作を繰り返す必要があります。 約 2 倍の再生速度を実現しています

パラメータを設定した後は、ユーザーが次のいずれかの設定を行う場合を除き、設定を変更しないでください。 別のパラメータまたはスイッチを必要とする再生コマンドを発行する 選択しました