開発者コンソール

Fire TV対応アプリ用VSK(Video Skills Kit)について


Fire TV対応アプリ用VSK(Video Skills Kit)について

Fire TV対応アプリ用VSK(Video Skills Kit)を実装すると、自然言語コマンドを使用してアプリの起動やコンテンツ検索、メディア再生の制御、チャンネル変更などを行えるようになります。たとえば、アプリにVSKを実装すると、「<アプリ名>で『ボッシュ』を再生して」や「『ボッシュ』を再生して」などのフレーズを言えば、アプリがメディア再生を始めてくれます。

Fire TV対応アプリ用VSKを実装する場合、まず、AlexaビデオスキルAPI(さまざまなエンドポイントが必要)を実装します。ただし、統合を行う場合は、追加のAPIやサービスが必要になります(例:Amazon Device Messaging(ADM)AWS LambdaAWS IAMLogin with AmazonNode.jsAlexa Client Libraryなど)。Fire TV対応アプリにVSKを組み込むことで、優れた音声エクスペリエンスを提供しながらコンテンツをユーザーに届け、エンゲージメントやコンテンツの見つけやすさの向上を図れるようになります。

Fire TV対応アプリ用VSKで提供される機能

Fire TV対応アプリにVSKを統合することで、以下の機能が利用可能になります。

  • アプリの起動: ユーザーが特定のコンテンツの再生や検索を依頼すると、Alexaが自動的に適切なFire TV対応アプリを起動します。「アレクサ、<アプリ名>を開いて」と話しかけると、アプリのトップ画面に移動します。ビデオスキルを使用すると、AlexaビデオスキルAPI経由でアプリを自動的に起動できるようになります。
  • クイック再生: 「アレクサ、<番組名>を再生して」または「アレクサ、<アプリ名>で<番組名>見せて」と話しかけるだけで、ビデオを再生することができます。 その際、該当コンテンツを含む適切なアプリが開き、Fire TVが自動的に再生を開始します(詳細ページへは移動しません)。
  • 検索: 「アレクサ、<番組名>を探して」と話しかければ、Alexaにコンテンツのユニバーサル検索を依頼できます。 範囲がアプリに限定されていない検索は「ユニバーサル検索」と呼ばれ、カタログに統合されているあらゆるFire TV対応アプリのコンテンツを検索します。検索範囲を特定のアプリに絞る方法は「ローカル検索」と呼ばれ、 「アレクサ、<アプリ名>で<番組名>を探して」や「アレクサ、<アプリ名>で<ジャンル>を検索して」などと話しかけることで実行することができます。
  • トランスポートコントロール: 「アレクサ、早送りして」「アレクサ、5分早送りして」「アレクサ、次」「アレクサ、前」などの発話を使用すると、再生・巻き戻し・一時停止・再開・終了などの操作を音声で制御することができます。
  • チャンネル変更: ライブ配信機能を搭載するアプリの場合、「アレクサ、<アプリ名>を見せて」などの発話を通じてチャンネルを切り替えることができます。

よくあるやり取りの例を以下に示します。

ユーザーがあるTV番組の再生をAlexaに依頼します。
ユーザーがあるテレビ番組の再生をAlexaに依頼します。
Fire TV対応アプリにVSK統合を実装することで、Alexaがコンテンツを見つけて再生できるようになります。
アプリで有効化されたビデオスキルを通じて、Alexaがコンテンツを見つけて再生します。

実装する必要があるのは、アプリで利用可能な機能のロジックだけです。たとえば、チャンネル機能がないアプリの場合、VSKでチャンネル変更の動作を実装する必要はありません。

一般的に、音声機能があるとコンテンツの検索と再生を楽に行えるようになります(映画やTV番組を扱うアプリとビデオスキルは相性抜群です)。また、音声機能の搭載はコンテンツへのエンゲージメントを高めるうえでもお勧めです。

音声操作は多くのデバイスにおける標準機能になりつつあります。音声操作によってユーザーエクスペリエンスが簡略化され、アプリの使用率が向上するしくみについて詳しくは、AWSのトレーニングと認定に関するライブラリにあるGetting into the Voice Mindset(英語のみ)を参照してください。

前提条件: カタログ統合

Fire TV対応アプリにVSKを組み込むには、事前にアプリのカタログ統合を実装する必要があります。カタログ統合とは、XMLスキーマで記述されたAmazonのカタログデータフォーマット(CDF)に従ってアプリのメディアを記述し、手順に沿ってカタログをS3バケットに定期的にアップロードするプロセスのことです。

カタログ統合は、IMDb、Amazonプライム・ビデオ、Gracenoteに組み込まれ検出されるのにふさわしい十分な数の長編映画やTV番組シリーズを持つアプリに制限されています。これらのソースに含まれていないコンテンツで構成されたカタログを使用する場合は、Amazonの担当者にお問い合わせください。

カタログ統合の条件を満たさない場合は、Fire TV対応アプリにVSKを実装することはできません。ただしその場合でも、以下の関連技術を利用すれば音声機能の一部をアプリに組み込むことは可能です。

Fire TV対応アプリにビデオスキルを実装する場合、スキルの機能に、MediaSessionと同じトランスポートコントロール機能が自動的に含まれることになります。アプリ内での音声を介したスクロール・選択機能は、VSKのデフォルト機能ですが、KeypadController APIを活用すればさらなるカスタマイズが可能です(Alexaビデオスキルを実装すれば最高水準の音声対応機能を提供できるため、追加の音声統合を行う必要はありません)。

期待されるディレクティブの処理

VSKの統合では、Fire TV対応アプリがどのようなディレクティブを受け取り、それに対してどのように反応すべきかを理解しておく必要があります。「ディレクティブ」とは、Alexaからビデオスキルに送信される、JSON形式で記載されたデータと命令のセットのことです。たとえば、TV番組の検索や、映画の再生などを行うディレクティブがあります。ビデオスキルは、これらのディレクティブをLambda関数に送信します。このLambda関数では、アプリのロジックを使用してディレクティブを処理する必要があります。各ディレクティブの詳細については、APIリファレンスおよび手順9: Alexaディレクティブを解釈して応答するを参照してください。

サポート対象国

Fire TV対応アプリ用VSKは、すべての国でサポートされているわけではありません。サポート対象外の国では、VSKの統合はできません。

さらに、Lambda関数に使用するAWSリージョンは、厳密に適用されます。たとえば、英国に拠点がある場合は、欧州(アイルランド)リージョンを使用しなければなりません。

国とサポートの詳細な一覧については、Fire TV対応アプリ用ビデオスキルのサポート対象国を参照してください。

必要なもの

Fire TV対応アプリにVSKを統合するには、以下が必要になります。

また、Amazonアプリストア開発者コンソール、Alexa開発者コンソール、AWSでさまざまなサービス(IAM、AWS Lambda、Amazon CloudWatch、セキュリティプロファイルなど)を構成する必要もあります。

大まかなワークフロー

Fire TV対応アプリにVSKを統合するには、まずAlexa開発者コンソールでビデオスキルを作成し、同スキルをAWS Lambda関数に関連付けます。ユーザーが音声でアプリと対話すると、クラウドベースのAlexa Voice Serviceがユーザーのコマンドを「ディレクティブ」と呼ばれるJSONオブジェクトに変換します。

ビデオスキルは、このディレクティブをLambda関数に送信します。Lambda関数はリクエストを検査し、必要な検索やその他の処理を実行してから、アプリの動作(結果を返す、再生を開始するなど)に必要な情報をアプリに送信します。Lambda関数は、プッシュ通知サービスのAmazon Device Messaging(ADM)を使用してアプリとの通信を行います。アプリに関連付けられたセキュリティプロファイルが、アプリとADMの間の通信を承認します。

詳細なワークフロー

前のセクションではVSKの大まかなしくみについて触れましたが、今度はワークフローを詳しく見ていきます。Fire TVにおけるビデオスキルのワークフローは、下図のとおりです。

Fire TV対応アプリ用ビデオスキルの説明図とワークフロー
Fire TV対応アプリ用ビデオスキルの説明図とワークフロー

Alexa搭載デバイスが自然言語のコマンドをリッスンする

Fire TVでは、Alexaがユーザーからの自然言語コマンドをリッスンします。サポートされている発話には、検索・再生・アプリの起動・チャンネル変更・トランスポートコントロールなどのコマンドが含まれます。Alexa搭載デバイスは、これらのコマンドをクラウド上でAlexaに送信します。

Alexaがフレーズを処理してディレクティブを生成する

Alexaはクラウド上で自動音声認識の機能を使用してユーザーの発話を処理し、音声をテキスト変換します。また、Alexaは自然言語理解の機能を使用してコマンドを処理し、テキスト内容の意図を認識します(この言語処理と解釈の機能はすべて無料で利用可能です)。

ディレクティブがビデオスキルAPIを介してLambdaに渡される

クラウド上でAlexaがユーザーの発話やコマンドを分析・解釈して出力されたものを「ディレクティブ」と呼びます。 ディレクティブは、JSON形式で記載されたデータと命令のセットのことで、ユーザーの発話に応答する方法を指示するものです。たとえば、ユーザーが「『ビッグバックバニー』を見せて」と話しかけると、Alexaはこれを以下のような特定のJSON構造を持つSearchAndPlayディレクティブに変換します。

{
    "directive": {
        "payload": {
            "entities": [
                {
                    "type": "Video",
                    "uri": "entity://provider/program/amzn1.p11cat.merged-video.8a42b984-28c2-5c09-bd24-8d924e004d3f",
                    "value": "ビッグバックバニー",
                    "externalIds": {
                        "hawaii_us": "tt1254207",
                        "ENTITY_ID": "amzn1.p11cat.merged-video.8a42b984-28c2-5c09-bd24-8d924e004d3f",
                        "imdb": "tt1254207",
                        "tms": "MV006850300000"
                    }
                },
                {
                    "type": "Video",
                    "uri": "entity://provider/program/amzn1.p11cat.merged-video.4176eed9-eb18-546a-b934-314f50abe8db",
                    "value": "ビッグバックバニー",
                    "externalIds": {
                        "ENTITY_ID": "amzn1.p11cat.merged-video.4176eed9-eb18-546a-b934-314f50abe8db"
                    }
                },
                {
                    "type": "Video",
                    "uri": "entity://provider/program/amzn1.p11cat.merged-video.1ef9c397-544b-5632-a0d3-9b6439113616",
                    "value": "ビッグバックバニー",
                    "externalIds": {
                        "ENTITY_ID": "amzn1.p11cat.merged-video.1ef9c397-544b-5632-a0d3-9b6439113616",
                        "tms": "12631647"
                    }
                },
                {
                    "type": "Video",
                    "uri": "entity://provider/program/amzn1.p11cat.merged-video.5cdb7c5c-8771-55cd-b552-215e131223f1",
                    "value": "ビッグバックバニー",
                    "externalIds": {
                        "ENTITY_ID": "amzn1.p11cat.merged-video.5cdb7c5c-8771-55cd-b552-215e131223f1"
                    }
                },
                {
                    "type": "Video",
                    "uri": "entity://provider/program/amzn1.p11cat.merged-video.3cabe805-968e-5001-813c-f46b5b1069d7",
                    "value": "ビッグバックバニー",
                    "externalIds": {
                        "ENTITY_ID": "amzn1.p11cat.merged-video.3cabe805-968e-5001-813c-f46b5b1069d7",
                        "tms": "SH023726740000"
                    }
                }
            ]
        },
        "header": {
            "payloadVersion": "3",
            "messageId": "72dfff1c-17df-44c5-acbb-19f491e87609",
            "namespace": "Alexa.RemoteVideoPlayer",
            "name": "SearchAndPlay",
            "correlationToken": "1bb6264b-e248-4087-901e-30c3462082b7"
        },
        "endpoint": {
            "endpointId": "1736bf8bd3091561##amzn1-ask-skill-4c43ae24-ee76-4a78-a189-cc06b64d1be8##development##com-fireappbuilder-android-football-streamz",
            "cookie": {
                "VSKClientVersion": "1.4.5",
                "deviceType": "A2LWARUGJLBYEW",
                "appPackageName": "com.fireappbuilder.android.football.streamz",
                "deviceId": "G070L809716314UB",
                "appName": "Alexa VSKを使用するFire TV対応サンプルアプリ",
                "applicationInstanceId": "amzn1.adm-registration.v3.Y29tLmFtYXpvbi5EZXZpY2VNZXNzYWdpbmcuUmVnaXN0cmF0aW9uSWRFbmNyeXB0aW9uS2V5ITEhYUtudnpaOU1xYlV5aU04NElIdU80a3FYa29lVVFDbE5oa2QzM3FhL3hPUzFMaTNmOXBhTkZPeTVaUmFYK3RaU01Cc2Q4b0U0ZzVkOVdhZDR0TVIyb2UxMitUd3dwL0ZEaGpKMkN3bXJhUnUvNThOa0VCRmg1TzYrVmxGN1ZadWlwWmpZZnhEeU1USW1NY1d2MGZYZVMyVDRjVVZSdGtrMWJoQ1FNWEoyQlpRbVNBUmM1V2R5dG5TWUhJZHNwNHg3TzM0MExwQzh4NlhtZlpJY2lpZS9IZktpM0xDYkNFUHlWUTJYU2ZJdVZXNGk3T0c2T0xpWDVlTkl3YXVVZjAyd3JTWGpHVGJrMHRNYU5DcHQ4NGhBVVphQnBHR3dCclVDWGFjcURrUWhMWnd2WjZtZEhqcjNOSkhHd0RDNWt3UGdDWlVRZXRQUkVNVnNqNldlNWtMZ3A0VDdubUZ6SklSeStiSjkxMFEveVh3PSFINFJjeWd2djlCQ2Q1c3NocEptVU5RPT0"
            },
            "scope": {
                "token": null,
                "type": "BearerToken"
            }
        }
    }
}

この場合、ビデオスキルのカタログは「hawaii_us」という名前です。 entities配列の最初の項目には、このメディアへの参照が含まれています。

Lambda関数で処理できるディレクティブの種類は、以下のとおりです。

ディレクティブ 説明
RemoteVideoPlayer - SearchAndPlay ユーザーが特定ビデオコンテンツの再生をAlexaにリクエストした際に送信されます。
RemoteVideoPlayer - SearchAndDisplayResults ユーザーがビデオコンテンツの検索をAlexaにリクエストした際に送信されます。
PlaybackController ユーザーがビデオコンテンツの再生、停止、ナビゲーションをリクエストした際に送信されます。
SeekController ユーザーが時間を指定して早送り(またはスキップ)や巻き戻しをリクエストした際に送信されます。
ChannelController ユーザーがチャンネルの変更をリクエストした際に送信されます。
RecordController ユーザーが録画の開始または停止をリクエストした際に送信されます。
VideoRecorder ユーザーが録画の検索、キャンセル、または削除をリクエストした際に送信されます。
KeypadController ユーザーが左右へのスクロール、ページの上下スクロール、フォーカスされているアイテムの選択をリクエストした際に送信されます。

アプリが処理できるディレクティブのみを受け取ることができます。Lambda関数とアプリで、Discoverディレクティブへの応答やAlexa Client Libraryの統合でサポートする一連の機能を宣言します。AlexaはビデオスキルAPIを介して、これらのディレクティブをAWS Lambda関数に送信します。

Lambdaがディレクティブを処理する

Lambdaは、コードをホストするサーバーを必要とせずに、クラウド上でコードを実行できるAWSのサービスです(サーバーレスコンピューティング)。Lambda関数は、ビデオスキルAPI経由で渡されるディレクティブを処理し、簡単なステータスメッセージで応答します。

Lambda関数はさまざまなプログラミング言語に対応していますが、このテクニカルドキュメントで扱うLambdaサンプルコードではNode.jsを使用しています。Lambda関数におけるロジックのプログラミングは、開発者側で行ってください。つまり、Lambda関数にディレクティブを渡す役割はAmazon側が担いますが、必要なアクションをアプリに組み込むのは開発者側ということです。

Lambdaに送信されるディレクティブを処理する方法は複数あります。以下に例を示します。

  • Lambda関数をコーディングして、Lambda関数内でディレクティブを完全に処理する。必要な情報を取得するために、Lambda関数がバックエンドのデータベースやその他サービスに対してクエリを実行する場合があります。Lambdaは、必要なアクションを実行するか、適切な情報を取得してから、アプリに命令を送信します。
  • Lambda関数からディレクティブを直接アプリに送信して、アプリ側でディレクティブの処理を行う。たとえば、アプリ側でクエリやその他サービスを実行して検索を行い、必要な情報を取得してから次のアクションに移ることが可能です。

LambdaがADMを介してアプリに命令を送信する

Lambda関数はAlexaから受信したディレクティブを処理した後、Amazon Device Messaging(ADM)経由のプッシュ通知を通じてFire TV対応アプリに命令を送信します。また、Fire TV対応アプリに統合されたAlexa Client Libraryがアクティブなアプリの情報をAlexaに伝え、Alexaがそのアプリを優先できるようにします。Alexa Client Libraryは音声対応をサポートするJavaライブラリで、スキルを自動的に有効化させる際にAlexaでアプリを認証するのに役立ちます。

Alexaは、Lambda関数に送信されるディレクティブにADM登録IDが含まれていることを確認してくれます。異なるプッシュ通知アーキテクチャとクラウドサービスを使用する場合は、ADMに代わるものを参照してください。

ADMからの受信メッセージに応じてアプリが動作する

命令を受け取ったアプリは、ユーザーのリクエストに応じたアクションを実行します。例として、「映画のタイトルを表示する」アクションが考えられます。繰り返しますが、ディレクティブはLambda関数で処理することも、アプリで処理することも可能です。

開発にかかる推定所要時間

Fire TV対応アプリにVSKを完全統合するには、数週間から数か月かかることがあります。コンテンツのカタログ統合が既に完了している場合、VSKの実装に必要な開発作業の大部分を占めるのは、Lambda関数から受信したディレクティブを処理するためのロジック作成です。

Fire TV対応アプリにVSKを組み込むプロセスは、一連の手順から成ります。詳細については、「Fire TV対応アプリ用VSK(Video Skills Kit)の実装プロセスについて」に記載された統合の手順を参照してください。

最初に、サンプルアプリ(VSKが既に統合されています)とサンプルLambda関数(一般的なディレクティブの簡単な処理が既に含まれています)を使用して統合を行います。この統合作業は、Android、AWS、Amazon開発者コンソールに関する習熟度にもよりますが、4時間(半日)程度かかります。このシンプルな統合を通じて、AlexaからクラウドのLambda関数に送信されるディレクティブを確認できるので、実装範囲の理解が深まるはずです。

サンプルアプリでの統合が完了したら、実際のアプリでも同じ統合手順を実行する必要があります。

VSKにおけるその他の実装

Fire TV対応アプリへのVSK実装に加えて、Echo ShowなどのマルチモーダルデバイスにもVSKを実装することができます。Echo ShowやShowモードを搭載したサードパーティ製デバイスのようなマルチモーダルデバイスでは、メディア再生時に既存のHTML5ウェブプレーヤーとAmazon用カタログ統合を利用する「アプリレス」フレームワークを使用します。デバイスで参照や検索をレンダリングするための既存テンプレートも複数提供されます。詳細については、マルチモーダルデバイス用VSK(Video Skills Kit)についてを参照してください。

セットトップボックスやコンソール、スマートテレビなどを作るデバイスメーカーは、これらのデバイスにVSKを直接実装することで、ユーザーがアプリの起動やチャンネルの変更などを行えるようにすることができます。デバイスへのVSK実装には、生放送やビデオオンデマンドのコンテンツ用に用意されたGracenoteカタログの活用や、再生・検索・ナビゲーション・録画機能をサポートするLambdaの構築、デバイスソフトウェアが送信する状態情報の確認、Cloud to Device(C2D)通信の処理などが必要です。詳細については、リビングルームデバイス向けビデオスキルを参照してください。

VSKと画面表示を使用するカスタムスキルの違い

VSKは、カタログコンテンツのほとんどがIMDbにあるビデオプロバイダー(または音声対話型デバイスを開発するデバイスメーカー)向けに設計されています。この実装では、開発したFire TV対応アプリまたはビデオサービスでAlexaからのディレクティブを処理して、「アレクサ、『インターステラー』を再生して」などのリクエストをサポートできるようにします。

これに対して、Alexaスキルに付随する視覚要素(画像、短いビデオクリップ、画面に表示されるテキストなど)だけを提供する場合は、(ビデオスキルではなく)カスタムスキルを作成し、Alexa Presentation Language(APL)を使用してDisplayテンプレートで視覚エクスペリエンスをレンダリングします。たとえば、クイズスキルに関連するテキストや画像をEcho Showの画面に表示することもできます。VSKを使用してビデオコンテンツのより複雑な対話型音声エクスペリエンスを構築するのではなく、こちらのエクスペリエンスを構築する場合は、画面付きのAlexa搭載デバイス用のスキルの作成を参照してください。画面表示を使用するカスタムスキルの実装プロセスはよりシンプルで、開発にあたり広範な専門知識は必要ありません。

用語集

Alexaでは、聞き慣れない用語が新たに増えてきています。定義については、用語集を参照してください。

次のステップ

Fire TV対応アプリへのVSK実装を開始するには、Fire TV対応アプリ用VSK(Video Skills Kit)の実装プロセスについてを参照してください。