云端集成概述 (VSK Fire TV)
要为您的Fire TV应用实现VSK,您主要需要实现Alexa Video Skill API。但是,通过云端集成,您还将涉及其他API和服务,包括Amazon Device Messaging (ADM)、AWS Lambda、AWS IAM、Login with Amazon、Node JS、Alexa客户端库等。对您的Fire TV应用集成VSK可为客户提供最丰富的应用语音体验,从而提高内容的参与和发现水平。
概述
通过Fire TV应用,Alexa可以侦听用户的表述,然后将这些表述转换为指令。指令是从Alexa发送至您云中的Lambda函数的一组数据和指示,以JSON表示。
例如,当用户说出“Play Bosch”(播放Bosch)时,Alexa会将此转换为具有特定JSON结构的搜索指令。其他类型的指令包括播放指令、频道更改指令等。Alexa的工作是将用户的表述映射到可以用编程方式处理的正式指令。
然后,Video Skill API将这些指令传送到您在AWS上的Lambda代码。Lambda是一种在云中运行代码的AWS服务,您无需拥有服务器即可托管代码。您的Lambda代码可以处理视频技能中的指令。然后,您的Lambda使用Amazon Device Messaging (ADM) 向您的应用发送操作。
您需要具备的条件
您需要什么取决于您选择的实现方式 - 无论是云还是仅限应用。要将VSK与您的Fire TV应用集成,您将需要具备以下所列项:
- AWS账户
- 亚马逊开发者账户
- Android Studio
- 视频技能的标志图像
- Fire TV流媒体应用 (Android)。建议您在开始时使用Fire TV示例应用来查看VSK的工作原理。然后,将VSK集成到您自己的应用中。
- Echo Dot或类似的支持Alexa的设备
- Fire TV Stick和一台电视,或一台Fire TV Edition(不在中国发售)。
- Node JS和npm(Node安装包含npm)。在本文档中,Node JS用于将Lambda函数转换为压缩包,然后将其上传到AWS Lambda中。但是,您可以使用其他编程语言(除了Node.js)来编写Lambda代码。
- 集成目录的媒体
- Alexa智能手机应用 (Android | iOS)
大体工作流程
大体而言,要对您的Fire TV应用集成VSK,首先要在Alexa开发者控制台中创建视频技能,然后将其与AWS上的Lambda函数相关联。当用户通过语音与您的应用交互时,云中的Alexa语音服务将用户发出的命令转换为JSON对象,称为指令。
您的视频技能会将这些指令发送至您的Lambda函数。您的Lambda函数检查请求,执行任何所需的查找或其他处理,然后将所需信息发送到您的应用。Lambda函数使用推送通知服务Amazon Device Messaging (ADM) 与您的应用通信。与您的应用关联的安全配置文件授予在您的应用与ADM之间通信的权限。
收到来自您的Lambda函数的通信后,您的应用将按要求显示结果列表或所请求媒体的初始播放。
详细工作流程
上一部分大体解释了VSK工作原理。现在,让我们更详细地了解视频技能工作流程。下图显示了Fire TV上的视频技能工作流程:
支持Alexa的设备可侦听自然语言命令
在Fire TV上,Alexa侦听用户的自然语言命令。支持的表述(Alexa理解的措词)包括搜索、播放、应用启动、频道更改和传输控制命令。支持Alexa的设备将这些命令发送到云中的Alexa。
Alexa处理措词并生成指令
在云中,Alexa使用自动语音识别处理用户的表述,并将语音转换为文本。Alexa还通过自然语言理解来处理命令,以识别文本的意图。(作为应用开发者,您可以免费获得所有此类语言处理和解释。)
指令通过Video Skill API传递到Lambda
Alexa在云中的输出是一项指令,处理用户表述的解析和解释。指令是一组数据和指示,以JSON对象表示。例如,当用户说出“Watch Big Buck Bunny”(观看Big Buck Bunny)时,Alexa会如下将此表述转换为具有特定JSON结构的SearchAndPlay
指令:
{
"directive": {
"payload": {
"entities": [
{
"type": "Video",
"uri": "entity://provider/program/amzn1.p11cat.merged-video.8a42b984-28c2-5c09-bd24-8d924e004d3f",
"value": "Big Buck Bunny",
"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": "Big Buck Bunny",
"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": "Big Buck Bunny",
"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": "Big Buck Bunny",
"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": "Big Buck Bunny",
"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 |
当用户请求更改频道时发送 |
KeypadController |
当用户请求向右或向左滚动、向上或向下翻页或选择聚焦项目时发送。 |
在您的Lambda和应用中,您在响应Discover
指令时声明您支持的功能列表。集成Alexa客户端库时,您还可以在应用中列出这些功能。
您声明的功能决定了Alexa将向您的Lambda发送哪些指令。例如,如果您没有声明ChannelController
功能,Alexa不会向您的Lambda发送任何ChannelController
指令。
Lambda处理指令
Lambda是一种在云中运行代码的AWS服务,您无需拥有服务器即可托管代码(无服务器计算)。您的Lambda函数处理Video Skill API传送的这些指令,然后使用简短的状态消息进行响应。
您的Lambda函数可以使用多种编程语言,但本文档中的示例Lambda代码使用的是Node JS。您需要负责在Lambda函数中编制逻辑。换句话讲,亚马逊将指令传递给您的Lambda函数,您则负责确定如何将所需的操作整合到您的应用中。
您可以灵活地处理传入Lambda的指令。您可以通过两种主要方式处理指令:
- 您可以对Lambda函数进行编码,以完全在Lambda函数本身内处理指令。您的Lambda函数可能需要查询后端数据库或其他服务来进行查找以获取所需信息。在Lambda执行所需的操作或检索到正确的信息后,Lambda可以将指示发送到您的应用。
- 您的Lambda函数可以将指令直接传递至您的应用,并且您的应用可以进行该指令的处理。例如,在执行某些操作之前,您的应用可以执行查询或其他服务来进行查找以获取所需的信息,以及执行其他处理。
Lambda通过ADM向您的应用发送指示
在您的Lambda函数处理来自Alexa的传入指令后,您的Lambda函数使用Amazon Device Messaging (ADM) 通过推送通知向您的Fire TV应用发送指示。您的Fire TV应用将整合Alexa客户端库,这是一个Java库,可帮助您的应用启用语音。该库通过向Alexa提供此上下文来帮助Alexa在您的应用处于活动状态时对其划分优先级。该库还有助于通过Alexa对应用进行身份验证,以自动启用技能。
Alexa将确保您的ADM注册ID包含在发送至您的Lambda函数的指令中。(如果您更希望使用不同的推送通知架构和云服务,可以参阅ADM的替代方案。)
您的应用对来自ADM的传入消息进行操作
您的应用会接收指示并为用户执行所需的结果。例如,您的应用中的操作可能是向客户展示电影标题。同样,您的Lambda函数可以直接执行指令的处理,或者您的应用可以处理指令。
预计开发时间
让您的Fire TV应用完全集成VSK可能需要几周到几个月的时间。假设您的内容已经集成目录,那么VSK的大部分开发工作涉及创建逻辑来处理Lambda函数收到的传入指令。
对您的Fire TV应用集成VSK的过程分为一系列步骤。请参阅集成步骤以开始此过程。
您将首先使用示例应用(已经集成了VSK)和示例Lambda函数完成集成。初始集成大约需要半天(取决于您对Android、AWS和亚马逊开发者控制台的熟悉程度)。这种简单的集成将让您可以查看从Alexa发送到您在云中的Lambda函数的指令。查看指令将让您更好地了解实现范围。
完成与示例应用的集成后,您需要对实际应用执行相同的集成步骤。
集成后的结果
在集成过程的第一部分中,您将设置视频技能、示例Fire TV应用和基本Lambda函数,作为测试VSK实现的快捷途径。这将让您能够看到视频技能的实际运行情况,其中Alexa会响应用户的请求,所有请求都与Fire TV应用进行交互以查找和播放视频。您将在支持Alexa的设备或应用上启用以下交互。启动应用后,假设您的视频技能名为“Streamz”,则将支持以下互动:
用户: Alexa, watch Big Buck Bunny(Alexa,观看Big Buck Bunny)
Alexa: Getting Big Buck Bunny from Streamz(从Streamz获取Big Buck Bunny)
用户: Alexa, find Big Buck Bunny(Alexa,查找Big Buck Bunny)
Alexa: Getting Big Buck Bunny from Streamz.(从Streamz获取Big Buck Bunny)。
用户: Alexa, play(Alexa,播放)
用户: Alexa, pause(Alexa,暂停)
交互结束。
该示例应用的目录中仅有几个视频标题,不支持频道更改或更高级的指令。在集成过程的后续步骤中,您将自定义Lambda以处理您的应用支持的指令。
集成步骤
将Video Skill API集成到Fire TV应用中的过程可分为以下步骤:
VSK云端集成
为了演示集成,提供了一个示例Fire TV应用,该应用整合了Alexa客户端库、ADM,并具有其他一些逻辑来解析消息和播放匹配的目录标题。您不需要在实现步骤中使用此示例应用 - 您可以使用自己的应用执行相同的步骤。这些指示将提供两种途径的选项(使用示例应用或您的实际应用)。
先决条件 目录集成
必须先完成目录集成,然后才能将VSK整合到您的应用中。要将您的目录与Fire TV集成,请参阅以下内容:
- 目录引入:目录引入是指以下过程:根据亚马逊的目录数据格式 (CDF)(一种XML架构)描述应用的媒体,然后定期将您的目录上传到S3存储桶。目录集成限于包含长篇电影或剧集电视节目(例如IMDb中列出的节目)的应用。有关详细信息,请参阅目录引入入门。
- 通用搜索和浏览集成:您的应用必须集成Fire TV上的通用搜索和浏览。与Fire TV启动器的集成允许您的目录文件将媒体元数据显示到亚马逊的启动器和全球搜索结果中,无论客户是否安装了您的应用。当用户搜索您的应用包含的内容时,他们将在Fire TV的搜索结果中看到该内容。在继续于此处实现VSK之前,请务必完成目录集成的两个方面。
开始使用
转到步骤1: 创建您的视频技能以及设置设备,进入集成过程的第一步。
Last updated: 2023年3月3日