自定义集成 API
T 778 自定义集成 API
本手册中包含的信息归 Lenbrook Industries 所有。
本方案仅供专业用途。Lenbrook Industries 对方案的准确性不承担任何责任。本方案“按原样”提供,包含所有错误,且不提供任何明示或暗示的担保。
API 使用政策
访问 API 即表示您同意本 API 使用政策(以下简称“政策”)及我们的条款。我们提供这些 API 的目的是允许公司和个人通过创建软件、服务或模块来构建我们的服务并从中受益,这些软件、服务或模块可连接到我们的平台或通过我们的 API 访问我们平台内的数据(以下简称“集成”)。本政策将被视为我们条款的一部分。
本软件“按原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和非侵权性的保证。在任何情况下,作者或版权所有者均不对因本软件或使用或其他交易而引起的或与之相关的任何索赔、损害或其他责任承担责任,无论是合同诉讼、侵权诉讼还是其他诉讼。
允许使用
您不得使用 API 发送垃圾邮件或采取任何违反我们可接受使用政策和标准使用条款的行为。您须遵守所有适用法律(包括隐私法、美国出口管制法、欧洲通用数据保护法规及相关规定以及经济制裁法律法规)。您须遵守我们为 API 提供的所有文档。您不得尝试入侵或更改服务的运行方式。我们可能会监控您对 API 的使用情况,以确保其遵守这些规则,如果您违反本政策,我们可能会拒绝您访问 API。
隐私
你的 集成服务必须向用户显示隐私政策,详细说明您在用户使用集成服务时将从用户收集的信息。您只能在用户允许的范围内访问用户数据,并在隐私政策中进行了说明。如果用户请求删除数据或终止其帐户,您必须立即删除用户数据。
安全
您应实施并维护适当的技术和组织安全措施,以保护和维护数据的安全性、完整性和机密性。这些安全措施应防止未经授权访问或泄露您处理的个人或机密数据。
所有权
我们拥有本服务和 API 的所有权利、所有权和权益,包括所有知识产权、商标、代码和功能。您不得侵犯、逆向工程或复制我们的代码、设计或内容。您不得访问我们的 API 与我们的服务竞争。本政策未明确授予的任何权利均不予授予,因此,如果您在此处未看到相关内容,则表明我们未授予您该权利。
商标的使用
您不得以任何方式使用我们的名称和标志(指我们的徽标、品牌和受版权保护的图像)。您不得更改或删除我们标志中的任何所有权声明。您不得在您的 Integration 名称或徽标中使用我们的名称或标志,或以任何暗示我们认可的方式使用我们的名称或标志。
商标的实际使用
本准则解释了您在实际使用我们的名称、标识和品牌资产时应遵循的原则。您的使用即表示您接受本准则,并且您理解,如果您违反本准则,我们将自动终止您使用我们名称、标识和品牌资产的许可。
- 使用我们的名称、标志和品牌资产必须获得明确的书面授权。
- 请勿以任何方式更改、修改、扭曲、复制或模仿我们的品牌资产,包括更改颜色、旋转和/或拉伸。换言之,我们的品牌资产必须保持其原始形态。
- 与您的名称和徽标相比,请勿过分突出我们的名称、标记和品牌资产。
- 未经我们明确同意,不得在任何形式的竞争性营销产品旁边或以任何形式展示我们的名称、标识和品牌资产。
- 您的使用不得误导消费者认为我们对您的公司或您的产品或服务有赞助、关联或认可。
- 我们的名称、商标和品牌资产均为我们的专属财产。您因使用而产生的所有商誉均归我们所有。您不得采取任何有损我们权利或所有权的行为。
- 我们的名称、标识和品牌资产必须以尊重的方式使用,不得以任何损害我们、我们的产品或服务的方式使用,或以任何我们认为会降低或损害我们声誉或我们名称、标识和品牌资产商誉的方式使用。换言之,请勿将我们的资产与任何非法或违法活动关联,或以欺骗性或有害的方式使用它们。
Examp可接受的使用范围:
“[您的产品名称](兼容/可与 BluOS 配合使用)”
Examp不可接受的使用情况
“[您的产品名称] - BluOS”
“BluOS – [您的产品名称]”
“[您的产品名称] – 由 BluOS 提供支持”
营销和新闻稿
您的申请获得批准后,可能会在我们的 web 属性。我们通常不会联合发布新闻稿或参与您应用程序的联合营销。
在发布关于您应用的新闻稿之前,请务必通过 [EMAIL] 与我们联系。如果您要提及 BluOS,那么我们需要view 新闻稿。我们建议您尽快发布最终新闻稿。
免责声明
在法律允许的最大范围内,我们按原样提供 API。这意味着我们不提供任何形式的明示或暗示的保证,包括但不限于适销性和针对特定用途的适用性。
更新
我们可能会不时更新或修改 API 及本政策,具体方式为在本网站上发布变更或通过电子邮件通知您。这些变更可能会影响您对 API 的使用,或影响您的集成与 API 的交互方式。如果我们做出的变更您无法接受,您应停止使用 API。
保密
您可以访问特定于 API 的机密、专有和非公开信息(简称“机密信息”)。您只能使用此类信息来构建 API。未经我们书面同意,您不得向任何人披露机密信息,并且您应像保护您自己的机密信息一样,保护机密信息免遭未经授权的使用和披露。
保障
您将赔偿我们和我们的团队因您使用 API 而导致的第三方索赔而造成的任何损失(包括律师费)。
其余的部分
本政策不构成或暗示任何合伙、代理或合资关系。本政策将在您使用 API 期间或根据我们的条款终止之前有效。如果本政策与标准使用条款发生冲突,则以标准使用条款为准。
©2025 伦布鲁克实业有限公司
加拿大安大略省皮克灵花岗岩苑 633 号 L1W 3K1
版权所有
未经 Lenbrook Industries Limited 书面许可,不得以任何形式复制、存储或传播本出版物的任何部分。尽管我们已尽一切努力确保内容在发布时准确无误,但产品功能和规格如有变更,恕不另行通知。
| 修订历史 | ||
| 版本 | 日期 | 描述 |
| 1.0 | 6 年 17 月 2019 日 | 首次发布 |
| 1.2 | 01 年 12 月 2022 日 | 添加了软重启、门铃声、音量调高/调低、队列中移动曲目以及直接输入命令。在附录 LSDP 中添加了注释。 |
| 1.4 | 04 年 26 月 2022 日 | 添加了静音命令;修改了 HUB 的直接输入命令;更新了播放命令以播放流式自定义音频。 |
| 1.5 | 07 年 18 月 2022 日 | 增加了蓝牙命令;更新了 LSDP,添加了 class 5 至 8;在 API 使用政策中添加了“标记的实际使用”。 |
| 1.6 | 03 年 13 月 2024 日 | 在第 2 部分中为分组玩家添加了 /Status 注释;添加了 /Play?seek=seconds is=trackid 在第 4.1 节中; |
| 1.7 | 04 年 09 月 2025 日 | 更新了第 8.3 节ample; 添加了内联上下文菜单浏览请求 examp在第 7.1 节中;在第 11.2 节中添加了新的直接输入选择命令;更新了第 6.1 节,为预设添加了“图像”属性;为所有图像属性添加了“followRedirects=1”注释;更新了属性播放的解释URL 并在第 7.1 节中添加 |
介绍
BluOS™ 是一款先进的操作系统和音乐管理软件,可让您通过家庭网络访问高达 24 位/192kHz 的无损音乐,并将其串流到每个房间。Bluesound、NAD Electronics、DALI Loudspeakers 等品牌的产品均搭载了 BluOS 系统。
本文档旨在帮助在定制集成 (CI) 市场工作的开发人员和系统集成商。它包含完整 BluOS API 控制协议中记录的部分 API 请求。
本文档中描述的所有请求均以 HTTP GET 请求的形式发送。参数是标准 URL 编码的名称/值对。BluOS 播放器接收这些命令,然后使用 UTF-8 编码的 XML 数据进行响应。
所有请求均采用 http:// 格式: /在哪里:
- player_ip 是 BluOS 播放器的 IP 地址(例如 192.168.1.100)
- 端口是用于通信的 TC 端口。除 CI11000 外,所有 BluOS 播放器均使用端口 580。CI580 在一个机箱中拥有四个流媒体节点,其中节点 1 使用端口 11000,节点 2 使用端口 11010,节点 3 使用端口 11020,节点 4 使用端口 11030。实际使用的端口应通过 MDNS 协议(使用 musc.tcp 和 musp.tcp 服务)来发现。
- 请求是实际的 BluOS 命令或查询(例如,播放)
笔记: 本文档将使用 http://192.168.1.100:11000 作为所有 ex 中的玩家 IP 和端口amp莱斯。
状态查询
状态查询用于查询 BluOS 播放器。
BluOS 提供两种状态查询机制:常规轮询和长轮询。常规轮询会立即返回查询结果。长轮询会保持连接一段时间,仅在信息发生变化或超时时返回查询结果。长轮询可以大大减少对播放器的调用次数。
不使用长轮询时,客户端应将其轮询速率限制为每 30 秒最多一次请求。使用长轮询时,客户端不得对同一资源发出间隔少于一秒的两次连续请求,即使第一次请求的返回时间少于一秒。
长轮询请求需要两个参数:超时和 etag。超时是长轮询请求的持续时间,etag 取自前一个响应(响应根元素中的属性)。
一般来说,只需对 /Status 或 /SyncStatus 之一启用长轮询即可。/Status 响应包含一个元素 ( ) 表示 /SyncStatus 是否已更改。如果仅对播放器的名称、音量和分组状态感兴趣,则应轮询 /SyncStatus。如果需要当前播放状态,则应轮询 /Status。
当玩家分组时,主玩家是组中的主要玩家。辅助玩家连接到主玩家。/Status 响应是主玩家响应的副本。/SyncStatus 需要进行长轮询来跟踪每个辅助玩家的音量。
2.1 播放状态
描述
/Status 端点查询音量和播放信息。此查询返回许多响应属性,
其中一些不适用于本文档。未记录的响应应被忽略。
要求
/状态?超时=秒&etag=etag-价值
| 参数 | 描述 |
| 暂停 | 长轮询使用的可选参数。建议轮询间隔为 100 秒,且轮询速率应限制在 60 秒左右,且不得快于 10 秒。 |
| etag | 长轮询使用的可选参数。这是tag 属性来自 |
| 参数 | 描述 |
| 上一个/状态呼叫响应。 |
回复
<status etag=”4e266c9fbfba6d13d1a4d6ff4bd2e1e6″>
÷(豪华版)
艾德·希兰
真的
1
159
Deezer:142986206
/艺术品?服务=Deezer&songid=Deezer%3A142986206
0
187
1
完美的
1054
0
320000
2
Deezer
/来源/图片/DeezerIcon.png
0
8
19
暂停
MP3 320 kb/秒
5
完美的
艾德·希兰
÷(豪华版)
263
4
三十五
笔记: 下表并未列出所有响应属性。其他元素可能存在,应忽略。
| 响应属性 | 描述 |
| etag | 响应根元素的属性。用于长轮询的不透明值,用于检测响应的变化。如果该值自上次响应以来未发生变化,则保证本次响应未发生变化(另请参阅下文的“秒”部分)。 |
| 闹钟剩余秒数 | 如果播放是警报的结果,那么这是播放停止前的秒数。 |
| 行动 | 有关说明,请参阅流媒体电台的操作部分。 |
| 专辑 | 当前活动曲目的专辑名称。另请参阅 title1 属性。 |
| 艺术家 | 当前活跃曲目的艺术家姓名。另请参阅 title1 属性。 |
| 电池 | 如果玩家拥有电池组,则显示此属性。包含以下属性: · 水平 – 充电状态,百分比 · 充电中 – 如果当前正在充电则为 1 · 图标 - URL 玩家图像显示当前充电状态 |
|
canMovePlayback |
如果可以将当前播放或暂停的内容移动到另一个播放器,则为真。 |
|
可以搜索 |
如果为 1,则可以使用 /Play 的 seek 参数在 0 到 totlen 范围内遍历当前曲目。例如ample:/Play?seek=34。 |
| db | 音量级别(以 dB 为单位)。 |
| 组名称 | 队伍名称。该玩家必须是队伍的主玩家。 |
| 组卷 | 群组的音量级别。该玩家必须是群组中的主玩家。 |
| 图像 | URL 与当前音频(专辑、电台、输入等)关联的图像。如果 |
| 响应属性 | 描述 |
| 这 URL 以 /Artwork 开头可能会导致重定向。添加参数/键 followRedirects=1 检索图像时可以避免重定向。 | |
| 沉默的 | 静音状态。如果音量已静音,则设置为 1。 |
| 静音数据库 | 如果播放器已静音,则这包含未静音的音量(以 dB 为单位)。 |
| 静音音量 | 如果静音,则包含取消静音后的音量。值的范围是 0 到 100。 |
| 姓名 | 当前播放音轨的标题。另请参阅 title1 属性。 |
| 通知url | URL 弹出通知。 |
| id | 唯一的播放队列 ID。它与 /Playlist 响应的 id 属性匹配。如果播放队列发生更改,此编号也会随之更改。 |
| 摆脱 | 唯一的预设 ID。它与 /Presets 响应中的 prid 属性匹配。如果预设发生更改,此编号也会随之更改,表示所有缓存的 /Presets 响应都应被清除。 |
| 质量 | 播放源音频的质量: · cd – CD 品质的无损音频 · 高清 – 无损音频,分辨率高于 CD 质量或amp最低速率 88200 秒amp更少或更多 · dolbyAudio – DolbyDigital 或 AC3 · mqa – 有效的 MQA 音频解码 · mqaAuthored – 有效的 MQA-Authored 音频解码 数值是压缩音频源质量的近似比特率 file. |
|
重复 |
0、1 或 2。0 表示重复播放队列,1 表示重复播放曲目,2 表示关闭重复播放 |
| 秒 | 当前音轨已播放的秒数。此值不用于计算tag 并且进度本身不会导致长轮询调用返回结果。当状态为播放或流式传输时,客户端需要根据自响应以来的时间间隔来增加播放位置。 |
| 服务 | 当前音频的服务 ID。这不是在 UI 中显示的值,因为 |
| 响应属性 | 描述 |
| 实际字符串可能与官方服务名称不同。 | |
| 服务图标 | URL 当前服务图标。 |
| 随机播放 | 0 或 1。0 表示关闭随机播放,1 表示打开随机播放。 |
| 睡觉 | 睡眠定时器启动前剩余的分钟数。 |
| 歌曲 | 当前曲目在播放队列中的位置。另请参阅流Url. |
| 状态 | 当前播放器状态。可以是播放、暂停、停止、流媒体、连接等。 /Play 可用于在暂停状态下恢复,但不能在停止状态下恢复。 play 和 stream 应被视为具有相同的含义。另请参阅 streamUrl. |
|
车站图片 |
URL 如果当前音频是某个电台,例如 Deezer 电台,则显示电台图片。它可能与图片相同。 |
| 流格式 | 音频的格式。 |
| 溪流Url | 此元素的存在应被视为一个标志,其内容应被视为一个不透明值。如果存在,则表示: · 播放队列不是当前音频的来源(歌曲无关) · 随机播放和重复播放不相关,应尽可能从任何 UI 中删除 · 下一个和上一个不可用(但另请参阅操作) |
| 同步状态 | 用于指示 /SyncStatus 响应中任何更改的唯一 ID。它与 /SyncStatus 响应的 syncStat 属性匹配。每当同步状态发生变化时,它都会更改。 |
| 标题1 | 描述当前音频的第一行信息。title1、title2 和 title3 必须用作任何显示三行正在播放元数据的界面的文本。请勿使用专辑、艺术家和名称等值。 |
| 标题2 | 第二行描述当前音频的信息。 |
| 标题3 | 第三行描述当前音频的信息。 |
| 托特伦 | 当前曲目的总长度(以秒为单位)。 |
| twoline_title1 | 描述当前音频的两行中的第一行。twoline_title1 和 twoline_title2(如果存在)必须用作显示两个 |
| 响应属性 | 描述 |
| 正在播放的元数据行。 | |
| twoline_title2 | 描述当前音频的两行中的第二行。 |
| 体积 | 播放器音量百分比tage;-1 表示播放器音量固定。 |
| 秒 | 当前音轨已播放的秒数。 |
Example
http://192.168.1.100:11000/Status
获取播放器的播放状态。
http://192.168.1.100:11000/Status超时=100&etag=4e266c9fbfba6d13d1a4d6ff4bd2e1e6
使用长轮询获取播放器的播放状态。仅当播放器状态发生变化时,才会在 100 秒超时前返回结果。否则,将在 100 秒后返回结果。
2.2 玩家和群组同步状态
描述
SyncStatus 查询会返回玩家信息和玩家分组信息。此查询会返回许多响应属性,其中一些属性不适用于本文档。未记录的响应应被忽略。
要求
/SyncStatus?超时=秒&etag=etag-价值
| 参数 | 描述 |
| 暂停 | 长轮询使用的可选参数。轮询间隔(以秒为单位)。建议轮询间隔为 180 秒。 |
| etag | 长轮询使用的可选参数。这是tag 来自前一个 /SyncStatus 调用响应的属性。 |
回复
<SyncStatus icon=”/images/players/P300_nt.png” volume=”4″ modelName=”PULSE” name=”PULSE0278″ model=”P300″ brand=”Bluesound” etag=”23″ outlevel=”-62.9″ schemaVersion=”25″ 初始化=”true” 组=”PULSE-0278 + 2″ syncStat=”23″ id=”192.168.1.100:11000″ mac=”90:56:82:9F:02:78″> 11000
…..
注意:下表并未列出所有响应属性。其他元素可能存在,应忽略。
| 响应属性 | 描述 |
| 电池 | 如果玩家拥有电池组,则显示此属性。包含以下属性: · 水平 – 充电状态,百分比 · 充电中 – 如果当前正在充电则为 1 · 图标 - URL 玩家图像显示当前充电状态 |
| 品牌 | 玩家品牌名称。 |
| db | 音量级别(以 dB 为单位)。 |
| etag | Tag /SyncStatus 响应,用于长轮询。 |
| 团体 | 群组名称。 |
| 图标 | URL 包含播放器图标图像。 |
| id | 播放器IP和端口。 |
| 初始化 | True 表示播放器已设置,false 表示播放器需要设置。播放器必须使用 BluOS Controller 应用进行设置。 |
| 苹果 | 玩家网络接口的唯一 ID。可以是 MAC 地址。 |
| 掌握 | 主玩家 IP 地址。仅当玩家在群组中为次要玩家时显示。属性: · 端口——端口号。 · 重新连接 – 如果尝试重新连接到主玩家,则为 true |
| 模型 | 玩家模型 ID。 |
| 型号名称 | 播放器型号名称。 |
| 沉默的 | 如果音量静音则设置为 1。 |
| 静音数据库 | 如果播放器已静音,则这是未静音时的音量级别(以 dB 为单位)。 |
| 响应属性 | 描述 |
| 静音音量 | 如果播放器已静音,则这是未静音的音量级别(0..100)。 |
| 姓名 | 玩家姓名。 |
| 架构版本 | 软件架构版本。 |
| 奴隶 | 次要玩家的 IP 地址。仅当玩家是队伍中的主要玩家时才显示。可以有多个次要玩家。属性: · id – IP地址 · port – 端口号 |
|
同步状态 |
同步状态 ID。每当 /SyncStatus 响应中的任何项目发生更改时,它都会更改。匹配/Status 响应中的元素。 |
| 体积 | 音量级别在 0..100 范围内。-1 表示固定音量。 |
| 区 | 固定组的名称。 |
| 区域大师 | 如果玩家是固定组中的主要玩家,则将其设置为 true。 |
| 区域从属 | 如果玩家是固定组中的次要玩家,则将其设置为 true。 |
Example
http://192.168.1.100:11000/SyncStatus
获取玩家及玩家所在群组状态。
http://192.168.1.100:11000/SyncStatus超时=100&etag=4e266c9fbfba6d13d1a4d6ff4bd2e1e6
使用长轮询获取玩家及其所在群组的状态。仅当玩家状态发生变化时,才会在 100 秒超时前返回结果。否则,将在 100 秒后返回结果。
音量控制
调节播放器的音量。也可用于将播放器静音。
3.1 设置音量
描述
该请求查询或设置播放器音量。
所有命令变体,无论是使用 0..100 级别、绝对 dB 还是相对 dB 参数,都被限制为使级别处于配置的可用音量范围内的值,该范围通常为 -80..0。音量范围可以使用 BluOS Controller 应用程序在“设置”->“播放器”->“音频”页面上进行调整。
该查询支持长轮询(下面未说明)。
要求
/体积
/音量?级别=级别&tell_slaves=on_off
/音量?静音=开_关&tell_slaves=开_关
/音量?abs_db=db&tell_slaves=on_off
/音量?db=delta-db&tell_slaves=on_off
| 参数 | 描述 |
| 等级 | 设置播放器的绝对音量。它是一个介于 0 到 100 之间的整数。 |
| tell_slaves | 适用于群组玩家。如果设置为 0,则只有当前选定的玩家会改变音量。如果设置为 1,则群组中的所有玩家都会改变音量。 |
| 沉默的 | 如果设置为 0,则玩家静音。如果设置为 1,则玩家取消静音。 |
| 绝对值 | 使用 dB 刻度设置音量。 |
| db | 使用 dB 音量刻度进行相对音量变化。db 可以是正数或负数。 |
回复
<volume db=”-49.9″ mute=”0″ offsetDb=”0″ etag=”6213593a6132887e23fe0476b9ab2cba”>15</volume>
| 响应属性 | 描述 |
| 响应属性 | 描述 |
| db | 音量级别(以 dB 为单位)。 |
| 沉默的 | 如果玩家已静音,则为 1;如果玩家已取消静音,则为 0。 |
| 静音数据库 | 如果播放器已静音,则这是未静音时的音量级别(以 dB 为单位)。 |
| 静音音量 | 如果播放器已静音,则这是未静音的音量级别(0..100)。 |
| 体积 | 当前音量级别:0..100 或 -1(固定音量)。 |
Example
http://192.168.1.100:11000/Volume?level=15
将播放器音量设置为 15(满分 100)。
http://192.168.1.100:11000/Volume? tell_slaves=1&db=2
将主播放器 192.168.1.100 以及该组内所有辅助播放器的音量提高 2 dB。
http://192.168.1.100:11000/Volume?mute=1
使播放器静音。
3.2 提高音量
描述
此请求将音量增加一定dB(典型值为2dB)。
要求
/Volume?db=db_value
| 参数 | 描述 |
| db | 音量增加步长(dB)(典型值 2dB) |
回复
<volume db=”-25″ mute=”0″ offsetDb=”6″ etag=”a071a168fac1c879b1de291720c8a4b8″>27</volume>
| 响应属性 | 描述 |
| db | 音量级别(以 dB 为单位)。 |
| 沉默的 | 如果玩家已静音,则为 1;如果玩家未静音,则为 0 |
| 响应属性 | 描述 |
| 偏移量数据库 | |
| etag |
Example
http://192.168.1.100:11000/Volume?db=2
将音量增加 2dB。
3.3 降低音量
描述
此请求将音量降低一定dB(典型值为-2dB)。
要求
/Volume?db=-db_value
| 参数 | 描述 |
| db | 音量增加步长(dB)(典型值 -2dB) |
回复
<volume db=”-25″ mute=”0″ offsetDb=”6″ etag=”a071a168fac1c879b1de291720c8a4b8″>27</volume>
| 响应属性 | 描述 |
| db | 音量(dB) |
| 沉默的 | 如果玩家已静音,则为 1;如果玩家未静音,则为 0 |
| 偏移量数据库 | |
| etag |
Example
http://192.168.1.100:11000/Volume?db=-2
将音量降低 2dB。
3.4 静音开启
描述
要求
/音量?静音=1
| 参数 | 描述 |
| 沉默的 | 设置为 1 可使玩家静音 |
回复
<volume muteDb=”-43.1″ db=”100″
静音音量=”11″
静音=”1″
offsetDb=”0″
etag=”2105bed56563d9da46942a696cfadd63″>0</volume
>
| 响应属性 | 描述 |
| 静音数据库 | 静音前的音量(以 dB 为单位) |
| db | 音量(dB) |
| 静音音量 | 静音前的音量百分比 |
| 沉默的 | 1 表示玩家已静音 |
| 偏移量数据库 | |
| etag |
Example
http://192.168.1.100:11000/Volume?mute=1
3.5 关闭静音
描述
此请求将播放器设置为取消静音。
要求
/音量?静音=0
| 参数 | 描述 |
| 沉默的 | 设置为 0 可取消静音 |
回复
<volume db=”-43.1″ mute=”0″ offsetDb=”0″ etag=”e72d53db17baa526ebb5ee9c26060b1f”>11</volume>
| 响应属性 | 描述 |
| db | 音量(dB) |
| 沉默的 | 0 表示玩家未静音 |
| 偏移量数据库 | |
| etag |
Example
http://192.168.1.100:11000/Volume?mute=0
播放控制
这些命令用于基本的播放控制。命令包括播放、暂停、停止、跳过、后退、随机播放和重复。
4.1 次游戏
描述
开始播放当前音频源。可选参数允许在开始音频播放之前跳转到音轨并选择输入。
要求
/玩
/Play?seek=秒
/播放?seek=秒&id=trackid
/玩?url=编码流URL
| 参数 | 描述 |
| 寻找 | 跳转到当前曲目的指定位置。仅当 /Status 响应包含以下内容时有效. 不能与 inputType 和 index 参数一起使用。 |
| 编码流URL | URL 流式自定义音频。它必须是 URL 编码。 |
回复
玩
溪流
| 响应属性 | 描述 |
|
状态 |
执行命令后的状态。有关更多详细信息,请参阅 /Status 响应状态属性。 |
Example
http://192.168.1.100:11000/Play
开始播放当前曲目的音频。
http://192.168.1.100:11000/Play?seek=55
从当前曲目的第 55 秒开始播放音频。
http://192.168.1.100:11000/Play?seek=55&id=4
从队列中第 55 首曲目的第 5 秒处开始播放音频。
192.168.1.125:11000/播放?url=https%3A%2F%2Fwww%2Esoundhelix%2Ecom%2Fexamples%2Fmp3%
2FSoundHelix-歌曲-1%2Emp3
开始播放在线 mp3 音频。
4.2暂停
描述
暂停当前播放的音频。
如果正在播放闹钟,并且闹钟超时,则取消闹钟超时。
要求
/暂停
/暂停?切换=1
| 参数 | 描述 |
| 切换 | 如果设置为 1,则切换当前暂停状态。 |
回复
暂停
| 响应属性 | 描述 |
| 状态 | 执行命令后的状态。有关更多详细信息,请参阅 /Status 响应状态属性。 |
Example
http://192.168.1.100:11000/Pause
暂停当前播放的音频。
4.3站
描述
停止当前正在播放的音频。如果正在播放闹钟,并且闹钟已超时,则取消闹钟超时请求
/停止
| 参数 | 描述 |
| 没有任何 |
回复
停止
| 响应属性 | 描述 |
| 状态 | “stop”表示当前音频停止。 |
Example
http://192.168.1.100:11000/Stop
停止当前播放的音频。
4.4 跳过
描述
跳至播放队列中的下一个音轨
从播放队列播放时,将跳至队列中的下一首曲目。如果当前曲目是队列中的最后一首,调用 /Skip 将跳至队列中的第一首曲目。无论重复播放设置的状态如何,它都会跳至队列中的下一首或第一首曲目。
要确定您是否正在使用播放队列,请验证没有Url> /Status 响应中的条目。
然后您可以使用/Skip命令。
您还可以跳过某些流媒体电台的曲目。这些操作可以通过 /Action 命令实现。
某些来源(例如 TuneIn 和 Optical Input)不支持跳过选项。这些来源将具有URL> 条目但 /Status 响应中没有跳过操作名称。
要求
/跳过
| 参数 | 描述 |
| 没有任何 |
回复
21
| 响应属性 | 描述 |
| id | 执行跳过命令后的曲目 ID。详情请参阅 /Status 响应的歌曲属性。 |
Example
http://192.168.1.100:11000/Skip
跳至下一曲目。
4.5 返回
描述
如果正在播放某个曲目并且播放时间超过四秒,则将返回到该曲目的开头。
否则,返回命令将跳转到当前播放列表中的上一首歌曲。如果当前播放列表的第一首歌曲,则返回命令将跳转到最后一首歌曲。无论重复播放设置的状态如何,它都会跳转到队列中的上一首或第一首曲目。
要确定您是否正在使用播放队列,请验证没有Url> /Status 响应中的元素。
然后您可以使用/Back 命令。
您还可以回放某些流媒体电台的曲目。这些操作可以通过 /Action 命令进行。
某些来源(例如 TuneIn 和 Optical Input)不支持返回选项。这些来源将具有Url> 元素,但 /Status 响应中没有跳过操作名称。
要求
/后退
| 参数 | 描述 |
| 没有任何 |
回复
19
| 响应属性 | 描述 |
| id | 执行返回命令后的曲目 ID。详情请参阅 /Status 响应的歌曲属性。 |
4.6 洗牌
描述
shuffle 命令通过对当前队列进行混洗来创建新队列。禁用混洗后,原始队列(未混洗的队列)将保留,以便恢复。
要求
/随机播放?状态=0|1
| 参数 | 描述 |
| 状态 | · 0 表示禁用随机播放 · 1 表示启用 shuffle。如果队列已处于 shuffle 状态,则无效。请参阅 /Status 响应元素。 |
回复
| 响应属性 | 描述 |
| 修改的 | 1 表示队列自加载以来已被修改。0 表示未修改。 |
| 长度 | 当前队列中的曲目总数。 |
| 随机播放 | 洗牌状态。1 表示当前队列已洗牌。0 表示当前队列未洗牌。 |
| id | 当前队列 ID。每当播放队列被修改时,该 ID 都会改变。 |
Example
http://192.168.1.100:11000/Shuffle?state=1
随机播放当前播放队列。
4.7 重复
描述
设置重复选项。重复有三种状态:0 表示重复当前队列,1 表示重复当前曲目,2 表示不重复。所有重复都是无限期的,也就是说,重复不会停止。
要求
/重复?状态=0|1|2
| 参数 | 描述 |
| 状态 | · 0 表示重复播放整个播放队列 · 1 重复播放当前曲目 · 2 关闭重复 |
回复
| 响应属性 | 描述 |
| 长度 | 当前播放队列中的曲目总数。 |
| id | 当前队列 ID。每当播放队列被修改时,该 ID 都会改变。 |
| 重复 | 当前重复状态。 |
Example
http://192.168.1.100:11000/Repeat?state=1
重复当前播放的曲目。
4.8 流媒体电台的操作
描述
您可以通过操作在特定流媒体电台(例如 Slacker、Radio Paradise 或 Amazon Music Prime Stations)上快进、后退、点赞和屏蔽曲目。流媒体电台不会将曲目加载到播放队列中。相反,它们会提供 URL 您可以使用它来完成所需的功能。
“跳过”将跳至下一首曲目。“返回”将跳至上一首曲目。“喜欢”将在音乐服务中将该曲目标记为“喜欢”。“禁止”将跳至下一首曲目,并在音乐服务中将该曲目标记为“不喜欢”。
如果有Url> /Status 响应中的条目,以及相应的操作,您可以执行这些功能。该操作将包含 URL 用于执行该操作。
这是一个前任amp来自正在播放 Slacker radio 的玩家的 /Status 响应:
<action name=”skip” url=”/Action?service=Slacker&skip=4799148″/>
<action icon=”/images/loveban/love.png” name=”love” notification=”Track marked as favorite” state=”1″ text=”Love” url=”/Action?service=Slacker&love=4799148″/>
<action icon=”/images/loveban/ban.png” name=”ban” notification=”Track banned from this
站”状态=”-1″文本=”禁止” url=”/Action?service=Slacker&ban=4799148″/>
在此例中ample,back不可用,但skip,love和ban是可以的。
要求
/Action?service=服务名称&action=action-URL
笔记: 具体的请求细节(端点和参数)由各自的元素。Ex 中的命令amp下面的部分全部使用 /Action,但任何 URI 都是可能的。
| 参数 | 描述 |
| 提供于元素。 |
回复
对于响应,您将收到操作确认。对于跳过并返回,您将收到:
为了爱,您将获得:
1
对于禁令,您将收到:
1
| 响应属性 | 描述 |
| 回复 | 如果响应的根元素是那么文本节点就是向用户显示的通知。如果返回的是替代根元素,并且包含通知属性,则应显示该通知。 |
Example
http://192.168.1.100:11000/Action?service=Slacker&skip=10965139
跳至下一个 Slacker 广播曲目。
http://192.168.1.100:11000/Action?service=Slacker&ban=33332284
禁止当前播放的 Slacker 电台曲目并跳至下一曲目。
播放队列管理
播放器的一种操作模式是将曲目加载到播放队列中,然后播放该播放队列中的曲目。这些命令允许您 view 并管理播放队列。
5.1 列出曲目
描述
返回播放队列状态,或返回播放队列中所有曲目的信息。
不建议在没有长度或开始和结束参数的情况下使用此查询,否则可能会生成非常长的响应。
要求
/播放列表
/播放列表?长度=1
/Playlist?start=first&end=last(检索队列的一部分,通常用于分页)
| 参数 | 描述 |
| 长度=1 | 仅返回顶级属性,不返回轨道详细信息。 |
| 开始 | 队列中第一个包含在响应中的条目,从 0 开始。 |
| 结尾 | 队列中要包含在响应中的最后一个条目。 |
回复
对于播放队列状态:
十三
243
1
播放队列列表:
2002
安妮·玛丽
2002
Deezer:487381362
| 响应属性 | 描述 |
| 姓名 | 当前播放队列名称。 |
| 修改的 | 0 表示队列自加载以来尚未被修改。1 表示队列自加载以来已被修改。 |
| 长度 | 当前队列中的曲目总数 |
| id | 当前队列状态的唯一 ID(例如 1054)。它与在/状态响应中。 |
| 歌曲 | 歌曲由几个子元素组成: · albumid = 曲目所在专辑的 ID · service = 曲目的音乐服务 · artistid = 曲目艺术家的 ID · songid = 歌曲 ID · id = 当前队列中的曲目位置。如果当前已选择曲目,则曲目 id 与在/状态响应中。 · title = 曲目名称 · art = 艺术家姓名 · alb = 专辑名称 |
Example
http://192.168.1.100:11000/Playlist
列出播放队列中的所有曲目。
http://192.168.1.100:11000/Playlist?length=1
5.2 删除曲目
描述
从当前播放队列中删除曲目。
要求
/删除?id=位置
| 参数 | 描述 |
| id | 将从当前播放队列中删除的曲目的曲目 ID。 |
回复
9
| 响应属性 | 描述 |
| 删除 | 队列中要移除的轨道的位置。 |
Example
http://192.168.1.100:11000/Delete?id=9
删除播放队列中位置 9 的曲目。
5.3 移动轨道
描述
在当前播放队列中移动曲目。
要求
/移动?新=目的地&旧=原点
| 参数 | 描述 |
| 新的 | 正在移动的轨道上的新位置。 |
| 老的 | 被移动的轨道的旧位置。 |
回复
已移动
| 响应属性 | 描述 |
| 已移动 | 表示轨道已被移动。 |
Example
http://192.168.1.100:11000/Move?new=8&old=2
将播放队列中位置 2 的曲目移动到位置 8。
5.4 清空队列
描述
清除当前播放队列中的所有曲目
要求
/清除
| 参数 | 描述 |
| 没有任何 |
回复
| 响应属性 | 描述 |
| 修改的 | 0 表示队列自加载后未被修改,1 表示队列自加载后被修改。 |
| 长度 | 当前队列中的曲目总数。 |
| id | 当前队列的唯一 ID。 |
Example
http://192.168.1.100:11000/Clear
这将从播放队列中删除所有曲目。
5.5 保存队列
描述
将播放队列保存为名为 BluOS 的播放列表。
要求
/保存?名称=播放列表名称
| 参数 | 描述 |
| 姓名 | 已保存的播放队列名称。 |
回复
126
| 响应属性 | 描述 |
| 条目 | 已保存的播放队列中的曲目总数。 |
Example
http://192.168.1.100:11000/Save?name=Dinner+Music
这会将播放队列保存为“晚餐音乐”。
预设
预设请求允许您列出播放器的所有预设、加载预设以及增加/减少预设。必须使用 BluOS Controller 应用程序添加和删除预设。预设可以包括电台、播放列表和输入(例如
蓝牙、模拟、光纤、HDMI ARC)。
6.1 列表预设
描述
列出当前 BluOS 播放器上的所有预设。
要求
/预设
| 参数 | 描述 |
| 没有任何 |
回复
<preset id=”6″ name=”Serenity” url=”RadioParadise:/42:4/Serenity”
image=”https://img.radioparadise.com/channels/0/42/cover_512x512/0.jpg”/>
<preset id=”7″ name=”1980s Alternative Rock Classics” url=”/Load?service=Tidal&id=fd3f797e-
a3e9-4de9-a1e2-b5adb6a57cc7″ image=”/Artwork?service=Tidal&playlistimage=afacfc12-24034caf-a5c5-a2af28d811c8″/> </presets>
| 响应属性 | 描述 |
| 骄傲 | 播放器预设的唯一 ID。它与在/状态响应中。 |
| 姓名 | 预设名称。 |
| id | 预设 ID。 |
| url | 预设 URL. 这是预设源 URL 用于加载预设。 |
| 图像 | 图像 URL 预设。如果 URL 以 /Artwork 开头可能会导致重定向。添加参数/键 followRedirects=1 检索图像时可以避免重定向。 |
Example
http://192.168.1.100:11000/Presets
列出播放器上的所有预设。
6.2 加载预设
描述
开始播放预设。您可以选择特定的预设编号,以及下一个或上一个预设。预设编号不必连续,例如,预设编号可以是 1,2,3、5、7、8、XNUMX 和 XNUMX。预设会从上到下或从下到上循环播放。
要求
/预设?id=presetId|-1|+1
| 参数 | 描述 |
| id | 待加载预设的 ID 号。可用预设 ID 列表可通过“显示预设”命令查看。 如果预设 ID 为 +1,则加载下一个预设。如果预设 ID 为 -1,则加载上一个预设。 |
回复
如果预设是曲目列表,它将返回已加载预设的曲目数。
60
如果预设是收音机,它将返回流状态。
溪流
| 响应属性 | 描述 |
| 服务 | 已加载预设的服务名称 |
| 条目 | 已加载预设的曲目数量 |
Example
http://192.168.1.100:11000/Preset?id=4
加载预设 ID 为 4 的预设。
http://192.168.1.100:11000/Preset?id=+1
内容浏览和搜索
本节介绍音乐服务内容浏览和搜索的命令。
7.1 浏览音乐内容
描述
浏览可用的音乐源以及输入和播放列表。
响应的根元素是除非出现错误响应。大多数结果都是一系列在某些情况下,结果是一系列,每个都包含一个序列,如果。所有值均使用属性提供。没有文本节点。
/Browse 调用的结果可能是包含在根元素。错误的详细信息在一个以及零个或多个文本节点。
要求
/浏览?键=键值
/浏览?键=键值&withContextMenuItems=1
| 参数 | 描述 |
| 钥匙 | 可选参数。缺少此参数将导致顶级浏览。返回顶级 /Browse 之外的其他级别的信息。使用从先前响应中获取的“browseKey”、“nextKey”、“parentKey”或“contextMenuKey”属性值。 注意:key-value必须 URL 编码 |
| 带有上下文菜单项 | 可选参数。 该值始终为 1. 此参数用于在获取播放列表、专辑、曲目、电台、艺术家等的浏览结果时获取内联上下文菜单。 |
回复
顶级浏览响应:
<item image=”/images/InputIcon.png” text=”Optical Input”
玩URL=”/玩?url=Capture%3Ahw%3A1%2C0%2F1%2F25%2F2%2Finput1″ inputType=”spdif”
类型=”音频”/>
其他级别浏览响应:
<browse sid=”16″ serviceIcon=”/Sources/images/DeezerIcon.png” serviceName=”Deezer”
服务=”Deezer” searchKey=”Deezer:搜索” 类型=”菜单”>
item browserKey=”/Playlists?service=Deezer&genre=0&category=toplist” text=”热门播放列表”
类型=”链接”/>
类型=”链接”/>
类型=”链接”/>
item browserKey=”/Songs?service=Deezer&genre=0&category=toplist” text=”热门歌曲”
类型=”链接”/>
| 响应属性 | 描述 |
| 请参阅下面的元素/属性表 |
Example
笔记: 所有关键参数必须采用 UTF-8 编码。
http://192.168.1.100:11000/Browse
进行顶级浏览。
http://192.168.1.100:11000/Browse?key=Tidal%3A
进行第二级浏览,返回潮汐类别。
http://192.168.1.100:11000/Browse?key=Tidal%3AmenuGroup%2F3
进行第三级浏览,返回潮汐大师(第 3 组)子类别。
http://192.168.1.100:11000/Browse?key=%2FAlbums%3Fservice%3DTidal%26category%3Dmasters
进行第四级浏览,返回第一组 Tidal Masters 专辑。
http://192.168.1.100:11000/Browse?key=%2FAlbums%3Fservice%3DTidal%26category%3Dmasters%26 start%3D30%26end%3D79
进行另一次第四级浏览,返回第二组 Tidal Masters 专辑。
| 元素 | 属性(和值) | 描述 | |
| 服务图标 | 当前正在浏览的服务的图标的 URI。 | ||
| 服务名称 | 当前正在浏览的服务名称,供用户显示。 | ||
| 搜索键 | 用于 /Browse 请求的关键参数值,用于搜索当前服务(或层次结构的更深层部分)。此外,该请求还应包含一个包含搜索词的 q 参数。 | ||
| 下一个键 | 用于 /Browse 请求的关键参数的值,用于获取当前项目的下一页 view。分页块大小不受 API 用户的控制,并且不应尝试解析或操作此值的查询参数。 | ||
| 父键 | 如果应该覆盖默认的后退导航,则使用 /Browse 请求的关键参数的值来导航回层次结构。 | ||
| 类型 | 菜单 | 导航节点可能包含任意类型项目的混合。通常情况下,只包含链接或音频项目。 | |
| 上下文菜单 | 指定类型的项目列表。 | ||
| 艺术家 | |||
| 元素 | 属性(和值) | 描述 | |
| 作曲家 | |||
| 专辑 | |||
| 播放列表 | |||
| 轨道 | |||
| 流派 | |||
| 部分 | 按字母顺序排列的部分。 | ||
| 项目 | 通用结果列表。最常见的是菜单节点(type=”link”)和单选项目(type=”audio”)的混合。 | ||
| 文件夹 | 可能包含子文件夹、曲目和播放列表条目。 | ||
| 文本 | 前往类别。 | ||
| 下一个键 | 用于 /Browse 请求的关键参数的值,用于获取该类别的下一页项目。 | ||
| 父键 | 如果应该覆盖默认的后退导航,则使用 /Browse 请求的关键参数的值来导航回层次结构。 | ||
| 类型 | 关联 | 浏览层次结构中的通用节点,可引导至其他节点 | |
| 声音的 | 可直接播放的节点 | ||
| 艺术家 | 代表艺术家的物品 | ||
| 元素 | 属性(和值) | 描述 | |
| 作曲家 | 代表作曲家的物品 | ||
| 专辑 | 代表专辑或类似收藏品的物品 | ||
| 播放列表 | 代表播放列表或类似集合的项目 | ||
| 追踪 | 代表单个轨道的项目 | ||
| 文本 | 纯文本节点。 | ||
| 部分 | 按字母顺序排列的部分。 | ||
| 文件夹 | 文件夹浏览中的文件夹。 | ||
| 文本 | 商品描述的主要或第一行 | ||
| 文本2 | 第二行 | ||
| 图像 | 商品的图标或插图。如果图片以
/Artwork 可能会导致重定向。添加参数/键 followRedirects=1 检索图像时可以避免重定向。 |
||
| 浏览键 | 用于后续 /Browse 请求的关键参数的值,用于降低层次结构。 | ||
| 玩URL | 可直接调用的 URI,用于调用相应项目的默认播放操作。通常用于清空队列并开始播放。 | ||
| 自动播放URL | 可以直接调用的 URI,用于将曲目添加到队列并播放,并将包含对象(例如专辑)中的后续曲目添加到自动填充 | ||
| 元素 | 属性(和值) | 描述 |
| 播放队列的部分。 | ||
| contextMenuKey | 用于 /Browse 请求的关键参数的值,用于获取与该项目相关的操作的上下文菜单的结果。 | |
| 行动URL | 可直接调用以执行指定操作的 URI。 |
上下文菜单项的类型属性可能具有以下值。
| 属性 | ||
| 描述 | ||
| 最喜欢的 | -添加 | 将商品添加为收藏项(或同等内容) |
| -删除 | 从用户收藏夹中删除该项目 | |
| 添加 | 添加到播放队列 | |
| 添加 | -现在 | 添加到当前曲目之后的播放队列并立即播放 |
| -下一个 | 添加到播放队列中当前曲目之后 | |
| -最后的 | 添加到播放队列末尾 | |
| 添加全部 | -现在 | 将多轨对象添加到播放队列并立即播放 |
| -下一个 | 将多轨道对象添加到播放队列中当前轨道或多轨道对象之后 | |
| -最后的 | 将多轨对象添加到播放队列的末尾 | |
| 播放电台 | 播放与该商品相关的电台 | |
| 删除 | 删除对象(通常是播放列表)。应请求用户确认 |
当使用参数“withContextMenuItem=1”浏览时,结果将包含内联上下文菜单。
Example
http://192.168.1.100:11000/Browse?key=%2FAlbums%3Fservice%3DDeezer%26genre%3D0%26category %3Dtoplist&withContextMenuItems=1
是否请求 Deezer => 热门 => 热门专辑 带有内联上下文菜单。
回复
响应包含内联对于每个项目。
<item text=”Essonne History X” contextMenuKey=”Deezer:contextMenu/Album?albumid=693798541″
玩URL=”/添加?服务=Deezer&albumid=693798541&playnow=1″ 图像=”/艺术品?服务=Deezer&albumid=693798541″
浏览密钥 =”Deezer:专辑?艺术家 = Ziak&album=Essonne%20History%20X&albumid=693798541″ 文本 =”Ziak” 类型 =”专辑”>
<item text=”Favorite” type=”favourite-add” actionURL=”/AddFavourite?service=Deezer&albumid=693798541″/>
<item text=”Play now” type=”add-now”
行动URL=”/添加?服务=Deezer&playnow=1&clear=0&shuffle=0&where=nextAlbum&albumid=693798541″/>
<item text=”Shuffle” type=”add-shuffle”
行动URL=”/添加?服务=Deezer&shuffle=1&playnow=1&where=nextAlbum&albumid=693798541″/>
<item text=”Add next” type=”addAll-next” actionURL=”/添加?服务=Deezer&playnow=-1&where=nextAlbum&albumid=693798541″/>
<item text=”Add last” type=”addAll-last” actionURL=”/添加?服务=Deezer&playnow=-1&where=last&albumid=693798541″/>
…
实施说明和提示
项目的类型属性作为提示提供,可以方便不同的显示选项。
浏览项目内容的能力由是否存在 browserKey 属性表示。播放(整个)项目的能力由是否存在 play 属性表示。URL (也可能自动播放)URL) 属性。一个项目可能同时具有 browserKey 属性和 playURL 属性。
当双方都玩的时候URL 和自动播放URL 属性可用,使用哪一个作为默认播放选项应该由用户偏好决定。
URI 值通常是包含绝对路径部分的相对 URI。相对 URI 会根据 RFC 3986 解析为绝对 URI。
当使用 browserKey、contextMenuKey 和 searchKey 属性值作为 /Browse 请求的关键参数值时,它们应始终采用 URI 编码(百分比转义),任何其他请求参数也应如此。
当浏览层次下降时,UI 页面标题显示某种面包屑可能会很有用,可能使用父节点和祖节点的标题(文本)。
当浏览父级的子级时,为其提供上下文菜单可能会很有用。
在决定如何显示子项时,考虑父项的类型可能会很有用。
7.2 搜索音乐内容
描述
在服务内搜索的命令。
要求
/浏览?key=键值&q=searchText
| 参数 | 描述 |
| 钥匙 | 从先前响应的“searchKey”属性值中获取的值 |
| q | 搜索字符串。根据 key 参数(取自响应中的 searchKey 属性)指定的上下文进行搜索。如果没有 key 参数,则执行顶级搜索。 |
回复
<browse sid=”16″ serviceIcon=”/Sources/images/DeezerIcon.png” serviceName=”Deezer”
服务=”Deezer” searchKey=”Deezer:搜索” 类型=”菜单”>
返回搜索结果的顶层。如需进一步搜索艺术家、专辑、歌曲或播放列表,则需要使用以“browseKey”为关键字的浏览命令。
例如ample,要查看专辑的搜索结果,请发送命令:
http://192.168.1.100:11000/Browse?key=%2FAlbums%3Fservice%3DDeezer%26expr%3Dmichael
响应将与正常 /Browse 命令的响应相同。
| 响应属性 | 描述 |
| 在浏览命令中引用元素/属性表 |
Example
http://192.168.1.100:11000/Browse?key=Deezer:Search&q=michael 搜索 “michael” within the Deezer music service.
玩家分组
本节介绍默认播放器分组和取消分组的命令。BluOS 还支持固定分组,但这超出了本文档的讨论范围。
BluOS 使用“主播放器”和“辅助播放器”这两个术语。主播放器是群组中的主要播放器。主播放器用于选择音乐源。主播放器只有一个。辅助播放器连接到主播放器。辅助播放器可以有多个。
如果玩家是次要玩家,那么许多请求(如果直接发送给次要玩家)都会被内部代理到主要玩家。这些请求包括 /Status、播放控制、播放队列管理以及内容浏览和搜索请求。
8.1 第二组球员
描述
将一名次要玩家与一名主要玩家分组。
要求
/AddSlave?slave=secondaryPlayerIP&port=secondaryPlayerPort&group=组名
| 参数 | 描述 |
| 奴隶 | 次要玩家的 IP 地址。 |
| 港口 | 辅助播放器的端口号。默认端口号为 11000。像 NAD CI580 这样的播放器,它有四个播放器,共用一个 IP,因此会使用多个端口。 |
| 团体 | 可选,群组名称。若未提供,BluOS 将使用默认群组名称。 |
回复
| 响应属性 | 描述 |
| 从端口 | 刚刚分组的辅助播放器的端口号。 |
| Id | 刚刚分组的次要玩家的 ID。 |
Example
http://192.168.1.100:11000/AddSlave?slave=192.168.1.153&port=11000
这会将玩家 192.168.1.153 和玩家 192.168.1.100 分组。玩家 192.168.1.100 是主玩家。
8.2 将多个玩家添加到一个组
描述
将两个或更多玩家分组为一个主要玩家。
要求
/AddSlave?slaves=secondaryPlayerIPs&ports=secondaryPlayerPorts
| 参数 | 描述 |
| 奴隶 | 要添加到主玩家的辅助玩家的 IP 地址。IP 地址以逗号分隔。 |
| 端口 | 要添加到主播放器的辅助播放器的端口。端口号以逗号分隔。 |
回复
| 响应属性 | 描述 |
| 港口 | 已分组的辅助播放器的端口。 |
| Id | 被分组的次要玩家的 ID。 |
Example
http://192.168.1.100:11000/AddSlave?slaves=192.168.1.153,192.168.1.120&ports=11000,11000
将次要玩家 192.168.1.153 和 192.168.1.120 与主要玩家 192.168.1.100 分组。
8.3 从队伍中移除一名玩家
将一名玩家从队伍中移除。如果将一名次要玩家从队伍中移除,则次要玩家将被解组。如果将主玩家从 3 名或以上玩家的队伍中移除,则主玩家将被解组,其余次要玩家将组成新的队伍。
要求
/RemoveSlave?slave=secondaryPlayerIP&port=secondaryPlayerPort
| 参数 | 描述 |
| 奴隶 | 要添加到另一个播放器(主播放器)的播放器(辅助播放器)的 IP。 |
| 港口 | 要添加到另一个播放器(主播放器)的播放器(辅助播放器)的端口。 |
回复
<SyncStatus icon=”/images/players/P300_nt.png” volume=”4″ modelName=”PULSE” name=”PULSE0278″ model=”P300″
品牌=”Bluesound” etag=”25″ outlevel=”-62.9″ schemaVersion=”25″ initialized=”true” group=”PULSE-0278+POWERNODE-0A6A” syncStat=”25″ id=”192.168.1.100:11000″mac=”90:56:82:9F:02:78″>
| 响应属性 | 描述 |
| 有关详细信息,请参阅/SyncStatus。 |
Example
http://192.168.1.100:11000/RemoveSlave?slave=192.168.1.153&port=11000
将播放器 192.168.1.153 从主播放器 192.168.1.100 所在的组中取消分组
8.4 从群组中移除多名玩家
描述
从一个组中删除两个或更多玩家。
要求
/RemoveSlave?slaves=secondaryPlayerIPs&ports=secondaryPlayerPorts
| 参数 | 描述 |
| 奴隶 | 将从主玩家中移除的次要玩家的 IP 地址。IP 地址以逗号分隔。 |
| 参数 | 描述 |
| 端口 | 要从主播放器中移除的辅助播放器的端口。端口号以逗号分隔。 |
回复
<SyncStatus icon=”/images/players/P300_nt.png” volume=”4″ modelName=”PULSE” name=”PULSE0278″ model=”P300″ brand=”Bluesound” etag=”41″ outlevel=”-62.9″ schemaVersion=”25″ initialized=”true” syncStat=”41″ id=”192.168.1.100:11000″ mac=”90:56:82:9F:02:78″></SyncStatus>
| 响应属性 | 描述 |
| 有关详细信息,请参阅/SyncStatus。 |
Example
http://192.168.1.100:11000/RemoveSlave?slaves=192.168.1.153,192.168.1.120&ports=11000,11000
将玩家 192.168.1.153 和 192.168.1.120 从主玩家 192.168.1.100 的组中删除。
玩家重启
本节介绍播放器软重启的命令。
9.1 重启玩家
描述
软重启播放器。
要求
POST 命令 /reboot 带参数 yes(任意值)
| 参数 | 描述 |
| 是的 | 任何值(例如 1)。 |
回复
设置已更新
正在重新启动。请关闭此窗口。
请稍等…
Example
curl -d 是=1 192.168.1.100/重启
门铃声
本节介绍播放器门铃铃声的命令。
10.1 门铃声
描述
启动门铃声。
要求
http://PLAYERIP:PORT/Doorbell?play=1
| 参数 | 描述 |
| 玩 | 播放门铃(始终为 1) |
回复
| 响应属性 | 描述 |
| 使能够 | 指示钟声 |
| 体积 | 铃声音量 |
| 钟声 | 钟声音频 |
Example
http://192.168.1.100:11000/Doorbell?play=1 play doorbell chime
直接输入
本节介绍直接输入源选择的命令。
11.1 主动输入选择
描述
主动输入源选择。此命令适用于 /RadioBrowse?service=Capture 响应中出现的主动输入。BluOS HUB 输入选择仅受此命令支持。
要求
/玩?url=URL_价值
| 参数 | 描述 |
| url | 这 URL 来自对 /RadioBrowse?service=Capture 的响应的属性 |
回复
溪流
| 响应属性 | 描述 |
| 状态 | 指示输入正在播放 |
Example
步骤 1. 获取 URL参数的_value url
请求:http://192.168.1.100:11000/RadioBrowse?service=Capture
回复:
<item playerName=”Tick
勾选” text=”蓝牙” inputType=”蓝牙” id=”input2″ URL=”捕获%3Abluez%3Abluetooth” 图像=” /images/BluetoothIcon.png” 类型=”audio”/>
<item playerName=”Tick Tick” text=”Analog
输入” inputType=”模拟” id=”input0″ URL=”Capture%3Aplughw%3Aimxnadadc%2C0%2F48000%2F 24%2F2%3Fid%3Dinput0″ image=”/images/capture/ic_analoginput.png” type=”audio”/>
<item playerName=”Tick Tick” text=”Optical
输入” inputType=”spdif” id=”input1″ URL=”Capture%3Ahw%3Aimxspdif%2C0%2F1%2F25%2F2%3Fid%
3Dinput1″ image=”/images/capture/ic_opticalinput.png” type=”audio”/>
<item playerName=”Tick
勾选” text=”Spotify” id=”Spotify” URL=”Spotify%3Aplay” image=”/Sources/images/SpotifyIcon.png” 服务
类型=”云服务” 类型=”音频”/>
<remoteitem playerName=”Test Hub” text=”Analog Input” inputType=”analog” id=”hub192168114911000input0″
URL=”Hub%3A%2F%2F192.168.1.149%3A11000%2Finput0″
图像=”/图像/捕获/我
c_analoginput.png”
类型=”音频”/>
<remoteitem playerName=”Test Hub” text=”Coaxial Input” inputType=”spdif” id=”hub192168114911000input3″
URL=”Hub%3A%2F%2F192.168.1.149%3A11000%2Finput3″
图像=”/图像/捕获/ic
_opticalinput.png”
类型=”音频”/>
<remoteitem playerName=”Test Hub” text=”HDMI ARC” inputType=”arc” id=”hub192168114911000input4″
URL=”Hub%3A%2F%2F192.168.1.149%3A11000%2Finput4″
图像=”/图像/捕获/ic
_tv.png”
类型=”音频”/>
<remoteitem playerName=”Test Hub” text=”Optical Input” inputType=”spdif” id=”hub192168114911000input2″
URL=”Hub%3A%2F%2F192.168.1.149%3A11000%2Finput2″
图像=”/图像/捕获/ic
_opticalinput.png”
类型=”音频”/>
<remoteitem playerName=”Test Hub” text=”Phono Input” inputType=”phono” id=”hub192168114911000input1″
URL=”Hub%3A%2F%2F192.168.1.149%3A11000%2Finput1″
图像=”/图像/捕获/ic
_vinyl.png”
类型=”音频”/>
步骤2.在播放器上播放模拟输入
http://192.168.1.100:11000/Play?url=Capture%3Aplughw%3A2%2C0%2F48000%2F24%2F2%3Fid%3Dinput0 or play Analog Input of a HUB named “Test Hub”
http://192.168.1.100:11000/Play?url= Hub%3A%2F%2F192.168.1.149%3A11000%2Finput0
笔记: 确保源已连接并且未被隐藏。
11.2 外部输入选择
描述
外部输入源选择。有时,非活动外部输入可能不会显示在
/RadioBrowse?service=Capture。此命令适用于活动和非活动输入选择。建议用于 CI 外部输入选择。
请求(BluOS 固件高于 v3.8.0 且低于 v4.2.0)
/Play?inputIndex=IndexId
| 参数 | 描述 |
| 输入索引 | /Settings?id=capture&shcemaVersion=1(32 为最新架构版本)响应中出现的输入的索引(从 32 开始),按数字顺序排列。不包括蓝牙。 |
回复
溪流
| 响应属性 | 描述 |
| 状态 | 指示输入正在播放 |
Example
步骤 1. 获取 inputIndex 值
请求:http://192.168.1.100:11000/Settings?id=capture&schemaVersion=32
回复:
<menuGroup icon=”/images/settings/ic_capture.png” url=”/设置” id=”捕获”
displayName=”自定义来源”>
<setting icon=”/images/settings/ic_bluetooth.png” refresh=”true” url=”/音频模式”
id=”bluetooth” displayName=”Bluetooth” value=”3″ name=”bluetoothAutoplay” description=”Disabled” explanation=”手动模式允许您在导航抽屉中切换源。当连接的蓝牙设备开始播放音频时,自动模式会切换到蓝牙源。然后,您可以在导航抽屉中切换源。当连接的蓝牙设备开始播放音频时,访客模式会切换到蓝牙源。如果您更改为其他来源,蓝牙将断开连接。蓝牙源不会出现在导航抽屉中。禁用将从导航抽屉中移除源,并且不允许其他设备作为蓝牙连接到播放器
来源。” class=”list”>
…
<menuGroup icon=”/images/capture/ic_analoginput.png” url=”/setting” id=”captureinput0″
displayName=”模拟
输入”>
<menuGroup icon=”/images/capture/ic_opticalinput.png” url=”/设置” id=”capture-input1″
displayName=”光学输入”>
响应显示蓝牙、模拟输入和光纤输入。由于蓝牙被排除在外,因此模拟输入的 inputIndex 值为 1,光纤输入的 inputIndex 值为 2。
第 2 步。在播放器上播放“光纤输入”。
http://192.168.1.100:11000/Play?InputId=2
请求(BluOS 固件 v4.2.0 或更新版本)
/Play?inputTypeIndex=$typeIndex
| 参数 | 描述 |
| 输入类型索引 | typeIndex 的格式为 类型索引 输入。这是输入列表 类型: spdif(光纤输入) 模拟(模拟输入,线路输入)同轴(同轴输入)蓝牙 弧形(HDMI ARC) Earc (HDMI eARC) 唱机(乙烯基) 电脑 埃塞布 (AES/EBU) 平衡 (Balanced In) 麦克风(麦克风输入) 这 指数 从 1 开始。当有多个相同类型的输入时,输入 1 具有 指数 1、输入 2 有 指数 2、等等。 |
回复
溪流
| 响应属性 | 描述 |
| 状态 | 指示输入正在播放 |
Example
请求:http://192.168.1.100:11000/Play?inputTypeIndex=spdif-2 选择光纤输入2
回复:溪流
蓝牙
本节介绍更改蓝牙模式的命令。
12.1 更改蓝牙模式
描述
更改蓝牙模式:手动、自动、访客、禁用。
要求
/audiomodes?bluetoothAutoplay=值
| 参数 | 描述 |
|
蓝牙自动播放 |
蓝牙模式 价值 0 表示手动,1 表示自动,2 表示访客,3 表示禁用。 |
没有回应
Example
请求:http://192.168.1.100:11000/audiomodes?bluetoothAutoplay=3 禁用蓝牙
附录
13.1 Lenbrook服务发现协议
介绍
诸如 mDNS 和 SSDP 等常用的发现方法都使用并依赖于 UDP 多播通信。目前大多数 Lenbrook 产品都使用 mDNS 进行发现。遗憾的是,我们发现相当多的客户的家庭网络多播流量无法正常工作,导致我们的设备无法可靠地被发现。这导致了大量产品退货和来自我们分销商的投诉。
为了解决这个问题,我们创建了一个名为 LSDP 的自定义发现协议,它利用 UDP 广播。初步测试表明,该协议比基于 mDNS 的发现协议更加可靠。
协议结束view
该协议的一个目标是相对简单。它可以用于内存非常有限的嵌入式设备。
该协议使用往返于 UDP 端口 11430 的所有 UDP 广播数据包。此端口已在 IANA 注册,并于 27 年 2014 月 XNUMX 日起分配给 Lenbrook 用于 LSDP。
在稳定状态下,每个具有要宣传的服务的节点大约每分钟广播一次公告消息。
在启动时以及服务列表或网络参数发生变化时,应以较短的间隔广播七个数据包,以便更快地进行初始发现和更改传播。对于广播服务的节点,这七个初始数据包应包含一条“宣布”消息。对于尝试发现服务的节点,这七个初始数据包应包含一条“查询”消息。对于不再可用的服务,这七个初始数据包应包含一条“删除”消息。
由于 UDP 数据包的不可靠性,这些初始数据包会被发送七次。即使七次数据包全部失败(这种情况不太可能发生),一段时间后,服务仍然可以通过一分钟周期性的 Announce 消息被发现。
如果节点收到其所通告的服务类别的查询消息,则它将在短暂的随机时间延迟后以公告消息进行响应,并重置其当前的公告超时。
数据包头和所有消息块都包含长度字段。这提供了额外的灵活性,并允许将来进行向后兼容的更改。将来可能会添加额外的字段或消息类型,而旧实现在解析时可能会跳过这些字段或消息类型。如果我们决定进行向后不兼容的更改,数据包头中还有一个可以递增的版本字段。
该协议还允许将 TXT 记录包含在服务广告中,类似于使用的 TXT 记录
使用 mDNS。这为将任意元数据添加到服务中提供了极大的灵活性。
无需改变协议即可投放广告。
协议详细信息
定时
所有发送的数据包都应按随机时间或延迟进行安排,以帮助避免冲突。
- 启动数据包时间:7 个数据包,时间 = [0, 1, 2, 3, 5, 7, 10s] + (0 至 250ms 随机)。这些是绝对时间,而非延迟。所有 7 个数据包应在约 10 秒内发送完毕。
- 主播播报周期:57秒+(0至6秒随机)
- 查询响应延迟:(0至750毫秒随机)
节点编号
每个节点都应具有一个唯一 ID,用于标识该节点。该唯一 ID 包含在 Announce 和 Delete 消息中。客户端可以在缓存值时使用此值作为主键,并唯一地标识一个节点。此唯一 ID 可以是 MAC 地址,但如果一个节点在多个接口上进行通告,则每个接口的 MAC 地址都应该相同。
数据包结构
每个数据包以数据包头开头,后跟任意数量的消息块。每个消息块都以长度字段开头,以便跳过无法识别的消息。除非另有说明,所有多字节数值均应按大端序存储(最高有效字节在前)。除非另有说明,所有数字均为无符号值。例如amp例如,一个字节的长度可以具有 0 到 255 的值。
包头
| 场地 | 字节 | 描述 |
| 长度 | 1 | 包括该字段的报头总长度。 |
| 魔法词 | 4 | 此字段应为“LSDP”的四个 ASCII 字节。这有助于我们识别数据包是否是预期使用的,这样我们就不需要尝试解析来自某些意外来源的随机数据。 |
| 协议版本 | 1 | 协议版本。如果将来对协议进行更改,导致此版本向后不兼容 |
| 场地 | 字节 描述 | |
| 将会更改。当前版本为 1。 | ||
查询消息
| 场地 | ||
| 字节 | 描述 | |
| 长度 | 1 | 包括该字段在内的消息总长度。 |
| 消息类型 | 1 | “Q” = 0x51:广播响应的标准查询。 “R” = 0x52:单播响应的查询。 |
| 数数 | 1 | 要查询的类别数。 |
| 1 类 | 2 | 16 位(2 字节)类标识符。 |
| … | 对每个附加类别重复上一个字段。 | |
公告消息
公告标题
| 场地 | ||
| 字节 | 描述 | |
| 长度 | 1 | 包括完整公告头和公告记录在内的消息总长度。 |
| 消息类型 | 1 | “A” = 0x41 |
| 节点ID长度 | 1 | 节点 ID 字段的长度。 |
| 节点编号 | 多变的 | 发送公告的节点的唯一节点 ID。通常是某个节点接口的 MAC 地址。 |
| 地址长度 | 1 | 地址字段的长度。对于 IPv4,该长度应为 4。 |
| 场地 | ||
| 字节 | 描述 | |
| 地址 | 多变的 | 节点的 IP 地址。 |
| 数数 | 1 | 需要跟踪的公告记录数量。 |
公告记录
| 场地 | 字节 | 描述 |
| 班级 | 2 | 16 位(2 字节)类标识符。 |
|
TXT 计数 |
1 |
后续 TXT 记录的数量。如果为零,则省略后续字段。 |
| 键 1 长度 | 1 | 键名的长度。 |
| 键 1 | 多变的 | 密钥名称。 |
| 值 1 长度 | 1 | 值文本的长度。 |
| 值 1 | 多变的 | 值文本。 |
|
… |
对于每个附加 TXT 记录,重复前 4 个字段。 |
删除消息
| 场地 | ||
| 字节 | 描述 | |
| 长度 | 1 | 包括该字段在内的消息总长度。 |
| 消息类型 | 1 | “D” = 0x44 |
| 节点ID长度 | 1 | 节点 ID 字段的长度。 |
| 节点编号 | 多变的 | 发送消息的节点的唯一节点 ID。这通常是其中一个节点的 MAC 地址 |
| 场地 | ||
| 字节 | 描述 | |
| 接口。 | ||
| 数数 | 1 | 需要遵循的课程数量。 |
| 1 类 | 2 | 16 位(2 字节)类标识符。 |
| … | 对每个附加类别重复上一个字段。 | |
类别 ID 分配
| 班级号 | 描述 | mDNS等效项 |
| 0x0001 | BluOS播放器 | _musc._tcp |
| 0x0002 | BluOS 服务器 | _muss._tcp |
| 0x0003 | BluOS 播放器(CI580 等多区域播放器中的辅助播放器) | _musp._tcp |
| 0x0004 | sovi-mfg 用于制造测试。 | _sovi-mfg._tcp |
| 0x0005 | Sovi键盘 | _sovi-键盘._tcp |
| 0x0006 | BluOS 播放器(配对从属) | _musz._tcp |
| 0x0007 | 偏僻的 Web 应用程序(AVR OSD Web 页) | _偏僻的-web-ui._tcp |
| 0x0008 | BluOS 中心 | _mush._tcp |
| 0xFFFF | 所有类别 – 可与查询消息一起使用。 |
注1:
整体 LSDP 数据包需要被视为二进制数据。
注2:
如果一条公告消息无法容纳所有节点信息(尤其是 CI580),它将拆分为 2 条或多条公告消息,每条消息包含标题和记录,每条消息都容纳整个节点的信息。
BluOS 自定义集成 API 版本 1.7
文件/资源
![]() |
BluOS T 778 自定义集成 API [pdf] 用户手册 T 778、T 778 自定义集成 API、T 778、自定义集成 API、集成 API、API |
