VideoPlayer视频播放
摘要
VideoPlayer视频播放提供了VideoPlayer指令接口和VideoPlayer事件接口。VideoPlayer指令是技能向DuerOS发送的,对视频进行控制的指令,如播放指令、停止播放指令等。DuerOS收到指令后会转化成端上能识别的播放指令,对视频进行相应的控制。VideoPlayer事件是指在视频播放过程中触发一系列事件,DuerOS会将这些事件上报给技能,请求技能进行处理。
- VideoPlayer.Play指令
- VideoPlayer.Stop指令
- VideoPlayer.ClearQueue指令
- VideoPlayer.PlaybackStarted事件
- VideoPlayer.PlaybackStopped事件
- VideoPlayer.PlaybackFinished事件
- VideoPlayer.PlaybackNearlyFinished事件
- VideoPlayer.ProgressReportIntervalElapsed事件
- VideoPlayer.ProgressReportDelayElapsed事件
- VideoPlayer.PlaybackStutterStarted事件
- VideoPlayer.PlaybackStutterFinished事件
- VideoPlayer.PlaybackPaused事件
- VideoPlayer.PlaybackResumed事件
- VideoPlayer.PlaybackQueueCleared事件
- PlaybackScheduledStopReached事件
VideoPlayer.Play指令
播放视频指令,当技能向DuerOS发送该指令时,通知DuerOS对指定的视频进行播放操作。
消息样例
{
"type": "VideoPlayer.Play",
"playBehavior": "{{STRING}}"
"videoItem": {
"videoItemId": "{{STRING}}",
"stream": {
"url": "{{STRING}}",
"offsetInMilliseconds": {{LONG}},
"stopPointsInMilliseconds":[
{{LONG}},
{{LONG}},
...
],
"expiryTime": {{STRING}}
"progressReport": {
"progressReportDelayInMilliseconds": {{LONG}},
"progressReportIntervalInMilliseconds": {{LONG}}
},
"token": "{{STRING}}",
"expectedPreviousToken": {{STRING}}
}
}
}
参数说明
- type
- 指令类型,取固定值"VideoPlayer.Play"。
- playBehavior
- 控制视频播放操作及视频播放队列,有以下三种情况。
- REPLACE_ALL
- 立即停止当前正在播放的video(如有必要,技能会发送VideoPlayer.Stop指令)并清除播放队列,立即播放指令中指定的video item。
- REPLACE_ENQUEUED
- 替换播放队列中所有video item,但不影响当前正在播放的video item。
- ENQUEUE
- 将指令中的video item添加到当前播放队列的队尾。
- REPLACE_ALL
- 控制视频播放操作及视频播放队列,有以下三种情况。
- videoItem
- 播放视频资源的信息。
- videoItem.videoItemId
- video item的id信息。
- videoItem.stream
- 视频流信息。
- videoItem.stream.url
- 视频流的资源地址。
- videoItem.stream.offsetInMilliseconds
- 视频从offsetInMilliseconds时间点开始播放,单位是ms。
- videoItem.stream.stopPointsInMilliseconds
- 播放到指定的offset后停止播放,并且会上报PlaybackScheduledStopReached事件。
- videoItem.stream.expiryTime
- ISO8601格式,表示stream过期时间。
- videoItem.stream.progressReport.progressReportDelayInMilliseconds
- 如果此字段存在,则在播放该video item时,播放到指定时间之后会向技能上报VideoPlayer.ProgressReportDelayElapsed事件;如果此字段不存在,则不会向技能上报VideoPlayer.ProgressReportDelayEsapsed事件。
- videoItem.stream.progressReport.progressReportIntervalInMilliseconds
- 如果此字段存在,则在播放该video item时,每隔指定时间会向技能上报VideoPlayer.ProgressReportIntervalElapsed事件;如果此字段不存在,则不会向技能上报 VideoPlayer.ProgressReportIntervalElapsed事件。
- videoItem.stream.token
- 视频播放过程中video item的唯一标识。设备端会存储这个值,在视频播放期间,产生的所有事件中都会携带这个值。
- videoItem.stream.expectedPreviousToken
- 如果此字段存在,则应当匹配前一个video item中的token,如果不匹配则设备端不会执行VideoPlayer.Play指令。
说明:
- 该指令需要在设备端麦克关闭的情况下使用。下面两种情况麦克风会关闭,可以返回VideoPlayer.Play指令。
VideoPlayer.Stop指令
停止播放视频指令。当技能向DuerOS发送该指令时,通知DuerOS停止播放视频。
消息样例
{
"type": "VideoPlayer.Stop"
}
参数说明
- type:
- 指令类型,取固定值"VideoPlayer.Stop"。
VideoPlayer.ClearQueue指令
清除视频播放队列指令,当技能向DuerOS发送该指令时,通知DuerOS清除视频播放队列。
消息样例
{
"type": "VideoPlayer.ClearQueue"
"clearBehavior": "{{STRING}}"
}
参数说明
- type:
- 指令类型,取固定值"VideoPlayer.ClearQueue"。
- clearBehavior:
- 清除视频播放队列行为,包含以下两种情况。
- CLEAR_ENQUEUED
- 播放队列中仅保留当前正在播放的video item。
- CLEAR_ALL
- 停止当前正在播放的video item并将播放队列清空。
- CLEAR_ENQUEUED
- 清除视频播放队列行为,包含以下两种情况。
VideoPlayer.PlaybackStarted事件
当视频开始播放时,DuerOS向技能上报VideoPlayer.PlaybackStarted事件。
消息样例
{
"type": "VideoPlayer.PlaybackStarted",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackStarted"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频播放的时间点。
VideoPlayer.PlaybackStopped事件
当用户说"停止播放"后,DuerOS会向技能上报该事件,请求技能保存视频播放信息。
消息样例
{
"type": "VideoPlayer.PlaybackStopped",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackStopped"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackNearlyFinished事件
当前video item播放快要结束,准备缓冲或下载播放队列中的下一个video item时,DuerOS会向技能上报此事件。技能收到该事件后可以返回VideoPlayer.Play指令,将下一个video item添加到播放队列中。
消息样例
{
"type": "VideoPlayer.PlaybackNearlyFinished",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackNearlyFinished"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackFinished事件
当前视频播放结束时,DuerOS向技能上报此事件。
消息样例
{
"type": "VideoPlayer.PlaybackFinished",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackFinished"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.ProgressReportIntervalElapsed事件
本事件用来统计播放情况。只有当VideoPlayer.Play指令中配置了progressReportIntervalInMilliseconds字段,在播放该video item时,每隔指定时间会向技能上报该事件。
上报本事件应根据播放时长,例如配置progressReportIntervalInMilliseconds为10000,VideoPlayer.Play指令指定的offsetInMilliseconds为25000,则视频从第25秒处开始播放,每播放10秒钟(播放到35秒处、45秒处、55秒处等等)上报本事件。
消息样例
{
"type": "VideoPlayer.ProgressReportIntervalElapsed",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.ProgressReportIntervalElapsed"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.ProgressReportDelayElapsed事件
本事件用来统计播放情况。只有当VideoPlayer.Play指令中配置了progressReportDelayInMilliseconds字段,在播放该video item时,播放到指定时间会向技能上报该事件。
上报本事件应根据播放时长,例如配置progressReportDelayInMilliseconds为10000,VideoPlayer.Play指令指定的offsetInMilliseconds为25000,则视频从第25秒处开始播放,播放10秒钟后(即播放到35秒处)上报本事件。
消息样例
{
"type": "VideoPlayer.ProgressReportDelayElapsed",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.ProgressReportDelayElapsed"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackStutterStarted事件
当DuerOS向技能上报PlaybackStarted事件之后,如果视频缓冲数据的速度慢于播放速度时,DuerOS会向技能上报此事件。
消息样例
{
"type": "VideoPlayer.PlaybackStutterStarted",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackStutterStarted"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackStutterFinished事件
DuerOS向技能上报PlaybackStutterStarted事件之后,当缓冲恢复到正常状态,缓冲速度大于播放速度,视频可以重新播放时会上报此事件。
消息样例
{
"type": "VideoPlayer.PlaybackStutterFinished",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
"stutterDurationInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackStutterFinished"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
- stutterDurationInMilliseconds
- 从上报VideoPlayer.PlaybackStutterStarted事件到上报VideoPlayer.PlaybackStutterFinished事件的时间间隔。
VideoPlayer.PlaybackPaused事件
在视频播放过程中,如果发生用户与设备对话交互、闹钟提醒等优先级高的通道,则视频暂停播放,DuerOS会向技能上报此事件。
消息样例
{
"type": "VideoPlayer.PlaybackPaused",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackPaused"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackResumed事件
在视频播放过程中,如果发生用户与设备对话交互、闹钟提醒等优先级高的通道,则视频暂停播放,DuerOS会向技能上报VideoPlayer.PlaybackPaused事件,如果高优先级通道结束后,视频会继续播放,此时DuerOS会向技能上报PlaybackResumed事件。
消息样例
{
"type": "VideoPlayer.PlaybackResumed",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackResumed"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
VideoPlayer.PlaybackQueueCleared事件
当DuerOS处理完技能下发的VideoPlayer.ClearQueue指令后,DuerOS会向技能上报VideoPlayer.PlaybackQueueCleared事件。
消息样例
{
"type": "VideoPlayer.PlaybackQueueCleared",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{LONG}}
}
参数说明
- type
- 请求类型,取固定值"VideoPlayer.PlaybackQueueCleared"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 视频播放过程中的唯一标识。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
视频播放示例
{
"version": "2.0",
"context": {
"user": {
"userId": "xxx"
},
"System": {
"application": {
"applicationId": "videoplayer"
}
}
},
"request": {
"type": "VideoPlayer.PlaybackStarted",
"requestId": "33c78c8f-22db-4d6a-bfd5-075d264377b7",
"timestamp": "1501127440",
"token": "12329898321",
"offsetInMilliseconds": 1000
}
}
PlaybackScheduledStopReached事件
播放到指定的停止点时,上报此事件。
消息样例
{
"type": "VideoPlayer.PlaybackScheduledStopReached",
"requestId": "{{STRING}}",
"timestamp": {{INT32}},
"token": "{{STRING}}",
"offsetInMilliseconds": {{INT64}},
"stopPointIndex": {{INTEGER}}
}
参数说明
- type
- 请求类型,即字符串"VideoPlayer.PlaybackScheduledStopReached"。
- requestId
- 标识本次请求的唯一ID。
- timestamp
- 请求时间戳,整数类型,单位是秒。
- token
- 对应到播放的视频id。
- offsetInMilliseconds
- 事件上报时视频流的播放点。
- stopPointIndex
- 当前停止点的序号,停止点从0开始排序,即第一个停止点序号为0。
状态上报
在request请求中可以获取到当前设备端播放视频的状态,详细内容请参考request协议中的VideoPlayer状态。