苹果Apple Media Service (AMS苹果媒体服务) BLE协议介绍

一. 概念

1. 概念

AMS 全称 Apple Media Service(苹果媒体服务),是提供给 BLE 设备的一种简单控制媒体应用程序的方式,并且用于获取已连接的 IOS 设备的媒体状态信息。类似蓝牙的AVRCP协议。

服务的UUID为:

89D3502B-0F36-433A-8EF4-C502AD55F8DC

AMS 字节序和字节码

除非另有规定,否则通过 AMS 传输的所有数值都应是小端格式。

除非另有规定,否则通过 AMS 传输的所有字符串值都应是 UTF-8 编码的 unicode 字符所组成的。

依赖性

除了标准的通用属性配置文件(GATT)子程序集外,AMS 没有任何依赖性。作为 GATT 客户端的设备在使用 AMS 时,可以自由访问和使用 iOS 设备提供的其他服务。

术语

Apple Media Service 称为 AMS

AMS 服务的发布者publisher(也就是我们的 iOS 设备)应被称为媒体源(Media Source MS)。

AMS 服务的客户端(也就是我们的蓝牙设备)应被称为媒体控制器(Media Remote MR)。

下面统一使用 媒体源 和 媒体控制器 来描述 IOS 设备和蓝牙设备。

核心原则

媒体源设备通过预定义的实体来暴露其状态信息,每个实体又通过预定义的属性来暴露其状态。AMS定义了3个不同的实体,每个实体具有不同的属性集合:

  • 播放器 Player:当前活跃的媒体应用程序。该实体的属性包括应用名称、播放状态和播放音量等值。
  • 队列 Queue:当前加载的播放队列。该实体的属性包括队列大小、随机播放和重复模式等值。
  • 曲目 Track:当前加载的曲目。该实体的属性包括艺术家、标题和时长等值。

2. 特征介绍

|-----------------------------|--------------------------------------|---------------|
| 特征名称 | UUID | 属性 |
| 远程命令 (Remote Command) | 9B3C81D8-57B1-4A8A-B8DF-0E56F7CA51C2 | Write, Notify |
| 实体更新 (Entity Update) | 2F7CABCE-808D-411F-9A0C-BB92BA96C102 | Write,Notify |
| 实体属性 (Entity Attribute) | C6B2F38C-23AB-46D8-A6AB-A3A870BBD5D7 | Read,Write |

一. 具体特征介绍

1. 通用概念介绍

a. RemoteCommandID

|--------------------------------------------|---------------|
| 名称 (Name) | 值 (Value) |
| RemoteCommandIDPlay 播放 | 0 |
| RemoteCommandIDPause 暂停 | 1 |
| RemoteCommandIDTogglePlayPause 切换播放/暂停 | 2 |
| RemoteCommandIDNextTrack 下一曲目 | 3 |
| RemoteCommandIDPreviousTrack 上一曲目 | 4 |
| RemoteCommandIDVolumeUp 音量增大 | 5 |
| RemoteCommandIDVolumeDown 音量减小 | 6 |
| RemoteCommandIDAdvanceRepeatMode 切换重复模式 | 7 |
| RemoteCommandIDAdvanceShuffleMode 切换随机播放模式 | 8 |
| RemoteCommandIDSkipForward 快进 | 9 |
| RemoteCommandIDSkipBackward 快退 | 10 |
| RemoteCommandIDLikeTrack 喜欢此曲目 | 11 |
| RemoteCommandIDDislikeTrack 不喜欢此曲目 | 12 |
| RemoteCommandIDBookmarkTrack 收藏此曲目 | 13 |
| Reserved 保留 | 14--255 |

b. EntityID

|-------------------------|---------------|
| 名称 (Name) | 值 (Value) |
| EntityIDPlayer 实体ID:播放器 | 0 |
| EntityIDQueue 实体ID:队列 | 1 |
| EntityIDTrack 实体ID:曲目 | 2 |
| Reserved 保留 | 3--255 |

c. PlayerAttributeID values

|--------------------------------------------|-------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 名称 (Name) | | 格式 (Format) |
| PlayerAttributeIDName 播放器属性ID:名称 | 0 | A string containing the localized name of the app. 一个包含应用本地化名称的字符串。 |
| PlayerAttributeIDPlaybackInfo 播放器属性ID:播放信息 | 1 | A concatenation of three comma-separated values: 由三个逗号分隔值拼接而成: - 播放状态 :一个表示播放状态整数值的字符串: PlaybackStatePaused = 0 PlaybackStatePlaying = 1 PlaybackStateRewinding = 2 PlaybackStateFastForwarding = 3 - 播放速率 :一个表示播放速率浮点数值的字符串。 - 已播放时间:一个表示在值发送给媒体接收器时,当前曲目已播放时间(以秒为单位)的浮点数值字符串。 |
| PlayerAttributeIDVolume 播放器属性ID:音量 | 2 | 一个表示音量浮点数值的字符串,范围从 0(静音)到 1(最大音量)。 |
| Reserved 保留 | ~ | |

d. QueueAttributeID values

|-------------------------------------------|-------|----------------------------------------------------------------------------------------------------|
| 名称 (Name) | | 格式 (Format) |
| QueueAttributeIDIndex 队列属性ID:索引 | 0 | 一个包含队列索引整数值(从0开始)的字符串。 |
| QueueAttributeIDCount 队列属性ID:数量 | 1 | 一个包含队列中项目总数整数值的字符串。 |
| QueueAttributeIDShuffleMode 队列属性ID:随机播放模式 | 2 | 一个包含随机播放模式整数值的字符串。 |
| QueueAttributeIDRepeatMode 队列属性ID:重复模式 | 3 | 一个包含重复模式整数值的字符串。 |
| Reserved 保留 | ~ | |

e. TrackAttributeID values

|------------------------------------|-------|---------------------------|
| 名称 (Name) | | 格式 (Format) |
| TrackAttributeIDArtist 曲目属性ID:艺术家 | 0 | 一个包含艺术家名称的字符串。 |
| TrackAttributeIDAlbum 曲目属性ID:专辑 | 1 | 一个包含专辑名称的字符串。 |
| TrackAttributeIDTitle 曲目属性ID:标题 | 2 | 一个包含曲目标题的字符串。 |
| TrackAttributeIDDuration 曲目属性ID:时长 | 3 | 一个包含曲目总时长(以秒为单位)浮点数值的字符串。 |
| Reserved 保留 | ~ | |

2. 远程命令(Remote Command)

远程命令这个特征值是用于 媒体控制器 发送给 媒体源 的播放状态特征,例如播放/暂停、音量加/减、上/下一首、循环播放等。其中格式为:

媒体控制器 发现 媒体源 AMS 服务后,可以通过发送控制命令,播放/暂停、音量加/减等操作媒体源播放器。

此特性还用于向 媒体控制器 报告当前 媒体源 支持的命令集,当媒体播放器支持的命令列表发生变化时,媒体源 会使用如下所示的格式,在该特征生产一条通知,通知中包括了支持的命令集:

3. 实体更新(Entity Update)

实体更新特性是 媒体控制器 通知 媒体源 其所需实体/属性对的特征,并在发生更改时告知 媒体控制器,例如 媒体源 媒体播放器变动、当前歌曲变更等。

默认情况下,媒体控制器 不会接收有关实体属性的任何信息。所以,为了接收此数据,媒体控制器 首先需要订阅有关实体更新特征的 GATT 通知。然后,媒体控制器 将命令写入实体更新特征,以通知 媒体源 它想知道哪个实体/属性对值。

4. 实体属性(Entity Attribute)

实体属性特征是 媒体控制器 检索属性拓展值的特征。理想情况下,仅当实体/属性对的值在相应的实体更新通知中标记为已截断,并且 媒体控制器 希望显示更多关联值时,才应使用此特征。

要检索特定实体/属性对的完整值,媒体控制器 必须先通过写入实体属性特征来发送命令