内容资源播放的最佳实践
本文提供内容资源播放实践经验及指导:控制台 服务器 端具体操作。音乐播放包括云播放和端播放两种播放模式。云播放模式下,系统下发音乐音频流,支持通过语音、文本进行“暂停播放”、“下一首”等指令控制;端播放模式下,系统下发有时效性的资源链接,需要端侧自行实现播放器功能。资源库中有不同格式的音频,如mp3、m4a等,考虑到开发成本和部分端不支持m4a等非mp3格式,建议接入时,选择云播放模式。
一、控制台配置
使用系统自带内容资源库进行音乐播放,需要具备两个前置条件 购买内容资源 和 APP开启音乐播放。
1.1 购买内容资源
在购买正式资源或者申请测试资源时,勾选 高级功能中的 内容资源,配置方式如下图:

系统自带内容资源库需付费使用,如果购买或者申请测试license时,未勾选 内容资源,则终端设备无法进行系统资源库播放。
不具备 内容资源 权限的的license,可以通过在license上 扩展功能 ,实现给license添加 内容资源 权限。完成扩展后,所有使用该license的设备(含已激活、未激活)均具备系统自带内容库播放权限。

1.2 APP开启音乐播放
APP开启音乐播放能力后,才能进行音乐播放。配置方式如下图:

- 组件选择:勾选 内容资源 组件,表示该APP开启播放器能力
- 内容资源标签:全量,指筛选资源时支持儿童和非儿童的全量资源;儿童,指筛选资源时仅筛选儿童类的资源
-
播放模式:
- 云播放:系统推送音乐音频流,端侧接收后直接调用喇叭播放(建议适当缓存,避免网络抖动等影响);支持通过语音、文本进行"暂停播放"、"下一首"等指令控制
- 端播放:系统下发有时效性的资源链接,需要端侧自行实现播放器功能。控制指令通常需要自行定义function call 实现端上控制
- 注:云播放模式内置五种播放控制指令(开始播放、暂停播放、继续播放、上一首、下一首),若用户额外配置播放相关 function call,将产生冲突
端播放控制function配置建议
第一步,进入【意图设置】,点击【推荐function】
第二步,在弹窗中根据需求选择播放音乐、暂停播放和继续播放对应的function
第三步,根据业务需求修改例句、描述等内容。若有其他场景(如上一首、下一首、播放xx类型歌曲),也可以根据业务需求通过自定义function的形式将指令给到端侧实现内容资源的控制。
具体配置详见 意图设置

二、播放方式控制:云播放or端播放
方式一:控制台设置
在控制台直接设置某个app的默认播放模式(对全量实例生效),配置位置如下:

方式二:创建agent时,通过参数设置
在调用创建agent的接口时,设置config中的 remote_music_player 参数。该方式仅对当前agent生效,会覆盖控制台设置的默认播放模式。 true 设置该agent使用 云播放模式,false 设置该agent使用 端播放模式。配置如下(config字段中的第一个参数):
1POST /api/v1/aiagent/generateAIAgentCall HTTP/1.1
2host: rtc-aiagent.baidubce.com
3content-type: application/json
4authorization: {bce-authorization-string}
5x-bce-request-id: {bce-request-id}
6{
7 "app_id": "yourAppId",
8 "config": "{\"remote_music_player\":true, \"llm\" : \"\", \"llm_token\" : \"no\", \"lang\" : \"zh\", \"tts\": \"DEFAULT\", \"tts_url\":\"DEFAULT{\\\"vcn\\\": \\\"\\\",\\\"vol\\\": 0.1,\\\"spd\\\": 1.1, \\\"apid\\\": \\\"\\\", \\\"apikey\\\": \\\"\\\"}\", \"user_id\": \"enterprise-1-toy-1\",\"content_used_db\": \"db1,db2\"}"
9}
参数说明参考 服务端API
三、端侧云播放控制和事件
3.1 播放事件
3.1.1 云播放
端侧会收到播放事件
| 云播放事件 | 返回事件 | 示例 | 说明 |
|---|---|---|---|
| 文本回复 | [A]: | [A]:我找找...一首dan + shay的lying送给你 | query对应的文本回复 |
| TTS播报开始 | [E]:[TTS_BEGIN_SPEAKING] | [E]:[TTS_BEGIN_SPEAKING] | 文本回复TTS播报开始事件 |
| TTS播报开始 | [E]:[TTS_END_SPEAKING] | [E]:[TTS_END_SPEAKING] | 文本回复TTS播报结束事件 |
| 云播放开始 | [E]: [REMOTE_PLAYER_BEGIN] | [E]: [REMOTE_PLAYER_BEGIN] | 音乐音频流开始事件 |
| 云播放停止 | [E]: [REMOTE_PLAYER_END] | [E]: [REMOTE_PLAYER_END] | 音乐音频流结束事件 |
| 资源信息 | [E]:[PLAY_AUDIO_CONTENT]: | [E]:[PLAY_AUDIO_CONTENT]:{"music_name":"Lying","artist":"dan + shay","track_id":"6005752RGSU","media_length":146000} | json字符串内,分别表示音乐、歌手、资源id、资源时长(<=0仅表示上游时长字段获取失败,资源能正常播放) |
3.1.2 端播放
端侧会收到播放链接
| 云播放事件 | 返回事件 | 示例 | 说明 |
|---|---|---|---|
| 文本回复 | [A]: | [A]:我找找...一首dan + shay的lying送给你 | query对应的文本回复 |
| TTS播报开始 | [E]:[TTS_BEGIN_SPEAKING] | [E]:[TTS_BEGIN_SPEAKING] | 文本回复TTS播报开始事件 |
| TTS播报开始 | [E]:[TTS_END_SPEAKING] | [E]:[TTS_END_SPEAKING] | 文本回复TTS播报结束事件 |
| 资源播放链接 | [E]:[PLAY_AUDIO]: | [E]:[PLAY_AUDIO]:http(s)://xxx/a.m4a?timestampe=1111 | 内容资源访问链接(有多种格式,有访问时效) |
| 资源信息 | [E]:[PLAY_AUDIO_CONTENT]: | [E]:[PLAY_AUDIO_CONTENT]:{"music_name":"Lying","artist":"dan + shay","track_id":"6005752RGSU","media_length":146000} | json字符串内,分别表示音乐、歌手、资源id、资源时长(注意,<=0 仅表示上游时长字段获取失败,资源能正常播放) |
3.2 播放控制
3.2.1 语音控制
播放音乐,开始播放音乐
"我想听音乐","播放音乐","唱首歌","播放歌曲","来首音乐","播放一首歌","随机播放一首歌","随机播放音乐"
暂停播放、停止播放
"暂停播放","暂停音乐","暂停故事","把音乐停一下","暂停这首歌","请暂停","停止播放","停下音乐","别放了","我不想听音乐了","我不想听歌了"
继续播放,继续播放音乐
"继续播放","可以接着放了","现在继续刚才的","请继续播放音乐","继续播放歌曲","恢复播放"
3.2.2 事件控制命令
| 播放控制文本命令 | 详细命令 |
|---|---|
| 开始播放 | [T]:播放歌曲 |
| 停止播放 | [E]:[CMD]:[REMOTE_PLAYER]:[STOP] |
| 暂停播放 | [E]:[CMD]:[REMOTE_PLAYER]:[PAUSE] |
| 继续播放 | [E]:[CMD]:[REMOTE_PLAYER]:[RESUME] |
评价此篇文章
