# 音频播放请求

注意

该请求只适用于技能协议v2.1,v2.0中没有该请求

在你回复了Play指令后,你将会收到我们发送的AudioPlayer Reuqest,你可以根据这些请求来确认你的播放指令是否被正确执行。

请求类型分为:

type取值 描述
AudioPlayer.PlaybackStarted 在技能侧发送了Play指令,音频开始播放后,iFLYOS将会发送该请求,以让技能侧知晓音频成功开始播放。
AudioPlayer.PlaybackFinished 音频自然播放完成时iFLYOS发送该请求
AudioPlayer.PlaybackStopped 在技能侧发送了Stop指令,音频停止播放后,iFLYOS将会发送该请求
AudioPlayer.PlaybackNearlyFinished 音频快要播放完成时,iFLYOS发送该请求。技能侧收到该请求之后,可以考虑进行接下来要做的业务处理。
AudioPlayer.PlaybackFailed 音频播放失败时,iFLYOS发送该请求

# 播放成功

# 消息示例

注意

该请求不包含session字段

{
  "version": "2.1",
  "context": {
    "System": {
      "application": {},
      "user": {},
      "device": {}
    }
  },
  "request": {
    "type": "AudioPlayer.PlaybackStarted",
    "requestId": "unique.id.for.the.request",
    "timestamp": "2019-04-11T15:15:25Z",
    "token": "token representing the currently playing stream",
    "offsetInMilliseconds": 0,
  }
}

# request参数说明

参数 描述 类型 必须出现
type 请求类型,取值:
- AudioPlayer.PlaybackStarted
- AudioPlayer.PlaybackFinished
- AudioPlayer.PlaybackStopped
- AudioPlayer.PlaybackNearlyFinished
String
requestId 代表请求的唯一标识符。 String
timestamp 请求时间戳,以ISO 8601格式发送 String
token 正在播放的音频文件的唯一token。 String
offsetInMilliseconds 正在播放的音频文件的音频播放进度 Long

# 合法回复类型

# 当你收到PlaybackStartedPlaybackFinished请求时

你的技能可以回复StopClearQueue指令。不能包含:

  • 标准回复的任意字段,包括 outputSpeech, card, or reprompt
  • 其他的AudioPlayer指令
  • 其他Interface的指令

# 当你收到PlaybackStopped

你不能回复该请求。

# 当你收到PlaybackNearlyFinished请求时

技能可以回复AudioPlayer指令中的任何一个。不能包含:

  • 标准回复的任意字段,包括 outputSpeech, card, or reprompt
  • 其他Interface的指令

# 播放失败

# 消息示例

{
  "version": "2.1",
  "context": {
    "System": {
      "application": {},
      "user": {},
      "device": {}
    }
  },
  "request": {
      "type": "AudioPlayer.PlaybackFailed",
      "requestId": "f78b7d68...",
      "timestamp": "2019-04-11T15:15:25Z",
      "token": "audioplayer-token...",
      "offsetInMilliseconds": 0,
      "locale": "zh-CN",
      "error": {
        "type": "MEDIA_ERROR_UNKNOWN",
        "message": "未知错误"
      },
      "currentPlaybackState": {
        "token": "audioplayer-token...",
        "offsetInMilliseconds": 0,
        "playerActivity": "PLAYING"
  	  }
   }
}

这个请求包含两个token:一个是请求对象的token代表正在播放的音频,另一个是currentPlaybackState的token表示播放失败的音频。如果设备正在播放音频,在尝试缓冲队列上的下一个音频时发生错误,currentPlaybackState.token可以是不同的。

# 参数说明

参数 描述 类型 必须出现
type 请求类型 String
requestId 代表请求的唯一标识符。 String
timestamp 请求时间戳,以ISO 8601格式发送 String
token 播放失败的音频文件的唯一token String
offsetInMilliseconds 播放失败的音频文件的进度,此处 固定取值 为0 Long
error 错误信息,只有当type取值为PlaybackFailed时,这个信息才出现 String
error.type 错误类型,取值见下表 String
error.message 错误描述 String
currentPlaybackState 当前播放器正在播放的音频信息,包含token, offsetMilliseconds, 和playerActivity 。若未出现该字段,则代表播放器当前空闲 Object
currentPlaybackState.
token
当前播放器中正在播放的音频文件的唯一token,可能和request.token不一致 String
currentPlaybackState.
offsetMilliseconds
当前播放器中的播放进度 Long
currentPlaybackState.
playerActivity
当前播放器的状态,可选值:PLAYING, PAUSED, FINISHED, BUFFER_UNDERRUN, 或 IDLE

error.type参数

错误类型 描述
MEDIA_ERROR_UNKNOWN 未知错误
MEDIA_ERROR_INVALID_REQUEST 无效请求
MEDIA_ERROR_SERVICE_UNAVAILABLE 无法访问音频文件
MEDIA_ERROR_INTERNAL_SERVER_ERROR 音频播放错误
MEDIA_ERROR_INTERNAL_DEVICE_ERROR 设备内部错误

# 合法回复类型

技能可以回复AudioPlayer指令中的任何一个。不能包含:

  • 标准回复的任意字段,包括 outputSpeech, card, or reprompt
  • 其他Interface的指令