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

SMAPI服务中positionInformation被Sonos忽略问题求助

Sonos SMAPI 恢复播放位置失效排查方案

针对你遇到的Sonos忽略positionInformation、始终从头播放的问题,结合你的配置信息,整理以下排查方向:

1. 确认触发恢复播放的场景

Sonos仅在恢复之前暂停/中断的播放会话时,才会读取positionInformation中的偏移量。如果是用户主动选择曲目、首次加载播放列表,或者重新启动播放会话,Sonos会默认从头开始播放,这属于正常逻辑。请先验证测试场景是否是从暂停状态恢复播放。

2. 检查元数据与偏移量的单位一致性

你的getMetadata响应中,trackMetadata/duration字段值为600(单位是秒,对应10分钟),而getMediaUri中的offsetMillis是30000(单位是毫秒,对应30秒),数值逻辑上是合理的,但要确保:

  • offsetMillis必须小于duration * 1000,否则Sonos会忽略偏移量
  • canResume字段已正确设置为true(你的配置中已满足)

3. 验证positionInformation字段匹配性

positionInformation中的id必须与getMetadata返回的mediaMetadata/id完全一致(你的配置中均为track::123,无问题);index需对应曲目在播放列表中的位置(你的配置中均为0,匹配)。如果字段不匹配,Sonos会无法关联播放位置。

4. 确保音频文件支持字节范围请求

Sonos实现跳转播放依赖音频服务器支持HTTP Range请求。如果你的服务器不响应Range头,Sonos无法从指定偏移量加载音频,只能从头播放。可以通过以下命令测试:

curl -I https://my-sonos-service.com/testaudio.mp3

检查响应头是否包含Accept-Ranges: bytes,再发送Range请求验证:

curl -H "Range: bytes=30000-" https://my-sonos-service.com/testaudio.mp3 -I

确认返回206 Partial Content状态码。

5. 清除Sonos设备缓存

Sonos会缓存媒体元数据和播放位置,可能导致配置更新不生效。尝试:

  • 在Sonos应用中移除你的服务,重新添加
  • 重启Sonos设备
  • 使用新的曲目ID进行测试,避免缓存干扰

你的原响应参考

getMetadata响应:

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.sonos.com/Services/1.1">
  <soap:Body>
    <ns:getMetadataResponse>
      <ns:getMetadataResult>
        <ns:index>0</ns:index>
        <ns:count>41</ns:count>
        <ns:total>41</ns:total>
        <ns:mediaMetadata>
          <ns:id>track::123</ns:id>
          <ns:itemType>track</ns:itemType>
          <ns:title>Test track 1</ns:title>
          <ns:mimeType>audio/mp3</ns:mimeType>
          <ns:trackMetadata>
            <ns:artistId>A:123456</ns:artistId>
            <ns:artist>Test Artist</ns:artist>
            <ns:albumid>M:123456</ns:albumid>
            <ns:album>test Album</ns:album>
            <ns:duration>600</ns:duration>
            <ns:albumArtURI>http://example.com/images/aa/1.jpg</ns:albumArtURI>
            <ns:canSkip>false</ns:canSkip>
            <ns:canResume>true</ns:canResume>
            <ns:canAddToFavorites>false</ns:canAddToFavorites>
          </ns:trackMetadata>
        </ns:mediaMetadata>
...
</soap:Body>
</soap:Envelope>

getMediaUri响应:

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.sonos.com/Services/1.1">
  <s:Body>
    <ns:getMediaURIResponse>
      <ns:getMediaURIResult>https://my-sonos-service.com/testaudio.mp3</ns:getMediaURIResult>
      <ns:positionInformation>
        <ns:id>track::123</ns:id>
        <ns:index>0</ns:index>
        <ns:offsetMillis>30000</ns:offsetMillis>
      </ns:positionInformation>
    </ns:getMediaURIResponse>
  </s:Body>
</s:Envelope>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:27:32