首页 虚拟数字人开放平台 开发指南 2D推流数字人接入指南

2D推流数字人接入指南

2D推流数字人(对应开放平台的“虚拟直播”场景)是虚拟数字人开放平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力。本篇文档将介绍如何接入2D推流数字人。

能力介绍

2D推流数字人是虚拟数字人开放平台提供能够支持将数字人流媒体内容推送到用户指定的直播平台的数字人产品能力。

使用场景

适用于支持RTMP协议云推流的直播平台,适合直播场景。

前置条件

下述介绍接入2D推流数字人需要提前完成的步骤,每个步骤都需要完成才能顺利接入2D推流数字人。

1. 申请阿里云账号

2. 申请购买权限,完成购买开通服务

3. 进入虚拟数字人开放平台创建并配置应用

具体创建和配置流程可以参考:创建并配置数字人应用

重要

创建推流数字人应用时请在菜单选择“推流数字人”,然后点击创建数字人应用。

技术接入

警告

请确保完成上述全部前置步骤,获取到阿里云账号的AccessKey ID和AccessKey Secret(点击获取),以及获取到对应数字人应用的tenantId和appId。

下面介绍接入2D推流数字人的完整步骤以及涉及到API。

1. 了解虚拟数字人开放平台服务端API接入方式

虚拟数字人开放平台的服务端API采用OpenAPI形式对外输出,具体对接方案见:服务端 API 接入

2. SDK版本要求

重要

该功能需要升级虚拟数字人开放平台服务端SDK版本至1.0.5及以上。

3. 调用OpenAPI启动一路数字人实例

下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,获取到返回的sessionId以及token。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    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推流地址
    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);
    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. 通过SendMessage驱动数字人进行播报

播报数字人需要接入方调用SendMessage接口驱动数字人进行文本播报,下面是一段示例代码。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    SendMessageRequest sendMessageRequest = new SendMessageRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    sendMessageRequest.setTenantId(<tenantId>);
    // 获取startInstance返回的SessionId
    sendMessageRequest.setSessionId("<sessionId>");
    // 传入要播报的文本内容
    sendMessageRequest.setTextRequest(new SendMessageRequest.SendMessageRequestTextRequest()
       .setCommandType("START")
       .setSpeechText("你好,我是智慧数字人小萌,很高兴跟大家见面")
       .setId(UUID.randomUUID().toString()));
    SendMessageResponse sendMessageResponse = client.sendMessage(sendMessageRequest);
}
重要

关于SendMessage API的详细信息可以参考:《SendMessage - 发送文本消息》。同时OpenAPI提供了在线调试页面,可以直接面代码调试API:OpenAPI在线调试

5. 调用OpenAPI停止对应数字人实例

下面介绍通过Java调用OpenAPI启动一路数字人实例的代码示例,需要使用到第二步中获取的sessionId。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    StopInstanceRequest stopInstanceRequest = new StopInstanceRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    stopInstanceRequest.setTenantId(<tenantId>);
    // 获取startInstance返回的SessionId
    stopInstanceRequest.setSessionId(<sessionId>);
    StopInstanceResponse stopInstanceResponse = client.stopInstance(stopInstanceRequest);
}

6. sessionId丢失如何停止数字人实例

针对运行中的数字人实例,如果sessionId丢失将无法调用StopInstance接口停止,此时可通过调用QueryRunningIntance接口获取到正在运行中的数字人实例列表,从而获取到对应的sessionId。

public static void main(String[] args) throws Exception {  
    // 初始化sdk 
    Config config = new com.aliyun.teaopenapi.models.Config();
    config.setAccessKeyId("<accessKeyId>");
    config.setAccessKeySecret("<accessSecret>");
    // 在服务接入点可以查看其他的endpoint配置
    config.setEndpoint("avatar.cn-zhangjiakou.aliyuncs.com");
    Client client = new Client(config);
    
    // 调用api
    QueryRunningInstanceRequest queryRunningInstanceRequest = new QueryRunningInstanceRequest();
    // 租户ID从数字人开放平台的业务配置详情中获取
    queryRunningInstanceRequest.setTenantId(<tenantId>);
    // 业务APP从数字人开放平台的业务配置详情中获取
    queryRunningInstanceRequest.setApp(new QueryRunningInstanceRequest.QueryRunningInstanceRequestApp().setAppId("<appId>"));
    // 获取运行中的数字人实例信息
    QueryRunningInstanceResponse stopInstanceResponse = client.queryRunningInstance(queryRunningInstanceRequest);
}
阿里云首页 虚拟数字人 相关技术圈