手順6 - オプション: リニアTVデータを統合する
コンテンツが [ライブ] タブや [検索] タブに表示されやすくなるようにしたり、各ユーザーのデバイスに送信されるデータ量を少なくしたりするには、カタログ統合を通じてAmazonに番組、スケジュール、ステーションを提供します。リニアカタログ統合を使用すると、単一のメタデータファイルを送信し、それをすべてのユーザーのデバイスに自動的に送信させることができます。これにより、Gracenoteベースのサーバー統合よりもレイテンシが低減されます。
既にカタログ統合を通じてビデオオンデマンド(VOD)カタログをAmazonと統合している場合、リニアTVデータを追加する手順はこれと同様です。XML形式の構造も似ていますが、スケジュールや番組など、UIにコンテンツを表示するためのデータが追加されています。
リニアTVカタログの追加に関しては、次の考慮事項があります。
- リニアデータ統合は任意です。
- ファイル形式は既存のVOD形式を補完したものですが、リニアTVデータをアップロードする追加手順が必要です。既にVODコンテンツのカタログがある場合でも、リニアTVのカタログは別途作成する必要があります。
- 手順1: リニアカタログファイルを準備する
- 手順2: カタログファイルを検証する
- 手順3: リニアカタログ統合用にAWSアカウントをセットアップする
- 手順4: リニアカタログをAmazonにアップロードする
- 手順5: アプリをリニアカタログに接続する
- 次の手順
手順1: リニアカタログファイルを準備する
リニアカタログを準備する手順は、VODカタログファイルの作成手順と同様です。主な違いは、リニアTVに固有の追加要素があることです。
- ステーション(必須): AndroidのTVデータベースに挿入するチャンネルに相当し、電子番組表(EPG)に表示されます。ステーションには、タイトル、タイムゾーン、以下の画像を含める必要があります。
- stationCover: 縦横比が16:9、最小解像度が1920 x 1080ピクセルのJPEGまたはPNG。この画像は、コンテンツ固有の画像が提供されていない場合にフォールバックとして表示されるステーションブランドを表します。
- stationHB: 縦横比が1:1、最小解像度が400 x 400ピクセルのPNG。画像の背景は透明に設定します。この画像は、暗い色の背景で使用される明るい色のステーションブランドを表します。
- ラインナップ(必須): ステーションのスコープを特定の国に限定します。対象となる国でのみデータが表示されるように、ラインナップの宣言にはリージョンの指定を含める必要があります。
- ブロードキャスト(必須): ステーションとラインナップを関連付けて、どの国でステーションを表示するかをAmazonが決定できるようにします。
- スケジュール(必須): リニアカタログファイルで提供されている映画とエピソードのデータをステーションに関連付けます。この情報がEPGに表示されます。
- 映画、エピソード、シーズン(必須): Fire TVでEPGおよび [ライブ] や [検索] の画面に表示されるコアメタデータ。タイトル、説明、コンテンツレーティング、画像はすべて、カタログのこの部分に含まれます。
詳細については、手順1: カタログファイルを作成するを参照してください。
手順2: カタログファイルを検証する
カタログファイルを作成したら、そのXMLファイルが正しい形式であることを確認し、CDFスキーマに照らして検証する必要があります。形式が正しくないカタログファイルまたは無効なカタログファイルは、カタログ統合サービスによって却下されます。ローカルでファイルを検証することで、ファイルの統合に支障をきたすエラーを検出できます。
検証の詳細については、カタログファイルを検証するツールを参照してください。
手順3: リニアカタログ統合用にAWSアカウントをセットアップする
カタログ統合では、アマゾンウェブサービス(AWS)のツールを使用してカタログをアップロードします。また、カタログの保存用ツールへのアクセスを許可するユーザーの管理も、このツールで行います。カタログファイルをアップロードする前に、AWSアカウントをセットアップし、Amazonの担当者とアカウント情報を交換する必要があります。
Amazonの担当者がリニアカタログ統合用のフォルダを作成し、Amazon S3バケットへのアクセス権を提供します。S3バケットはAmazonが作成するため、開発者のAmazon S3コンソールには表示されません。ただし、コマンドラインインターフェイス(CLI)を使用してフォルダにアクセスすると、フォルダの内容を表示したり、フォルダにファイルをアップロードしたりできます。S3フォルダの操作に使用できるコマンドについては、次のセクションで説明します。
まだAWSアカウントがない場合は、手順A: AWSアカウントにサインインまたはサインアップする(新規AWSユーザーの場合)の手順に従ってください。
手順4: リニアカタログをAmazonにアップロードする
Amazonの担当者から提供されたフォルダ(sample_application/など)にカタログをアップロードします。
以下のコマンドを入力します。<catalog_file_name.xml>
はカタログファイル名に、<s3_folder_name>
はS3フォルダ名に置き換えてください。--acl bucket-owner-full-control
オプションは、アップロードされたファイルをAmazonが読み取り、カタログを統合できるようにするために必要です。
$ aws s3api put-object --body <catalog_file_name.xml> --bucket cdf2-amazon-firetv --key <s3_folder_name>/catalog.xml --region us-east-1 --acl bucket-owner-full-control
--
がenダッシュではなく二重ハイフンになっていることを確認してください。また、必ず-acl
パラメーターをbucket-owner-full-control
で設定してください。設定しないと、アップロードが失敗します。このコマンドは、最大2GBのファイルを正常にアップロードできます。成功すると、AWS CLIにファイルのVersionID、ETag、Expirationのタグが表示されます。
カタログの統合後、Eメールが届きます。
手順5: アプリをリニアカタログに接続する
リニアカタログが正常にAmazonに送信されたので、次はカタログファイルで宣言したステーションにアプリを接続します。
以下のコードで参照している外部IDタイプは、前のセクションの手順3~4で使用したS3フォルダ名です。たとえば、Amazonの担当者からsample_applicationという名前のフォルダが割り当てられたとすると、外部IDタイプは"sample_application"になります。
以下のコードで参照している外部ID値は、リニアカタログファイルで送信したステーションのIDです。たとえば、IDがabc123のステーションを宣言したとすると、外部ID値は"abc123"になります。
サンプルコード
/**
* 外部IDのタイプを格納する変数。サービスメタデータのマッチングに使用されます。有効なタイプは
* 「EXTERNAL_ID_TYPE_」で始まる名前の定数として以下で定義されます。
* Nullまたは無効なデータを使用すると、サービスメタデータのマッチングに失敗します。
*/
private final static String EXTERNAL_ID_TYPE = "externalIdType";
/**
* 外部IDの値を格納する変数。サービスメタデータのマッチングに使用されます。
* Nullまたは無効なデータを使用すると、サービスメタデータのマッチングに失敗します。
*/
private final static String EXTERNAL_ID_VALUE = "externalIdValue";
public void fillStationId(ContentValues values) {
try {
String jsonString = new JSONObject()
.put(EXTERNAL_ID_TYPE, "<実際のIDタイプ>") // Amazonカタログの一意の名前空間に置き換えてください(例:"test_cdf2")
.put(EXTERNAL_ID_VALUE, "<実際のID値>") // チャンネルに関連付けられた一意のCDFステーションIDに置き換えてください(例:"station-001"、"station-child-001"、"station-002"、"station-child-002"、"station-003"、"station-child-003")
.toString();
// チャンネルのcontentValuesにJSON文字列を追加します。
values.put(TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA, jsonString.getBytes());
} catch (JSONException e) {
Log.e(TAG, "BLOBにデータを追加するときにエラーが発生しました " + e);
}
}
public fun fillStationId(values: ContentValues) {
try {
val jsonString = JSONObject()
.put(
EXTERNAL_ID_TYPE,
"<実際のIDタイプ>"
) // Amazonカタログの一意の名前空間に置き換えてください(例:"test_cdf2")
.put(
EXTERNAL_ID_VALUE,
"<実際のID値>"
) // チャンネルに関連付けられた一意のCDFステーションIDに置き換えてください(例:"station-001"、"station-child-001"、"station-002"、"station-child-002"、"station-003"、"station-child-003")
.toString()
// チャンネルのcontentValuesにJSON文字列を追加します。
values.put(TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA, jsonString.toByteArray())
} catch (JSONException e) {
Log.e(TAG, "BLOBにデータを追加するときにエラーが発生しました" + e)
}
}
companion object {
/**
* 外部IDのタイプを格納する変数。サービスメタデータのマッチングに使用されます。有効なタイプは
* 「EXTERNAL_ID_TYPE_」で始まる名前の定数として以下で定義されます。
* Nullまたは無効なデータを使用すると、サービスメタデータのマッチングに失敗します。
*/
private const val EXTERNAL_ID_TYPE: String = "externalIdType"
/**
* 外部IDの値を格納する変数。サービスメタデータのマッチングに使用されます。
* Nullまたは無効なデータを使用すると、サービスメタデータのマッチングに失敗します。
*/
private const val EXTERNAL_ID_VALUE: String = "externalIdValue"
}
詳細については、CDFステーションIDの挿入を参照してください。
次の手順
これらの手順を完了すると、チャンネルが表示されるようになります。チェックポイント: Fire TVのUIでのチャンネルの単独表示の手順に従ってください。
Last updated: 2025年5月5日