VideoPlayer视频播放

摘要

VideoPlayer视频播放提供了VideoPlayer指令接口和VideoPlayer事件接口。VideoPlayer指令是技能向DuerOS发送的,对视频进行控制的指令,如播放指令、停止播放指令等。DuerOS收到指令后会转化成端上能识别的播放指令,对视频进行相应的控制。VideoPlayer事件是指在视频播放过程中触发一系列事件,DuerOS会将这些事件上报给技能,请求技能进行处理。

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添加到当前播放队列的队尾。
  • 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
  • videoItem.stream.progressReport.progressReportIntervalInMilliseconds
  • videoItem.stream.token
    • 视频播放过程中video item的唯一标识。设备端会存储这个值,在视频播放期间,产生的所有事件中都会携带这个值。
  • videoItem.stream.expectedPreviousToken
    • 如果此字段存在,则应当匹配前一个video item中的token,如果不匹配则设备端不会执行VideoPlayer.Play指令。

说明:

  1. 该指令需要在设备端麦克关闭的情况下使用。下面两种情况麦克风会关闭,可以返回VideoPlayer.Play指令。
    • response的shouldEndSession字段值为true,技能结束会话并退出时,设备端会关闭麦克风,此时可以返回VideoPlayer.Play指令。当视频播放时,技能已经退出。
    • response的shouldEndSession字段和expectSpeech字段同时为false,技能还在会话中,但是不需要用户进行回复,设备端会关闭麦克风,此时可以返回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并将播放队列清空。

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状态。