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
相关产品推荐
相关产品推荐

