在Echo Show上实现VSK的过程概述 (VSK Echo Show)
了解如何让现有视频技能能够在多模式设备上流式传输内容。有关多模式设备上所有可能的语音功能的描述,请参阅多模式设备视频技能工具包概述。
一般架构
在多模式设备上,视频技能的语音交互结果“直接送回Alexa”以提升设备体验,这与Fire TV应用视频技能架构不同,该架构必须通过Amazon Device Messaging (ADM) 从Lambda发送到您的Fire TV应用。
下图显示了多模式设备上的视频技能工作流程:
作为开发者,您不必在此过程的每个阶段都采取行动。但是,要提供成功的用户体验,您必须清楚地了解幕后发生的情况。
用户说出短语
Alexa侦听用户的自然语言命令。支持的表述包括用于搜索、播放、频道更改、快进或快退(传输控制)等的短语。
多模式设备将表述发送到Alexa云端以进行处理/确定意图
多模式设备将这些表述发送到云端Alexa。在云中,Alexa使用自动语音识别处理用户的表述,并将语音转换为文本。作为开发者,您可以免费获得所有此类语言处理和解释。
Alexa在云端的输出用于解析和解释用户的表述/命令。这形成了一个“请求”,一组以JSON对象表示的数据和指令,为如何回应用户的表述提供指导。
例如,当用户说“Play Bosch”(播放Bosch)时,云端Alexa会将此转换为具有特定JSON结构的GetPlayableItems指令,如下所示:
{
"directive": {
"profile": null,
"payload": {
"minResultLimit": 1,
"entities": [
{
"externalIds": null,
"type": "MediaType",
"value": "MOVIE",
"entityMetadata": null,
"mergedGroupId": 0
},
{
"externalIds": {
"catalog_name": "123456"
},
"type": "Video",
"value": "Bosch",
"entityMetadata": null,
"mergedGroupId": 1
}
],
"timeWindow": null,
"locale": "en-US",
"contentType": null,
"maxResultLimit": 40
},
"endpoint": {
"cookie": {},
"endpointId": "ALEXA_VOICE_SERVICE_EXTERNAL_MEDIA_PLAYER_VIDEO_PROVIDER",
"scope": {
"token": "1dc32f5e-1694-38a0-1af6-e948f45adad9",
"type": "BearerToken"
}
},
"header": {
"payloadVersion": "3",
"messageId": "01c46fa2-fcca-4c24-93bd-e6bed03ef906",
"namespace": "Alexa.VideoContentProvider",
"name": "GetPlayableItems",
"correlationToken": null
}
}
}
下表列出了生成的请求种类:
| 功能 | 示例表述 |
|---|---|
| 快速播放 | “Alexa, play <TV show> on <video provider>”(Alexa,播放<视频提供方>上的<电视节目>)、“Alexa, watch <TV show> on <video provider>”(Alexa,观看<视频提供方>上的<电视节目>) |
| 频道导航 | “Alexa, tune to <channel>”(Alexa,调到<频道>) |
| 播放控制 | “Alexa, pause”(Alexa,暂停)、“Alexa, fast forward”(Alexa,快进) |
| 搜索 | “Alexa, find comedies on <video provider>”(Alexa,在<视频提供方>上查找喜剧片) |
| 浏览 | “Alexa, show me videos”(Alexa,显示视频)、“Alexa, open <video provider>”(Alexa,打开<视频提供方>) |
| 视频主页 | “Alexa, show me videos”(Alexa,显示视频)、“Alexa, go to Video Home”(Alexa,前往视频主页)、“Alexa,Video Home”(Alexa,视频主页)。 |
Alexa云确定视频技能目标并将意图有效负载发送给合作伙伴Lambda
Alexa确定该请求的目标视频技能,然后使用Video Skill API将此请求发送到您的AWS Lambda函数。视频技能为您的Lambda函数提供资源ID。
Lambda是一种在云中运行代码的AWS服务,您无需拥有服务器即可托管代码(无服务器计算)。您的Lambda函数可以用多种编程语言编写,但是,示例Lambda代码使用的是Node.js。请注意,您负责在Lambda函数中开发逻辑,但是示例代码可为您加快这一过程。
从Alexa云发送的请求包含意图有效负载,您的Lambda会根据该有效负载执行操作。
合作伙伴Lambda探索已通过验证,并在多模式设备上调用视频技能
Alexa云连接您的Lambda后,将在多模式设备上调用您的视频技能。视频技能包含您的网页播放器的URI,以便该技能知道要在客户的设备上加载哪个网页播放器。
合作伙伴Lambda进一步处理请求并将有效负载发送到合作伙伴服务
您的Lambda函数会联系后端服务以获取有关处理请求的信息。例如,根据您的Lambda收到的请求,您可能需要执行查找、查询或其他信息检索功能。
合作伙伴服务处理请求并响应Lambda
您的后端服务会处理请求。您的服务后端的确切外观因合作伙伴而异,描述这些流程超出了本文档的范围。无论您的流程如何运行,您的Lambda都需要获取请求的信息并将其返回给Alexa。
Alexa JavaScript库接收来自Lambda的有效负载并运行请求(播放、搜索或传输)
您的网页播放器与Alexa JavaScript库集成。该库支持与Alexa云通信,可管理生命周期事件等。
合作伙伴网页播放器环境从合作伙伴服务接收资产/流URL
您的网页播放器从您的后端服务接收有关要流式播放的内容的信息,例如资产、URL等。例如,在执行播放某个作品的请求时,您的网页播放器可能会收到与该作品相关的缩略图以及流式播放该作品的URL。
Alexa JavaScript库向合作伙伴Lambda传达响应
Alexa JavaScript库会将响应传回您的合作伙伴Lambda,以验证对资产、URL的接收以及所采取的任何其他操作。
合作伙伴Lambda向Alexa云发送响应
您的Lambda向Alexa云发送响应。根据收到的请求,响应需要符合特定JSON结构(在参考文档中定义)。
例如,如果您的Lambda收到GetPlayableItems请求,则您的Lambda可能会使用如下所示的GetPlayableItemsResponse响应进行响应:
{
"event": {
"header": {
"correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg==",
"messageId": "5f0a0546-caad-416f-a617-80cf083a05cd",
"name": "GetPlayableItemsResponse",
"namespace": "Alexa.VideoContentProvider",
"payloadVersion": "3"
},
"payload": {
"nextToken": "fvkjbr20dvjbkwOpqStr",
"mediaItems": [{
"mediaIdentifier": {
"id": "videoId://amzn1.av.rp.1234-2345-63434-asdf"
}
}]
}
}
};
有关允许对您的Lambda收到的请求做出哪些响应的更多详细信息,请参阅参考文档。
请注意,向Alexa发回信息(而不是通过ADM将指令推送到应用)是Fire TV应用和多模式设备上视频技能在工作流程中的主要区别。对于Fire TV应用,您的Lambda只需提供有关已收到请求的简短状态消息,然后通过ADM将指令发送到您的应用。但是对于多模式设备,您实际上是将所请求的信息发回Alexa。
Alexa云处理响应并通过多模式设备提供相应的文本转语音 (TTS)(如果需要)
Alexa与多模式设备通信以履行用户的请求。这很可能涉及为媒体播放提供内容URI或提供搜索结果。响应还可能包括Alexa向用户传达的文字转语音命令。例如,Alexa可能会要求用户在类似匹配中消除请求歧义。
实现步骤
在多模式设备上实现视频技能的过程如下:
快速入门
此处的初始实现步骤提供了快速入门设置,其中包含示例Lambda函数、网页播放器、目录和技能资产,因此您可以查看基本流程。这个基本设置允许您说出“Alexa, play the movie Big Buck Bunny”(Alexa,播放电影Big Buck Bunny),从而在Echo Show设备上播放视频。
后续步骤
前往步骤1: 创建您的视频技能和Lambda函数,开始构建您的视频技能。
Last updated: 2020年10月29日

