# 视频播放器
# 协议类型
| 消息类型 | 名称 | 必须实现 | 
|---|---|---|
| directive | video_out | 否,设备需要支持视频播放才需实现 | 
| event | progress_sync | 否,设备需要支持视频播放才需实现 | 
# context
请求示例
"unios_context": {
  ...
  "video_player": {
    "version": "1.0",
    "state": "IDLE",
    "resource_id": "xxxx",
    "offset": 3000   
  },
  ...
}
}
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
| 参数 | 类型 | 说明 | 必填 | 
|---|---|---|---|
| version | String | 模块版本,现在是1.0 | 是 | 
| state | String | 视频播放器的状态,取值: - PLAYING: 播放中 - IDLE: 空闲中 。刚开机时或设备没有播放列表时上报这个状态 - PAUSED: 已暂停。设备有播放列表,但没有在播放时,上报这个状态  |  是 | 
| resource_id | String | 视频内容的ID。state取值为IDLE时该项可不出现 | 否 | 
| offset | Long | 视频内容的播放进度,以毫秒为单位。state取值为IDLE时该项可不出现。如果设备不支持,可不上传(有可能影响设备的体验) | 否 | 
注意
video_player运行中,若打开其他app,video_player需要关闭。
# directive
视频播放
当接收到视频播放指令的时候,需要使用合适的视频播放器来播放里面的内容。
回复示例
{
  "unios_directives": [
    ...,
    {
      "header": {
        "name": "video_player.video_out"
      },
      "payload": {
        "url": "https://music.UniOS.cn/tts/sadf.mp3?token=xxxxxxxx",
        "control": "PLAY",
        "behavior": "UPCOMING",
        "resource_id": "e52e7xxxxxxxxxxxe52e7",
        "offset": 3000
      }
    }
  ]
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| 参数 | 类型 | 说明 | 必填 | 
|---|---|---|---|
| control | String | 播放器控制,取值:  - PLAY: 播放 - PAUSE: 暂停 - RESUME: 继续播放 - EXIT: 关闭播放器  |  是 | 
| behavior | String | 资源播放方式:  - IMMEDIATELY: 马上播放,收到资源之后必须马上播放 - UPCOMING: 即将播放,收到资源后必须在当前设备播放队列播放完毕之后播放,可以先行预加载。当设备已有预加载内容的情况下,再次收到UPCOMING的内容时,需要把设备已预加载的内容清除,再预加载。当control为PLAY才会出现  |  否 | 
| url | String | 内容播放地址,当control为PLAY或RESUME时,可能会出现 | 否 | 
| resource_id | String | 内容ID,当control为PLAY或RESUME时,可能会出现 | 否 | 
| offset | Long | 播放位置,常见于快进快退,和某些暂停播放,单位为毫秒,当control为PLAY或RESUME时,可能会出现 | 否 | 
| uskip_opening | Boolean | 跳过片头 | 否 | 
| skip_end | Boolean | 跳过片尾 | 否 | 
| stop_fix_point | Long | 播放到指定音频时间点,单位:毫秒。上报播放状态,做营销使用,UVS可以推送广告等。视频广告:UVS下发三个指令(暂停播放视频、播放广告视频、继续播放视频),顺序执行。非音频广告:直接下发指令,终端可以不停止当前播放音频,执行指令 | 否 | 
| provider.name | String | 内容提供商名称 | 否 | 
当用户说“继续播放”时:
- 若设备没有上报offset,收到的unios_directive如下:
 
{
  "unios_directives": [
    ...,
    {
      "header": {
        "name": "video_player.video_out"
      },
      "payload": {
        "control": "RESUME"
      }
    }
  ]
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 若设备上报offset,收到的unios_directive如下:
 
{
  "unios_directives": [
    ...,
    {
      "header": {
        "name": "video_player.video_out"
      },
      "payload": {
        "url": "https://music.UniOS.cn/tts/sadf.mp3?token=xxxxxxxx",
        "control": "PLAY",
        "behavior": "IMMEDIATELY",
        "resource_id": "e52e7xxxxxxxxxxxe52e7",
        "offset": 3000
      }
    }
  ]
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# event
播放进度同步
在UniOS中我们使用播放器信息同步来实现多端信息同步,比如在手机上显示播放内容,同时也使用播放信息同步的方式来获取下一个视频的资源等等。
请求示例
{
  "unios_header": {...},
  "unios_context": {...},
  "unios_event": {
    "header": {
      "name": "video_player.progress_sync",
      "message_id": "xxxxxxxx"
    },
    "payload": {
      "type": "STARTED",
      "resource_id": "xxxxx",
      "offset": 60000,
      "failure_code": 1001
    }
  }
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| 参数 | 类型 | 说明 | 必填 | 
|---|---|---|---|
| unios_header | Object | 构建的通用 unios_header | 是 | 
| unios_context | Object | 构建的通用 unios_context | 是 | 
| type | String | 状态类型,详细见type取值说明 | 是 | 
| resource_id | String | 该请求对应的内容ID。若为播放失败,则此处为失败的内容ID | 是 | 
| offset | Long | 内容的播放进度,若设备无法获取该字段,可不传 | 否 | 
| failure_code | Long | 错误代码,type为 FAILED 时,必填。取值1001~1005,详见failure_code 取值说明 | 否 | 
type取值说明
| type | 说明 | 是否回复 | 必须 | 
|---|---|---|---|
| LOADING | 加载中,上报的时机由终端决定,比如加载了3秒后还没开始播放 | 是,回复一个正在加载的TTS | 否 | 
| STARTED | 开始播放的时候,发送此类型并告知 resource_id、offset,手机端可获得播放内容信息 | 否 | 是 | 
| FAILED | 播放失败的时候,发送此类型并告知播放失败的 resource_id,云端会下发其他内容 | 是,可能回复一个新的内容 | 是 | 
| NEARLY_FINISHED | 音频播放即将结束,一般取内容的1/3的时间长度,如果在小内存系统中,可以选择结束前10秒或者播放开始后30秒 | 是,可能回复下一首的资源 | 是 | 
| FINISHED | 播放结束时候发送此类型,发送此类型并告知 resource_id | 否 | 是 | 
| PAUSED | 正在播放的内容被暂停时(被用户按键暂停,或收到了云端下发的PAUSE类型的video_player.audio.out的directive),发送此类型并告知resource_id、offset | 否 | 是 | 
failure_code取值说明
| failure_code | 错误类型值 | 描述 | 
|---|---|---|
| 1001 | MEDIA_ERROR_UNKNOWN | 未知错误 | 
| 1002 | MEDIA_ERROR_INVALID_REQUEST | 请求无效。可能的情况有:bad request, unauthorized, forbidden, not found等 | 
| 1003 | MEDIA_ERROR_SERVICE_UNAVAILABLE | 设备端无法获取视频文件 | 
| 1004 | MEDIA_ERROR_INTERNAL_SERVER_ERROR | 服务端接收了请求但未能正确处理 | 
| 1005 | MEDIA_ERROR_INTERNAL_DEVICE_ERROR | 设备端内部错误 | 
文件限制
UVS 支持视频文件格式为: mp4, m4a, wav,单个文件的大小不得超过100M。