一. 概念
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)
实体属性特征是 媒体控制器 检索属性拓展值的特征。理想情况下,仅当实体/属性对的值在相应的实体更新通知中标记为已截断,并且 媒体控制器 希望显示更多关联值时,才应使用此特征。
要检索特定实体/属性对的完整值,媒体控制器 必须先通过写入实体属性特征来发送命令

