Python Alexa流媒体音频的最简单示例

Python Alexa流媒体音频的最简单示例,python,aws-lambda,alexa-skills-kit,Python,Aws Lambda,Alexa Skills Kit,我正在尝试让新的流式音频API开始运行。以下回答有效吗?当我在我的设备上测试它时,我得到了一个“技能有问题”错误 以下是我的AWS lambda函数的代码: def lambda_handler(event, context): return { "response": { "directives": [ { "type": "AudioPlayer.Play",

我正在尝试让新的流式音频API开始运行。以下回答有效吗?当我在我的设备上测试它时,我得到了一个“技能有问题”错误

以下是我的AWS lambda函数的代码:

def lambda_handler(event, context):
    return {
        "response": {
            "directives": [
                {
                    "type": "AudioPlayer.Play",
                    "playBehavior": "REPLACE_ALL",
                    "audioItem": {
                        "stream": {
                            "token": "12345",
                            "url": "http://emit-media-production.s3.amazonaws.com/pbs/the-afterglow/2016/08/24/1700/201608241700_the-afterglow_64.m4a",
                            "offsetInMilliseconds": 0
                        }
                    }
                }
            ],
            "shouldEndSession": True
        }
    }

以下代码适用于我:

def lambda_handler(event, context):
    return {
        "response": {
            "directives": [
                {
                    "type": "AudioPlayer.Play",
                    "playBehavior": "REPLACE_ALL",
                    "audioItem": {
                        "stream": {
                            "token": "12345",
                            "url": "https://emit-media-production.s3.amazonaws.com/pbs/the-afterglow/2016/08/24/1700/201608241700_the-afterglow_64.m4a",
                            "offsetInMilliseconds": 0
                        }
                    }
                }
            ],
            "shouldEndSession": True
        }
    }
]
唯一的区别是URL是https而不是http


如果在技能模拟器中不起作用,请不要拖延。它还没有升级到流媒体音频。你甚至看不到你的指令。但是,当与您的设备一起使用时,它应该工作。

程序应该在“LaunchRequest”和“sessionedrequest”上返回一些响应,否则您将得到“请求的技能报告有问题”

您需要添加意图“播放音乐”并更改文件的url

另外,我不确定哪个
version
应该在
build\u audio\u response
函数中,我从


我们在Github上创建了一个非常简单的项目,展示了使用AudioPlayer的最简单方法:

我们还在这里为它创建了一个writeup:

该项目演示如何播放曲目,以及暂停和恢复

下面是显示音频文件实际播放的代码:

SimplePlayer.prototype.play = function (audioURL, offsetInMilliseconds) {
    var response = {
        version: "1.0",
        response: {
            shouldEndSession: true,
            directives: [{
                type: "AudioPlayer.Play",
                playBehavior: "REPLACE_ALL", // Setting to REPLACE_ALL means that this track will start playing immediately
                audioItem: {
                    stream: {
                        url: audioURL,
                        token: "0", // Unique token for the track - needed when queueing multiple tracks
                        expectedPreviousToken: null, // The expected previous token - when using queues, ensures safety
                        offsetInMilliseconds: offsetInMilliseconds
                    }
                }
            }]
        }
    }

    this.context.succeed(response);
};

嘿,我看了API。它们有一条与您想要的消息非常相似的示例消息,但有更多字段可标识
标题
有效负载
。API为,消息位于“示例消息部分”。如果你使用这种格式,你仍然会出现错误吗?只是尝试了一下,似乎没有帮助。这确实适用于HTTPS,但是,你如何让它停止?一旦流启动,Cancel和Stop命令就不起作用了。Stop对我来说很有效(我认为它只是放弃了技能),如果你想处理其他意图,你必须为它们编写自定义处理程序。这太好了,非常感谢!你怎么知道要试试这个?好吧,一开始我以为是因为它缺少正常的标题、输出文本等等。因此,我经历了很多循环,最终在硬件设备上收到一条消息,说需要使用https。一旦成功了,我就一步一步地把我加入的所有其他东西都拿出来,直到剩下这个。所以看起来我只添加了一个字符。但我花了很长时间才弄清楚是哪个角色。:-)谢谢你的分数!您在硬件设备上的何处看到该消息?如果我能在某个地方看到记录的错误,这将对我帮助很大!Alexa在沟通错误方面非常差。我想我说“在硬设备上”时弄错了。我应该说的是“显示在配套应用程序中”。有时它会把有用的东西放在那里。但是,因为它是一款消费类设备,所以信息往往是模糊的和非技术性的。啊,很酷,我会关注这一点,是的,它让开发成为一个真正的挑战,嗯!
SimplePlayer.prototype.play = function (audioURL, offsetInMilliseconds) {
    var response = {
        version: "1.0",
        response: {
            shouldEndSession: true,
            directives: [{
                type: "AudioPlayer.Play",
                playBehavior: "REPLACE_ALL", // Setting to REPLACE_ALL means that this track will start playing immediately
                audioItem: {
                    stream: {
                        url: audioURL,
                        token: "0", // Unique token for the track - needed when queueing multiple tracks
                        expectedPreviousToken: null, // The expected previous token - when using queues, ensures safety
                        offsetInMilliseconds: offsetInMilliseconds
                    }
                }
            }]
        }
    }

    this.context.succeed(response);
};