You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SONOS自定义音乐服务:播放失败且未调用getMediaURI端点问题排查

SONOS自定义音乐服务播放问题排查

我正在开发一款类似Spotify的SONOS自定义音乐服务,支持自定义播放列表功能。目前已实现所需的API端点,调试时能看到GETLASTUPDATE和GETMETADATA端点被调用,播放列表、曲目列表、艺人及专辑信息都能在APP中正常显示。但尝试播放完整播放列表或单首曲目时,会弹出「Unable to add songs to Queue」提示,而且APP完全没有调用我的API的getMediaURI端点。请问我遗漏了什么?


已调用端点的输出信息

1. 获取根目录元数据

请求:

<getMetadata xmlns="http://www.sonos.com/Services/1.1">
    <id>root</id>
    <index>0</index>
    <count>100</count>
</getMetadata>

响应:

<ns1:getMetadataResponse>
    <ns1:getMetadataResult>
        <ns1:index>0</ns1:index>
        <ns1:count>9</ns1:count>
        <ns1:total>9</ns1:total>
        <ns1:mediaCollection>
            <ns1:id>PLAYLIST:10:2</ns1:id>
            <ns1:itemType>playlist</ns1:itemType>
            <ns1:title>Anos 90</ns1:title>
            <ns1:summary>Relembre os hits que marcaram os anos 90. Da música pop ao grunge, esta playlist conta com as presenças de Alanis Morissette, Oasis, Pearl Jam e The Cranberries</ns1:summary>
            <ns1:canPlay>true</ns1:canPlay>             
<ns1:albumArtURI>https://xxx/xxdata/images/playlists/default.jpg</ns1:albumArtURI>
        </ns1:mediaCollection>            
    </ns1:getMetadataResult>
</ns1:getMetadataResponse>

2. 获取播放列表元数据

请求:

<getMetadata xmlns="http://www.sonos.com/Services/1.1">
    <id>PLAYLIST:10:2</id>
    <index>0</index>
    <count>100</count>
</getMetadata>

响应:

<ns1:getMetadataResponse>
    <ns1:getMetadataResult>
        <ns1:index>0</ns1:index>
        <ns1:count>100</ns1:count>
        <ns1:total>338</ns1:total>
        <ns1:mediaMetadata>
            <ns1:id>track:300</ns1:id>
            <ns1:title>Black Hole Sun</ns1:title>
            <ns1:mimeType>audio/mp3</ns1:mimeType>
            <ns1:itemType>track</ns1:itemType>
            <ns1:trackMetadata>
                <ns1:albumId>album:1390</ns1:albumId>
                <ns1:duration>253970</ns1:duration>
                <ns1:artistId>artist:543</ns1:artistId>
                <ns1:artist>Soundgarden</ns1:artist>
                <ns1:album>Superunknown</ns1:album>
                <ns1:albumArtURI>https://xxxx/musiccover.aspx?pk=xxx-xxx-xxxx-xxxx</ns1:albumArtURI>
                </ns1:trackMetadata>
            </ns1:mediaMetadata>
        <ns1:mediaMetadata>
            <ns1:id>track:514</ns1:id>
            <ns1:title>Don't Speak</ns1:title>
            <ns1:mimeType>audio/mp3</ns1:mimeType>
            <ns1:itemType>track</ns1:itemType>
            <ns1:trackMetadata>
               <ns1:albumId>album:1128</ns1:albumId>
               <ns1:duration>207196</ns1:duration>
               <ns1:artistId>artist:467</ns1:artistId>
               <ns1:artist>No Doubt</ns1:artist>
               <ns1:album>Tragic Kingdom</ns1:album>
               <ns1:albumArtURI>https://xxxx/musiccover.aspx?pk=xxx-xxx-xxxx-xxxx</ns1:albumArtURI>
          </ns1:trackMetadata>
      </ns1:mediaMetadata>
    </ns1:getMetadataResult>
</ns1:getMetadataResponse>

问题排查与解决方案

核心问题在于曲目元数据中缺少<ns1:canPlay>true</ns1:canPlay>元素。SONOS需要明确标记曲目为可播放状态,才会触发getMediaURI调用并将曲目加入播放队列。

你的播放列表已经正确设置了canPlay=true,但返回的每首曲目(mediaMetadata节点)都没有包含这个字段。SONOS会认为这些曲目不可播放,因此跳过获取媒体URI的步骤,直接返回「Unable to add songs to Queue」错误。

修复方法:

  • 在每个曲目对应的mediaMetadata节点中添加<ns1:canPlay>true</ns1:canPlay>字段,例如:
<ns1:mediaMetadata>
    <ns1:id>track:300</ns1:id>
    <ns1:title>Black Hole Sun</ns1:title>
    <ns1:mimeType>audio/mp3</ns1:mimeType>
    <ns1:itemType>track</ns1:itemType>
    <ns1:canPlay>true</ns1:canPlay> <!-- 添加这个字段 -->
    <ns1:trackMetadata>
        <!-- 其余字段保持不变 -->
    </ns1:trackMetadata>
</ns1:mediaMetadata>

添加后,SONOS会识别曲目为可播放状态,进而调用你的getMediaURI端点获取播放链接,就能正常将曲目加入队列播放了。


内容的提问来源于stack exchange,提问作者Nuno Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 10:15:47