本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
3D推流数字人(对应开放平台的“虚拟主播”场景)是虚拟数字人开放平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力,目前平台支持播报纯文本以及阿里云的智能语音合成的SSML标记语言,可以支持多音字、读手机号、读地址等发音方式。本篇文档将介绍如何接入3D推流数字人。
能力介绍
3D推流数字人是虚拟数字人开放平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力。
使用场景
适用于支持RTMP协议云推流的直播平台,适合直播场景。
前置条件
下述介绍接入3D推流数字人需要提前完成的步骤,每个步骤都需要完成才能顺利接入3D推流数字人。
1. 申请阿里云账号
具体参考准备工作
2. 申请购买权限,完成购买开通服务
具体参考开通服务
3. 进入虚拟数字人开放平台创建并配置应用
具体创建和配置流程可以参考:创建并配置数字人项目。
创建推流数字人应用时请在菜单选择“推流数字人”,然后点击创建数字人应用。
技术接入
请确保完成上述全部前置步骤,获取到阿里云账号的AccessKey ID和AccessKey Secret(点击获取),以及获取到对应数字人应用的tenantId和appId。
下面介绍接入推流数字人的完整步骤以及涉及到API
1. 了解虚拟数字人开放平台服务端API接入方式
虚拟数字人开放平台的服务端API采用OpenAPI形式对外输出,具体对接方案见:服务端 API 接入。
2. SDK版本要求
该功能需要升级虚拟数字人开放平台服务端SDK版本至1.0.5及以上。
3. 调用OpenAPI启动一路数字人实例
下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,获取到返回的sessionId以及token。
代码示例:
下方代码示例仅用来示意需要传递哪些参数,无法直接运行,请结合实际需求编写代码。完整的API可参考OpenAPI官网调试页面,也可在线直接填写参数并执行测试。
public static void main(String[] args) throws Exception {
// 参考OpenAPI官方示例构建Client:https://next.api.aliyun.com/api/avatar/2022-01-30/StartInstance?useCommon=true&tab=DEMO&lang=JAVA
Client client = Sample.createClient(...);
// 构造参数
StartInstanceRequest startInstanceRequest = new StartInstanceRequest();
// 租户ID从数字人开放平台的业务配置详情中获取
startInstanceRequest.setTenantId(<tenantId>);
// 业务APP从数字人开放平台的业务配置详情中获取
startInstanceRequest.setApp(new StartInstanceRequest.StartInstanceRequestApp().setAppId("<appId>"));
startInstanceRequest.setUser(new StartInstanceRequest.StartInstanceRequestUser().setUserId("<userId>").setUserName("<userName>"));
// 设置推流渠道
// 目前平台推流数字人支持RTMP推流和支付宝MRTC推流,此处通过RTMP进行示意
// RTMP推流地址请从对应想要推过去的直播平台获取,具体获取方式可以到直播平台的帮助文档查找
Map<String, String> reqConfig = new HashMap<>();
reqConfig.put("url", "<RTMP地址>");
reqConfig.put("token", "<RTMP认证token>");
StartInstanceRequestChannel channel = new StartInstanceRequestChannel();
channel.setType("RTMP");
channel.setReqConfig(reqConfig);
startInstanceRequest.setChannel(channel);
// 调用API
StartInstanceResponse startInstanceResponse = client.startInstance(startInstanceRequest);
// 获取启动后SessionId
String sessionId = startInstanceResponse.getBody().getData().getSessionId();
}
接口调用返回的sessionId在后续步骤发送文本让数字人进行播报时将会使用到,不同于播报数字人,推流数字人调用StartInstance接口不会返回channel信息,因为不需要通过RTC进行拉流。
关于StartInstance API的详细信息可以参考:StartInstance - 启动一个数字人。同时OpenAPI提供了在线调试页面,可以直接面代码调试API:OpenAPI在线调试。
reqConfig中的URL和token对应直播平台的地址和密钥,如果某些直播平台只提供一个完整的推流URL,可以只传入URL,token不传。您在启动服务之前请确保传入的推流地址是正确且可访问的,针对推流地址错误的情况数字人平台无法准确且及时的判断,可能会造成您的资源浪费。
调用成功之后可以去对应的直播后台查看是否有视频流。
4. 通过播报API驱动数字人进行播报
播报数字人需要接入方调用SendText等播报接口【详情可参考:数字人播报API接入指南】驱动数字人进行文本播报,下面是一段示例代码。
代码示例:
参考OpenAPI官网调试页面,可在线直接填写参数并执行测试。
目前数字人播报支持纯文本播报和阿里云智能语音合成的SSML标记语言两种文本播报,SSML播报请参考:数字人服务SSML使用指南。
关于数字人播报API的详细使用可以参考:数字人播报API接入指南。同时OpenAPI提供了在线调试页面,可以直接面代码调试API:OpenAPI在线调试。
5. 调用OpenAPI停止对应数字人实例
下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,需要使用到第二步中获取的sessionId。
代码示例:
参考OpenAPI官网调试页面,可在线直接填写参数并执行测试。
6. sessionId丢失如何停止数字人实例
针对运行中的数字人实例,如果sessionId丢失将无法调用StopInstance接口停止,此时可通过调用QueryRunningIntance接口获取到正在运行中的数字人实例列表,从而获取到对应的sessionId。
代码示例:
参考OpenAPI官网调试页面,可在线直接填写参数并执行测试。