開発者コンソール

ライブTVのリソース


ライブTVのリソース
アンケート 本コンテンツは最近更新されました。内容が開発者の皆さまのニーズを満たしているかどうか、フィードバックをお寄せください。フィードバックを送信する

以下のベストプラクティスやコードサンプルなどの参考資料は、実装フェーズにおけるライブTV統合の詳細を理解するうえで役に立ちます。

パッケージのホワイトリスト

パッケージの「ホワイトリスト」によって、Fire TVの閲覧/検索時にチャンネルを表示できるアプリが決まります。デバイスシリアル番号(DSN)のリストをAmazonの担当者と共有し、公開前にデバイスで上記の機能を統合および検証できるようにする必要があります。

ベストプラクティス

以下は、Fire TVで快適なライブTVエクスペリエンスを提供するのに役立つ製品および実装のガイドラインです。

  • 簡単に登録できるようにして、適宜トライアルを促す。たとえば、アプリの登録フォームの項目を減らしたり、登録に電話番号を利用したりします。
  • 閲覧でのライブチャンネルのプレビューをサポートして、エンゲージメントを促進する。
  • チャンネルラインナップのTvContract.Channels.Logoには、モノクロで透明なロゴを使用する。
  • ディープリンクフローを最適化して、全画面再生を2.5秒以内に開始する。
  • 必要に応じてGracenoteチャンネルIDを活用し、統合を簡素化する。
  • 完全なスケジュールを提供することよりも、メタデータ読み込みのパフォーマンスに重点を置く。
  • JobSchedulerまたはWorkManagerを使用して、視聴権限が適切であることを定期的に確認する。これにより、アプリがフォアグラウンドで実行されていなくても、閲覧/検索されるチャンネルが視聴権限のあるチャンネルの実際の状態と常に同期されるようになります。
  • 視聴権限のあるチャンネルのリストが一部だけ変更された場合は、すべてのチャンネルを削除して再度追加するのではなく、必要な部分を更新するようにする。
  • COLUMN_DISPLAY_NAME列に表示可能なチャンネル名を指定する(UIでフォールバックとして使用されることがあるため)。Fire TVでは、最大16文字の英数字または8~10文字の全角文字が表示されます。

コードサンプル

このセクションには、ライブTVの統合に関連するコードサンプルが記載されています。

次のコードは、Gracenote IDとディープリンクをTVデータベースに挿入する方法を示しています。

/**
 * 外部IDのタイプを格納する変数。サービスメタデータのマッチングに使用されます。有効なタイプは
 * 「EXTERNAL_ID_TYPE_」で始まる名前の定数として以下で定義されます
 * Nullまたは無効なデータを使用すると、サービスメタデータの
 * マッチングに失敗します
 */
private final static String EXTERNAL_ID_TYPE = "externalIdType";

/**
 * 外部IDの値を格納する変数。サービスメタデータのマッチングに使用されます。
 * Nullまたは無効なデータを使用すると、サービスメタデータのマッチングに失敗します
 */
private final static String EXTERNAL_ID_VALUE = "externalIdValue";

/**
 * 外部プレーヤーへの再生のディープリンクURI。
 * Nullまたは無効なデータを入力すると、Gordonプレーヤーとの統合がデフォルトとなります
 */
private final static String PLAYBACK_DEEP_LINK_URI = "playbackDeepLinkUri";

// 既知の外部IDタイプ定数のリストのコントラクト
private final static String EXTERNAL_ID_TYPE_GRACENOTE_ONTV = "gracenote_ontv"; // gracenote ontv id
private final static String EXTERNAL_ID_TYPE_GRACENOTE_GVD = "gracenote_gvd"; // gracenote gvd id

// 再生のディープリンクURIのコントラクト​
// Intent.URI_INTENT_SCHEMEを使用して、インテントからURIを作成したり、URIを元のインテントに戻したりします
Intent playbackDeepLinkIntent; // アプリで作成されます
String playbackDeepLinkUri = playbackDeepLinkIntent.toUri(Intent.URI_INTENT_SCHEME);

// BLOBを作成します
ContentValues values = new ContentValues();  // すべてのチャンネルデータを格納します
ContentResolver resolver = context.getContentResolver();
values.put(TvContract.Channels.COLUMN_DISPLAY_NAME, "<実際の表示名>");
values.put(TvContract.Channels.COLUMN_INPUT_ID, "<実際の入力ID>");
try {
    String jsonString = new JSONObject()
                  .put(EXTERNAL_ID_TYPE, "<実際のIDタイプ>") // EXTERNAL_ID_TYPE_GRACENOTE_XXXに置き換えます
                  .put(EXTERNAL_ID_VALUE, "<実際のID値>") // チャンネルに関連付けられたGracenote ID値に置き換えます
                  .put(PLAYBACK_DEEP_LINK_URI, playbackDeepLinkUri).toString();

    values.put(TvContract.Channels.COLUMN_INTERNAL_PROVIDER_DATA, jsonString.getBytes());
} catch (JSONException e) {
    Log.e(TAG, "BLOBにデータを追加するときにエラーが発生しました " + e);
}

Uri uri = resolver.insert(TvContract.Channels.CONTENT_URI, values);

ペアレンタルコントロールの実装方法

次のコードは、ペアレンタルコントロールをリッスンし、ライブプレビューまたはネイティブの全画面再生を開始する方法を示しています。

private TvContentRating mBlockedRating = null;

    @Override
    public boolean onTune(final Uri channelUri) {
        ...
        if (mTvInputManager.isParentalControlsEnabled()) {
            // サーフェスで音声や画像が再生されないようにします
            mBlockedRating = <content_rating>;
            //1.全画面再生のときに、ユーザーにPINの入力を求めるプロンプトを表示します
            //2.[放映中のチャンネル] 行を閲覧しているときに
            //    番組画像が再生サーフェスで表示されないようにします
            notifyContentBlocked(mBlockedRating);
        } else {
            // 再生が開始されます
            notifyContentAllowed();
        }
        ...
    }

    @Override
    public void onUnblockContent(final TvContentRating unblockedRating) {
        // ユーザーのPIN入力により、指定のレーティングに該当するコンテンツのブロックが
        // 正常に解除されました
        if (unblockedRating.unblockContent(mBlockedRating)) {
            // 再生が開始されます
            notifyContentAllowed();
        }
    }

ライブTV対応サンプルアプリ

ライブTVが統合されたサンプルアプリは、GitHub(github.com/amzn/ftv-livetv-sample-tv-app)で入手できます。このライブTV対応サンプルアプリは、GoogleのサンプルTVアプリをベースとしています。Fire TVへのライブTV統合のリファレンスとして、このサンプルアプリを使用できます。

サンプルアプリを読み込むには、以下の手順を実行します。

  1. https://github.com/amzn/ftv-livetv-sample-tv-appにアクセスして、[Clone or download] をクリックし、[Download ZIP] をクリックします。ダウンロードファイルを解凍します。

    ライブTVを統合するためのサンプルコードがアプリに表示されます。結果を確認するには、次の手順で説明するように、adbを使用してapp-debug.apkファイルをFire TVにサイドロードします。

  2. adbを使用してFire TVに接続します。

    既にデバッグが有効でadbがインストールされている場合は、[設定] > [デバイスとソフトウェア](または [My Fire TV])> [バージョン情報] > [ネットワーク] からFire TVのIPアドレスを取得し、以下を実行してFire TVのIPアドレスをカスタマイズします。

    adb connect 123.456.7.89:5555
    

    123.456.7.89をFire TVのIPアドレスに置き換えてください(コンピューターはFire TVと同じWi-Fiネットワーク上にある必要があるため、企業のVPNを利用していて接続に問題がある場合は、VPNから切断してみてください)。

  3. ビルドされたAPKをサンプルアプリにインストールします。

    adb install -r AndroidTvSampleInput/app/build/outputs/apk/app-debug.apk
    

    レスポンスは次のとおりです。

    Performing Streamed Install
    Success
    

    なお、このサンプルアプリは、本来、スタンドアロンのアプリとして起動するものではありません。その代わり、Fire TVデバイスで利用できるライブTVチャンネルのコードが組み込まれています。

  4. Fire TVデバイスで、[設定] > [アプリケーション] > [インストール済みアプリケーションを管理] の順に移動します。[Sample TV Inputs] を選択します。[アプリを起動] をクリックします。

    Sample TV Inputs
    Sample TV Inputs

    Amazon開発者ポータルが表示されます。

    Amazon Fire TVサイト
    Amazon Fire TVサイト
  5. Fire TVリモコンのホームボタンを押して、この画面から戻ります。次に、[設定] > [ライブTV] > [チャンネル提供元を同期] > [Amazon Sample TV Input] の順にクリックします。

    サンプルチャンネルが読み込まれます。

    チャンネル提供元の同期
    チャンネル提供元の同期
  6. 同期が完了したら、ホームボタンを押します。これで、チャンネルが [放映中のチャンネル] 行と番組表に表示されるはずです。

    [放映中のチャンネル] 行は次のようになります。

    Fire TVの [放映中のチャンネル] 行
    Fire TVの [放映中のチャンネル]

    番組表は次のようになります。

    Fire TV番組表
    Fire TV番組表

    Fire TVの番組表に移動するには、ホーム画面に移動して、[放映中のチャンネル] 行まで下にスクロールし、リモコンのメニューボタンを押してから [番組表] をクリックします。リモコンのマイクボタンを押して「番組表」と言う方法もあります。