如何解决使用 Actions Builder 在 Google Assistant (Actions on Google) 上播放、暂停和恢复播放音频/MP3 直播时遇到问题?
这是我在 StackOverflow 上的第一篇文章(长期潜伏者,第一次发帖),所以放轻松。 ^__^;
对于那些在使用 STATIC mp3 实现播放/暂停/恢复功能时遇到问题的人,我假设这个过程是相同的,所以希望这篇文章也能帮助你们。 >
我正在努力构建实时 mp3 流式传输 Google Action,但在新的 Actions Console https://console.actions.google.com/
中实施它时似乎遇到了问题根据此处找到的 Google Actions 文档: https://developers.google.com/assistant/conversational/prompts-media - 上次更新时间为 2021-03-10 UTC。
我应该能够使用上面链接中提供的 YAML / JSON 示例调用媒体响应将 mp3 播放回给用户,但是,播放、暂停和恢复似乎无法正常使用流式 mp3 网址。
TLDR;这是写的较短版本: https://imgur.com/a/FIgOsl8
更详细的分析见下文:
重现步骤
从文档中提供的示例开始,在场景的 On Enter
部分弹出 JSON 版本示例代码(为方便起见,贴在这里);我能够很好地播放媒体。
{
"candidates": [
{
"first_simple": {
"variants": [
{
"speech": "This is a media response."
}
]
},"content": {
"media": {
"optional_media_controls": [
"PAUSED","STOPPED"
],"media_objects": [
{
"name": "Media name","description": "Media description","url": "https://storage.googleapis.com/automotive-media/Jazz_In_Paris.mp3","image": {
"large": {
"url": "https://storage.googleapis.com/automotive-media/album_art.jpg","alt": "Jazz in Paris album art"
}
}
}
],"media_type": "AUDIO"
}
}
}
]
}
注意:在上面的 JSON 中,我删除了 start_offset
节点,因为它目前不受 iOS 支持,并且可能被放在那里作为测试目的的示例。
以下是播放静态 mp3 媒体响应的示例,以供参考: https://downloaddave.com/reviews/clients/momentum-br/ga-sr/Screenshot_streaming_playing_no_error_with_test_mp3.png
我注意到,除非您启用以下系统意图,否则无法暂停和恢复静态 mp3:
MEDIA_STATUS_PAUSED
MEDIA_STATUS_STOPPED
MEDIA_STATUS_FAILED
MEDIA_STATUS_FINISHED
否则,如果您点击媒体响应播放器上的“暂停”图标或调用暂停earcon(earcon = ear + icon),您将遇到以下错误:
Sorry,[Your Action’s Display Name] isn't responding right now. Please try again soon.
Did not find any handling for intent event 'actions.intent.MEDIA_STATUS_PAUSED' on scene 'playStreamingAudio'
{
"endConversation": {}
}
在场景的 Error and status handling
部分下,我添加了系统意图,如下面的屏幕截图所示。
请注意,如果我只是将 MEDIA_STATUS_PAUSED 转换为“无转换”,它会给我一条错误消息,Event handler for ‘playStreamingAudio’ has an empty function call and/or empty transition.
如果它转到“结束对话”,它会结束测试并退出媒体响应卡,而不是让我选择继续(这似乎是一个糟糕的用户/对话流程,可能不会通过审核)。
点击“暂停”图标、输入或说“暂停”不起作用,除非 MEDIA_STATUS_PAUSED 转换到我称之为 pauseStreamingAudio
的另一个场景。
在 pauseStreamingAudio
场景中,我添加了一个提示,让用户知道他们可以说“播放”或“取消”以及指示相同内容的建议。
{
"candidates": [
{
"first_simple": {
"variants": [
{
"speech": "You can say play to resume audio or cancel to quit."
}
]
},"suggestions": [{
"title": "Play"
},{
"title": "Cancel"
}]
}
]
}
从 pauseStreamingAudio
场景中,我添加了一个自定义意图“播放”以返回到我之前调用的场景 playSreamingAudio
。
我不确定我这样做是否正确,但它有效!
流式mp3
现在我已经打好了基础,我将静态 mp3 换成了流媒体音频。这是示例代码 JSON 生成器,其中删除了流式 mp3 链接和“start_offset”以及流式 mp3 链接。
{
"candidates": [
{
"first_simple": {
"variants": [
{
"speech": "This is a media response."
}
]
},"url": "https://prod-35-230-37-193.wostreaming.net/momentum-kvmifmaac-ibc2","media_type": "AUDIO"
}
}
}
]
}
我正在测试的流媒体文件的 Content-Type 并没有特别以 *.mp3 结尾,当我检查内容类型时,它被读取为音频/aacp。
Codec: ADTS
Type: Audio
Channels: Stereo
Sample Rate: 44100 Hz
Bits per Sample: 32
AAC Extension: SBR+PS
这有效,我可以从源文件流式传输音频。请参阅下面的屏幕截图。
但是,Media Response Player 在右下角 Infinity:NaN:NaN
的时间索引处显示错误(在红色框中突出显示)。
可能相关,我无法再触发暂停系统意图。相反,我收到以下错误:
https://downloaddave.com/reviews/clients/momentum-br/ga-sr/Screenshot_streaming_pause_error.png
注意下拉是打开的,没有任何反应供我使用和排查。
我还尝试查看 Actions on Google 文档,看看我提供的音频流是否有问题,我能找到的最好的事情是,
“用于播放的音频必须是格式正确的 MP3 文件。 MP3 文件必须托管在 Web 服务器上,并且可以通过 HTTPS URL 公开访问。仅 MP3 格式支持直播。”
我在此处的 SSML 页面上找到了有关 mp3 规范的一些信息,但我不确定这是否适用于媒体响应 https://developers.google.com/assistant/conversational/ssml#audio - 最后更新时间为 2021-05-25 UTC。
有没有人对我如何使其工作或什至解决此问题有任何想法?
这些情况中的某些可能是媒体播放器本身的问题吗?如何解决这个问题?
无论如何,我希望这对那里的人有所帮助,并在此先非常感谢。非常感谢任何帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。