Lambda自定义 (VSK Echo Show)
本指南重点介绍可帮助您识别和更新Lambda中最重要可自定义部分的任务。
使用您的目录名称
更新目录名称可以在创建技能之前进行,也可以在初始部署之后进行。
创建视频技能之前
按照以下步骤使用您自己的目录而不是ontv:
-
在
./lambda/src/utils/constants.js中将CATALOG_NAME更改为您自己的目录名称。例如:export const Constants = { ... // 将此替换为您自己的目录名称以使用您自己的目录。 CATALOG_NAME: 'mycatalog', ... } - 通过编辑
./infrastructure/video-skill/skill.json文件,更改技能清单中的目录名称。具体而言,更新sourceId值。例如:"catalogInformation": [ { "type": "INGESTED_CONTENT_IDENTIFIER", "sourceId": "mycatalog" } ] - 继续进行从安装、构建和部署参考视频技能: 步骤3开始的部署流程。
创建视频技能之后
如果您的技能已经存在,则必须执行以下操作:
- 打开Alexa开发者控制台(使用此特定链接查看您的现有技能)。
- 在您的技能上单击Edit(编辑)。
- 使用您的目录名称更新Country Specific Configuration(特定于国家/地区的配置)
- 单击保存。
- 在计算机上运行
--update --lambdaCLI命令。
使用您的目录内容
将./lambda/src/database/database.js中的videoDatabase替换为您自己的视频数据库。
Lambda将内存中数据库存储在./lambda/src/database/database.js中。其目的是维护和推送您的所有视频作品和S3视频路径。最初,每个视频路径都指向“Big Buck Bunny”示例视频,但“Iron Man 2”除外,它映射到一个名为“Elephants Dream”的视频。
典型的视频对象如下所示:
{
id: 'MV009844570000',
name: 'The Commuter',
contentType: 'ON_DEMAND',
videoUrl: 'big-buck-bunny/Bug.Buck.Bunny.mp4',
actors: ['Liam Neeson', 'Vera Farmiga', 'Patrick Wilson'],
genre: ['Action', 'Highly Rated', 'Recommended Movies'],
thumbnailImageDescription: 'The Commuter',
thumbnailImageSources: [
{
url: 'big-buck-bunny/Big.Buck.Bunny.thumbnail.png',
size: 'SMALL',
widthPixels: 720,
heightPixels: 480
}
],
contentDescription: 'movie',
parentalControl: 'NOT_REQUIRED',
absoluteViewingPositionMilliseconds: '0',
itemType: 'VIDEO',
releaseYear: '2018',
selectionAction: 'PLAY',
runTimeInMilliseconds: 635000,
runTimeDisplayString: '9m',
closedCaptionStatus: 'AVAILABLE',
closedCaptionDisplayString: 'CC',
viewingDisplayString: 'Play Now',
reviewsTotalReviewCount: '84823',
reviewsType: 'FIVE_STAR',
reviewsRatingDisplayString: '6.3',
ratingCategory: 'G',
webPlayerContentType: 'VIDEO'
}
videoUrl和url值与S3存储桶的content文件夹的结构相关,并与CLI工具生成它的方式有关。此数据库结构遵循Alexa标准(例如,runTimeInMilliseconds是ASK中定义的视频持续时间)。按照此结构中的定义更新您自己的视频内容元数据。
--update --lambda。使用您的数据库实现
将./lambda/src/access/in-memory-db-access.js中的方法替换为您自己的实现,以访问您自己的数据库并启用搜索。为了正确包含您自己的实现,请更新所有.filter方法,例如:
.filter(item => {
return this._commonIdentifierMatch(item.name, videoName)
})
在搜索结果中添加新的可显示元数据
如果您想在搜索表述的结果中添加新的元数据,则必须遵循以下流程:
- 将新的元数据添加到您的
database.js文件中。(强烈建议您不要更改现有的元数据。) - 将新的元数据添加到
VideoData类的构造函数中(位于./lambda/src/models/database-models/video-metadata.js)。 - 在Lambda中,将搜索结果引用到您自己对附加元数据的实现中。
请注意,您还必须确保网页播放器通过特殊令牌(即playbackContextToken)访问新创建的元数据。您的Lambda会将这个令牌传回给Alexa。playbackContextToken包含一个用于描述媒体的值,并通过处理程序传递给您的网页播放器。有关更多详细信息,请参阅以下指南:
示例
假设您想将每个视频的制作公司以字符串数组形式添加到元数据中。请按照以下流程开始:
- 打开您的
./lambda/src/database/database.js文件。 -
将新的
production属性添加到您的对象中,如下所示:{ id: 'MV009844570000', name: 'The Commuter', production: ['StudioCanal', 'TF1 Films Production', 'The Picture Company', 'Obra Films', 'Canal+', 'Cine +', 'TF1', 'Amazon Prime Video'], ... } - 在
./lambda/src/models/database-models/video-metadata.js文件中打开VideoData类。 - 将此行添加到该类的构造函数中:
this.production = options.production
Handler类
本部分概述了此类,以帮助您理解Lambda和网页播放器之间的交互。此时无需对其进行自定义。
Handler是接收来自Alexa的请求指令的主类(它位于.lambda/src/handlers/handler.js中)。根据指令的类型,该类将请求路由到特定于指令的处理程序。所有指令均受支持。
Handler类包含几个特定于参考项目的附加指令。由于您的网页播放器在设备上运行时可能需要再次调用您的Lambda,因此还支持以下指令:
UPDATE_VIDEO_PROGRESS通过更新最新的已知时间戳来支持视频播放。如果用户结束体验并在稍后继续同一视频的流式播放,他们可以从上次离开之处继续播放。REFRESH_WEB_PLAYER_CREDENTIALS支持在网页播放器的安全IAM凭证到期之前对其进行刷新。
自定义登录页面中的类别数量
根据设备的屏幕尺寸,通过更改./lambda/utils/constants.js中的NUM_CATEGORIES_ON_LANDING_PAGE,在登陆页面上最多显示五个类别。
后续步骤
请参阅网页播放器概述。
Last updated: 2020年10月29日

