alexa - audioPlayer.Play 在 Echo Show Now Playing 屏幕上显示内容时出现问题
alexa - audioPlayer.Play issue displaying content on Echo Show Now Playing screen
我在理解如何在音频播放器 'Now Playing' 屏幕内的 Echo Show 上显示图像时遇到问题。
我目前正在播放音频文件并想在 'Now Playing' 屏幕上显示图像。我能得到的最接近的是以下代码,它在音频开始之前显示图像和标题,但随后立即消失,Echo Show 进入 'Now Playing' 屏幕,没有背景图像和元数据。我觉得我很接近,但就是无法理解如何更新 'Now Playing' 屏幕,而不是紧接在它之前的屏幕。
这是代码的一部分(按上述方式工作):
var handlers = {
'LaunchRequest': function() {
this.emit('PlayStream');
},
'PlayStream': function() {
let builder = new Alexa.templateBuilders.BodyTemplate1Builder();
let template = builder.setTitle('Test Title')
.setBackgroundImage(makeImage('https://link_to_my_image.png'))
.setTextContent(makePlainText('Test Text'))
.build();
this.response.speak('OK.').
audioPlayerPlay(
'REPLACE_ALL',
stream.url,
stream.url,
null,
0)
.renderTemplate(template);
this.emit(':responseReady');
}
我一直在查看此页面 https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html,但无法理解如何将该页面上的内容结构转换为我的代码。我假设,根据页面上的代码:
{
"type": "AudioPlayer.Play",
"playBehavior": "valid playBehavior value such as ENQUEUE",
"audioItem": {
"stream": {
"url": "https://url-of-the-stream-to-play",
"token": "opaque token representing this stream",
"expectedPreviousToken": "opaque token representing the previous stream",
"offsetInMilliseconds": 0
},
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
"backgroundImage": {
"sources": [
{
"url": "https://url-of-the-background-image.png"
}
]
}
}
}
}
我不知何故需要得到这部分:
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
进入我的代码块:
audioPlayerPlay(
'REPLACE_ALL',
streamInfo.url,
streamInfo.url,
null,
0)
.renderTemplate(template);
(并且可能会丢失 .renderTemplate(template);
部分,因为它只会在 'Now Playing' 屏幕加载之前短暂闪烁。
关于如何实现这一点有什么想法吗?
谢谢!
更新:
我已将以下内容添加到 index.js:
var metadata = {
title: "title of the track to display",
subtitle: "subtitle of the track to display",
art: {
sources: {
url: "https://url-of-the-album-art-image.png"
}
}
};
并对audioPlayer进行如下修改:
audioPlayerPlay(
'REPLACE_ALL',
stream.url,
stream.url,
null,
0,
metadata)
.renderTemplate(template);
并按指示修改 responseBuilder.js:
audioPlayerPlay(behavior, url, token, expectedPreviousToken, offsetInMilliseconds, metadata) {
const audioPlayerDirective = {
type : DIRECTIVE_TYPES.AUDIOPLAYER.PLAY,
playBehavior: behavior,
audioItem: {
stream: {
url: url,
token: token,
expectedPreviousToken: expectedPreviousToken,
offsetInMilliseconds: offsetInMilliseconds,
metadata : metadata
}
}
};
this._addDirective(audioPlayerDirective);
return this;
}
但我仍然没有在 'Now Playing' 屏幕上显示任何内容。
只需如下定义您的元数据。并将其作为第 6 个参数传递给 audioPlayerPlay;
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
audioPlayerPlay(
'REPLACE_ALL',
streamInfo.url,
streamInfo.url,
null,
0,metadata)
P.S。为了使其正常工作,您必须修改要压缩并上传到 lambda 的节点模块。
步骤 -
转到 node_modules\alexa-sdk\lib 并打开其中的 responseBuilder 文件。并修改代码如下-
audioPlayerPlay(behavior, url, token, expectedPreviousToken, offsetInMilliseconds, **metadata**) {
const audioPlayerDirective = {
type : DIRECTIVE_TYPES.AUDIOPLAYER.PLAY,
playBehavior: behavior,
audioItem: {
stream: {
url: url,
token: token,
expectedPreviousToken: expectedPreviousToken,
offsetInMilliseconds: offsetInMilliseconds
},
**metadata : metadata**
}
};
this._addDirective(audioPlayerDirective);
return this;
}
P.S。 - 仅当您使用 alexa-sdk 版本 1 时才需要修改节点模块。
出于某种原因,Echo Show 没有实时更新,需要重新启动才能显示元数据变量中传递的任何内容,这就是我没有看到任何结果的原因。
简单地传递一个变量就可以了。我只需要找出为什么内容卡在 'Now Playing' 屏幕上并需要重新启动才能工作。
var "metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
我在理解如何在音频播放器 'Now Playing' 屏幕内的 Echo Show 上显示图像时遇到问题。
我目前正在播放音频文件并想在 'Now Playing' 屏幕上显示图像。我能得到的最接近的是以下代码,它在音频开始之前显示图像和标题,但随后立即消失,Echo Show 进入 'Now Playing' 屏幕,没有背景图像和元数据。我觉得我很接近,但就是无法理解如何更新 'Now Playing' 屏幕,而不是紧接在它之前的屏幕。
这是代码的一部分(按上述方式工作):
var handlers = {
'LaunchRequest': function() {
this.emit('PlayStream');
},
'PlayStream': function() {
let builder = new Alexa.templateBuilders.BodyTemplate1Builder();
let template = builder.setTitle('Test Title')
.setBackgroundImage(makeImage('https://link_to_my_image.png'))
.setTextContent(makePlainText('Test Text'))
.build();
this.response.speak('OK.').
audioPlayerPlay(
'REPLACE_ALL',
stream.url,
stream.url,
null,
0)
.renderTemplate(template);
this.emit(':responseReady');
}
我一直在查看此页面 https://developer.amazon.com/docs/custom-skills/audioplayer-interface-reference.html,但无法理解如何将该页面上的内容结构转换为我的代码。我假设,根据页面上的代码:
{
"type": "AudioPlayer.Play",
"playBehavior": "valid playBehavior value such as ENQUEUE",
"audioItem": {
"stream": {
"url": "https://url-of-the-stream-to-play",
"token": "opaque token representing this stream",
"expectedPreviousToken": "opaque token representing the previous stream",
"offsetInMilliseconds": 0
},
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
"backgroundImage": {
"sources": [
{
"url": "https://url-of-the-background-image.png"
}
]
}
}
}
}
我不知何故需要得到这部分:
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
进入我的代码块:
audioPlayerPlay(
'REPLACE_ALL',
streamInfo.url,
streamInfo.url,
null,
0)
.renderTemplate(template);
(并且可能会丢失 .renderTemplate(template);
部分,因为它只会在 'Now Playing' 屏幕加载之前短暂闪烁。
关于如何实现这一点有什么想法吗?
谢谢!
更新:
我已将以下内容添加到 index.js:
var metadata = {
title: "title of the track to display",
subtitle: "subtitle of the track to display",
art: {
sources: {
url: "https://url-of-the-album-art-image.png"
}
}
};
并对audioPlayer进行如下修改:
audioPlayerPlay(
'REPLACE_ALL',
stream.url,
stream.url,
null,
0,
metadata)
.renderTemplate(template);
并按指示修改 responseBuilder.js:
audioPlayerPlay(behavior, url, token, expectedPreviousToken, offsetInMilliseconds, metadata) {
const audioPlayerDirective = {
type : DIRECTIVE_TYPES.AUDIOPLAYER.PLAY,
playBehavior: behavior,
audioItem: {
stream: {
url: url,
token: token,
expectedPreviousToken: expectedPreviousToken,
offsetInMilliseconds: offsetInMilliseconds,
metadata : metadata
}
}
};
this._addDirective(audioPlayerDirective);
return this;
}
但我仍然没有在 'Now Playing' 屏幕上显示任何内容。
只需如下定义您的元数据。并将其作为第 6 个参数传递给 audioPlayerPlay;
"metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},
audioPlayerPlay(
'REPLACE_ALL',
streamInfo.url,
streamInfo.url,
null,
0,metadata)
P.S。为了使其正常工作,您必须修改要压缩并上传到 lambda 的节点模块。
步骤 - 转到 node_modules\alexa-sdk\lib 并打开其中的 responseBuilder 文件。并修改代码如下-
audioPlayerPlay(behavior, url, token, expectedPreviousToken, offsetInMilliseconds, **metadata**) {
const audioPlayerDirective = {
type : DIRECTIVE_TYPES.AUDIOPLAYER.PLAY,
playBehavior: behavior,
audioItem: {
stream: {
url: url,
token: token,
expectedPreviousToken: expectedPreviousToken,
offsetInMilliseconds: offsetInMilliseconds
},
**metadata : metadata**
}
};
this._addDirective(audioPlayerDirective);
return this;
}
P.S。 - 仅当您使用 alexa-sdk 版本 1 时才需要修改节点模块。
出于某种原因,Echo Show 没有实时更新,需要重新启动才能显示元数据变量中传递的任何内容,这就是我没有看到任何结果的原因。
简单地传递一个变量就可以了。我只需要找出为什么内容卡在 'Now Playing' 屏幕上并需要重新启动才能工作。
var "metadata": {
"title": "title of the track to display",
"subtitle": "subtitle of the track to display",
"art": {
"sources": [
{
"url": "https://url-of-the-album-art-image.png"
}
]
},