# 音视频托管指令
注意
该指令只适用于技能协议v2.1,v2.0中没有该指令
音视频资源托管指令为Response
中的一部分,托管后,iFLYOS将会全面托管用户关于音视频控制的指令,你无需实现AudioPlayer Reuqest
或VideoPlayer
。
指令 | 说明 |
---|---|
Playback.Delegate | 将音视频资源托管给iFLYOS |
# Delegate 指令(托管音频)
{
"type": "Playback.Delegate",
"orderedList": true,
"audioItems": [
{
"stream": {
"type": "AUDIO",
"url": "https://example.com/audiofile.mp3",
"token": "S0wiXQZ1rVBkov...",
"expectedPreviousToken": "f78b7d68...",
"offsetInMilliseconds": 0
},
"metadata": {
"title": "小幸运",
"artist": "田馥甄",
"album": "小幸运",
"albumId": "xxxxxx",
"source": "kugou",
"service": "music",
"mediaSource": "我的少女时代",
"duration": 265000,//单位为毫秒
"index": 1,
"provider": {
"name": "酷狗音乐",
"logo": "https://logo.kugou.com"
},
"art": {
"sources": [
{
"url": "https://example.com/brie-album-art.png"
}
]
},
"card": {
"type": "Standard",
"title": {
"size":"LARGE|SMALL",
"text":"小幸运"
},
"content":"田馥甄",
"imageUrl":"https://carfu.com/resources/card-images/race-car-small.png",
"link": {
"url":"example.iflyos.cn/",
"text":"点击查看"
}
},
"backgroundImage": {
"sources": [
{
"url": "https://url-of-the-skill-image.com/brie-background.png"
}
]
}
},
"lyric": {
"url": "https://url-of-the-lyric.iflyos.cn/xiaoxingyun.lrc",
"format": "lrc"
}
},
...
]
}
参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
type | 取值Playback.Delegate | String | 是 |
orderedList | 托管列表是否有序。无序列表(如音乐)取值为false ,无序列表可列表循环播放,可随机播放;有序列表(如有声书)取值为true ,不可列表循环播放,不可随机播放。默认为true 。 | Boolean | 否 |
audioItems | 包含所要播放的音频资源列表 | List | 是 |
audioItems.[i].stream | 云端音频流信息 | Object | 是 |
audioItems.[i].metadata | 音频元数据,这些数据将会展现在有屏设备和APP中 | Object | 是 |
audioItems.[i].lyric | 音频歌词信息 | Object | 否 |
audioItems.[i].lyric.url | 歌词文件链接 | String | 是 |
audioItems.[i].lyric.format | 歌词文件格式,可取值:lrc,txt | String | 是 |
stream 参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
type | 音频文件的类型,可取值 - AUDIO,音频文件 - SPEECH,合成文本 | String | 是 |
url | 当type 取值为AUDIO 时,此项必填,音频文件的播放地址。一般情况下是http/https地址,当音频内容是二进制音频附件时,格式为cid:{id} | String | 否 |
text | 当type 取值为SPEECH 时,此项必填。此处填写需要使用TTS合成为音频文件的文本。 | String | 否 |
token | 代表该资源的 token,技能方维护 | String | 是 |
offsetInMilliseconds | 客户端从指定的offset开始进行播放 | Long | 是 |
metadata 参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
title | 音频文件的标题 | String | 是 |
artist | 作者/艺术家等信息 | String | 否 |
album | 专辑信息 | String | 否 |
albumId | 专辑的唯一标识 | String | 否 |
source | 音频资源的来源,建议填写版权方 | String | 否 |
service | 该信源所处的业务或技能 | String | 否 |
mediaSource | 音频文件出现的影视作品信息,比如电影、电视、综艺的名称 | String | 否 |
duration | 音频文件的长度,以毫秒为单位 | Long | 否 |
provider | 内容提供方的信息 | Object | 否 |
art | 音频文件封面,尺寸 960 x 960px | Image Object | 是 |
backgroundImage | 播放器背景图片,尺寸 1024 x 768 | Image Object | 否 |
card | 用于向设备的关联APP推送消息。支持三种卡片类型:Simple、Standard、List。建议在此处使用Standard。点击查看详情 | Object | 否 |
# Delegate 指令(托管视频)
{
"type": "Playback.Delegate",
"orderedList": true,
"videoItems": [
{
"stream": {
"type": "VIDEO",
"url": "https://example.com/videofile.mp4",
"token": "S0wiXQZ1rVBkov...",
"expectedPreviousToken": "f78b7d68...",
"offsetInMilliseconds": 0
},
"metadata": {
"title": "长安十二时辰:第1集",
"artist": "易烊千玺",
"album": "长安十二时辰",
"source": "youku",
"mediaSource": "长安十二时辰",
"duration": 2650000,//单位为毫秒
"service": "video",
"index": 1,
"provider": {
"name": "酷狗音乐",
"logo": "https://logo.kugou.com"
},
"art": {
"sources": [
{
"url": "https://example.com/brie-album-art.png"
}
]
},
"card": {
"type": "Standard",
"title": {
"size":"LARGE|SMALL",
"text":"长按十二时辰:第1集"
},
"content":"长按十二时辰",
"imageUrl":"https://carfu.com/resources/card-images/race-car-small.png",
"link": {
"url":"example.iflyos.cn/",
"text":"点击查看"
}
},
},
}
...
]
}
参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
type | 取值Playback.Delegate | String | 是 |
orderedList | 托管列表是否有序。无序列表(如短视频)取值为false ,无序列表可列表循环播放,可随机播放;有序列表(如电视剧)取值为true ,不可列表循环播放,不可随机播放。默认为true 。 | Boolean | 否 |
videoItems | 包含所要播放的视频资源列表 | List | 是 |
videoItems.[i].stream | 云端视频流信息 | Object | 是 |
videoItems.[i].metadata | 视频元数据,这些数据将会展现在有屏设备和APP中 | Object | 是 |
stream 参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
type | 视频文件的类型,固定取值VIDEO | String | 是 |
url | 视频文件的播放地址。一般情况下是http/https地址 | String | 是 |
token | 代表该资源的 token,技能方维护 | String | 是 |
offsetInMilliseconds | 客户端从指定的offset开始进行播放 | Long | 是 |
metadata 参数说明
参数名 | 说明 | 类型 | 必须出现 |
---|---|---|---|
title | 视频文件的标题 | String | 是 |
artist | 作者/艺术家等信息 | String | 否 |
album | 专辑信息 | String | 否 |
source | 视频资源的来源,建议填写版权方 | String | 否 |
mediaSource | 视频文件出现的影视作品信息,比如电影、电视、综艺的名称 | String | 否 |
duration | 视频文件的长度,以毫秒为单位 | String | 否 |
index | 视频的序号,一般用在有声书或课程类音频,代表第x集 | Long | 否 |
provider | 内容提供方的信息 | Object | 否 |
art | 视频文件封面 | Image Object | 否 |
card | 用于向设备的关联APP推送消息。支持三种卡片类型:Simple、Standard、List。建议在此处使用Standard。点击查看详情 | Object | 否 |
# 使用说明
若使用的该指令,技能的response
中的shouldEndSession
必须取值为true
。
若使用了该指令,用户的音频控制都会由音频托管服务进行处理,但你的技能还会接收到以下意图:
意图名称 | 用户场景 | response建议 |
---|---|---|
ivs_next_list_intent | 当前正在播放托管列表中的最后一个资源,此时用户请求“下一个” | Response中包含Playback.Delegate指令,托管当前列表的后一个列表;包含AudioPlayer.Play指令,播放当前音频的下一个音频 |
ivs_previous_list_intent | 当前正在播放托管列表中的第一个资源,此时用户请求“上一个” | Response中包含Playback.Delegate指令,托管当前列表的前一个列表;包含AudioPlayer.Play指令,播放当前音频的上一个音频 |
ivs_select_intent | 播放过程中,用户请求“播放第5集/期/个” | Response中包含Playback.Delegate指令,托管一个列表;包含AudioPlayer.Play指令,播放符合用户预期的音频 |