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号
浙公网安备 33010602011771号