alexa - audioPlayer.Play проблема с отображением контента на экране Echo Show Now Playing - PullRequest
0 голосов
/ 31 мая 2018

У меня возникли проблемы с пониманием того, как отображать изображения на эхо-шоу на экране «Сейчас воспроизводится» audioPlayer.

В настоящее время я воспроизводю аудиофайл и хочу отобразить изображение на экране «Сейчас исполняется»экран.Самым близким, что мне удалось получить, является следующий код, который отображает изображение и заголовок непосредственно перед началом звука, но затем сразу же исчезает, и эхо-шоу переходит на экран «Сейчас исполняется» без фонового изображения и метаданных.Я чувствую, что я близок, но просто не могу понять, как обновить экран «Сейчас играет», а не экран, который появляется непосредственно перед ним.

Это часть кода (которая работает как описано выше):

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);, так как она все равно кратковременно мигает, прежде чем экран «Сейчас исполняется»).

Есть идеи, как этого добиться?

Спасибо!

Обновление:

Я добавил следующее в 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;
}

Но я по-прежнему не вижу ничего на экране «Сейчас играет».

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

По какой-то причине Echo Show не обновляется в реальном времени, и его необходимо перезагрузить, прежде чем оно покажет все, что передано в переменную метаданных, поэтому я не вижу никаких результатов.

Просто прохождениепеременная как таковая работает нормально.Мне просто нужно выяснить, почему контент зависает на экране «Сейчас исполняется» и требует перезагрузки для работы.

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"
          }
        ]
      },
0 голосов
/ 01 июня 2018

Просто определите ваши метаданные, как показано ниже.И передайте его в качестве шестого аргумента в 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)

PS Чтобы это работало должным образом, вам нужно изменить модули вашего узла, которые вы будете архивировать и загружать в лямбду.

шаги- Перейдите к вашему 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;
    }

PS - Модификации модуля узла требуются, только если вы используете alexa-sdk версии 1.

...