aliyun数字人接入-StartInstance实现
参考:https://api.aliyun.com/api-tools/sdk/avatar?version=2022-01-30&language=java&tab=primer-doc
https://help.aliyun.com/zh/avatar/avatar/developer-reference/api-avatar-2022-01-30-startinstance?spm=a2c4g.11186623.0.0.6ffc96ddIFmnOM
https://api.aliyun.com/api/avatar/2022-01-30/StartInstance?spm=a2c4g.11186623.0.0.72c821ddWOnHPg&RegionId=cn-zhangjiakou¶ms={"TenantId":30319,"App":{"AppId":"3dtp2h6029"},"User":{"UserId":"123","UserName":"wt"},"Channel":{"Type":"DingRTC"}}&tab=DEBUG&lang=JAVA(测试地址)
@
概要
我们公司最近要接数字人,花了近一天功夫踩坑aliyun的示例代码,他各种包都有,但是跟我项目都不大兼容,特此记录一下
项目背景
了解到这个数字人是可以实时生成对口型的视频,然后推流到客户端,实现说的跟文字是对的上的效果。然后前端那启动数字人需要后端支持,后端是用accessId+accessSecret换相关信息返回的。
踩坑总记述
回忆下从昨天下午开始的坑,一开始就直接使用在我的platform里面跑,但是发现启动都启不起来,结果ai说日志版本不兼容

好吧,然后我用了exclude排除了,还在总的那块加上这个
configurations {
all {
// 全局排除所有依赖中附带的 xpp3,因为它会与 Logback 的 XML 解析冲突
exclude group: 'xpp3', module: 'xpp3'
// --- 新增这一行,把 pull-parser 也干掉 ---
exclude group: 'pull-parser', module: 'pull-parser'
// 同样,全局排除 commons-logging,让 Spring Boot 的日志桥接统一管理
exclude group: 'commons-logging', module: 'commons-logging'
}
}
implementation('com.aliyun:avatar20220130:2.5.3') {
// 排除 commons-logging,防止和 Spring Boot 的日志体系冲突
exclude group: 'commons-logging', module: 'commons-logging'
}
最后成功是成功了,代码也推上去了,但是!我的jenkins那边打包不起来,跟我报这个

估计是阿里的包里面有什么不兼容的,算了,我还是用core项目写吧,随后我拉下parent,
重新配置了项目启动那的Edit configure和project Structue还有maven的setting跟runner,如图

但是设置后啥反应都没有,看到日志报错,好像是权限啥的,贴给gemini,说我的maven的仓库没有权限创建,我立马改了然后apply,idea就开始不断的加载包了,持续了好久,大概小半个小时好了。
然后就在core上开发吧,先切换mac的java版本,然后直接复制之前在platform实现好了的代码,参考示例,但是不行了,这个pom的实现和gradle不一样,还是重写吧,怎么写一只报null exception,
打断点发现是报错进catch里面了,然后我继续修改,还让cursor帮我写再加上自己进源码看结构总算可以了,推上去,发版,发现postman请求不了,排查一番发现我的header里面一大堆不用的东西,
删除了就可以了
实现代码
@Override
public StartInstanceResDTO startInstance(String appId, String userId, String userName) {
// 1. 配置你的 AccessKeyId、AccessKeySecret、Endpoint
String accessKeyId = "11111";
String accessKeySecret = "22222";
String endpoint = "avatar.cn-zhangjiakou.aliyuncs.com";
try {
// 2. 初始化 Client
com.aliyun.avatar20220130.Client client = new com.aliyun.avatar20220130.Client(
new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(accessKeyId)
.setAccessKeySecret(accessKeySecret)
.setEndpoint(endpoint)
);
StartInstanceRequest.StartInstanceRequestApp startInstanceRequestApp = new StartInstanceRequest.StartInstanceRequestApp();
startInstanceRequestApp.setAppId(appId);
StartInstanceRequest.StartInstanceRequestUser startInstanceRequestUser = new StartInstanceRequest.StartInstanceRequestUser();
startInstanceRequestUser.setUserId(userId);
startInstanceRequestUser.setUserName(userName);
// 3. 构造请求
StartInstanceRequest request = new StartInstanceRequest()
.setTenantId(tenantId)
.setApp(startInstanceRequestApp)
.setUser(startInstanceRequestUser);
// 4. 调用接口
StartInstanceResponse response = client.startInstanceWithOptions(request, new RuntimeOptions());
String resultStr = new Gson().toJson(response).toString();
log.info("startInstance appId:{}, result: {}", appId, resultStr);
StartInstanceResDTO startInstanceResDTO = JSON.parseObject(resultStr, new TypeReference<StartInstanceResDTO>() {
});
return startInstanceResDTO;
} catch (Exception e) {
log.error("startInstance error", e);
return null;
}
}
小结
官方文档也不一定靠谱,还是要多看看有什么值得参考的,还有就是要看细致报错

浙公网安备 33010602011771号