接入指南

2D实时互动项目快速接入。

搭建环境

在项目中引入如下三个库

  • AgoraRTC N-4.19.3.js
  • crypto-js.min.js
  • voice.min.js

环境装配

创建一个 startRTC 方法。该方法会创建一个供 SDK 各个接口使用的上下文 RTC对象,初始化 SDK 环境,并填写 SDK 的相关参数信息。代码如下:

  • 导入必要的命名空间。例如:
import {RTC,processorVideo} from "./basicVideoCall_fz.js";
  • 提供待机视频,提供html容器。如下:

												
  • 创建上下文,启动渲染器进程,装配环境。如下:
var rtc;
function startRTC() {
	rtc = new RTC({		
		channel: 'XDLIVECHAT',
		StandbyVideo: document.getElementById("video"),//数字人待机视频
		prefixUrl:'http://180.76.97.202:9099',//为所有接口地址,测试环境为 (http://180.76.97.202:9099),线上为(https://qhw.smart-xiaoduo.cn/webapi_commons);			
		KeyID:'ZXRwN8x2Nmttem7lNmJkM2w1bmJlbnpydmppb2hsb8YzYzdjd3psdfsdfsdgcccdfs333',//为调取所有接口的token,
		websocketUrl:'ws://180.76.97.202:9099//ws2/',//为询问房间人数的长链接接口地址,测试环境为 (ws://180.76.97.202:9099//ws2/),线上为(wss://qhw.smart-xiaoduo.cn/webapi_wss/ws2/);
		Objfunction:vm7.setYw,//房间空了之后的回调函数名称,需要自己在业务代码中定义	
		NoJTime:20,//允许不交互的时间,不配置默认300
		Timeoutfunction:vm7.goChaos,//在房间中了过了不交互时间之后的回调函数名称,需要自己在业务代码中定义
		aiId:276,//必传,
		videoW:vm7.divWidth,
		videoh:vm7.divHeight	
	});
};

通过new RTC()初始化rtc运行环境:
channel为当前数字人房间;必填项
StandbyVideo为数字人待机视频;必填项
prefixUrl为所有接口地址,测试环境为 (http://180.76.97.202:9099),线上为(https://qhw.smart-xiaoduo.cn/webapi_commons);必填项
KeyID为调取所有接口的token;必填项
websocketUrl为询问房间人数的长链接接口地址;非必填
Objfunction为房间空了之后的回调函数名称,需要自己在业务代码中全局定义;如果配置了websocketUrl,此项是必填项,回调函数需要有参数,参数返回当前房间人数,大于1则当前房间不可加入
NoJTime为长时间不交互自动退出数字人服务的时间;非必填,不配置默认300;
Timeoutfunction在房间中了过了不交互时间之后的回调函数名称,需要自己在业务代码中全局定义;必填项,回调函数可以处理在一定时间不交互离开房间的提示
aiId为当前数字人id;必填项
videoW为数字人展示宽度;必填项
videoh为数字人展示宽度;必填项

加载待机视频

SDK提供去绿幕方法,processorVideo.doLoad()函数将待机视频去绿幕后画到页面
参数1:待机视频video;
参数2:画布width;
参数3:画布height,
在画到页面之前必须保证待机视频在循环播放

	let video2 = document.getElementById("video");
	video2.play();
	console.log(video2)
	processorVideo.doLoad(video2,524,931);

检测当前房间人数

用户与数字人交互前,需要确定当前房间人数,rtc.getUserLsit()方法可以检测当前房间人数,当返回值为true时,调用rtc.startBasicCall()方法进入数字人预备服务状态

rtc.getUserLsit().then(function(data){
		console.log(data);
		if(data === true){
			rtc.startBasicCall();
			
		}else{
			//当前处于排队
		}
	})

注:rtc.startBasicCall()方法初始化房间,使数字人进入服务状态

开启语音识别

初始化语音环境-new Voice(),包含两个方法:
1)voice.start()----开始语音识别
2)voice.stop()----停止语音识别

	voice = new Voice({	
		onTextChange: function(text) {
			//vm7.RWwenziNR为上一次识别内容,防止重复发送
	        if(vm7.RWwenziNR.replace("。", "").replace("?", "").replace("?", "").replace("?",
	        		"") != text.replace("。", "").replace("?", "").replace("?", "").replace("?", "")){
				if (text != '') {
					//拿到识别结果进行逻辑处理
					console.log(text);
					vm7.yhK_show = true;//开始加载用户内容框
					vm7.sending(text);//text为识别内容,识别内容进行发送,这里可以去调取知识库
				}						
			}			
			// 3秒钟内没有说话,就自动关闭
			if (text) {
				clearTimeout(times);
				times = setTimeout(() => {
					index = 0;
					vm7.imgList = vm7.imgList1;//停止识别后处理你页面上的逻辑
					vm7.yuyingshibie_sf = false;//停止识别后处理你页面上的逻辑
					console.log("停止识别")
					this.stop(); 
					
				}, 2000);
			};
		}
	});

TTS合成

数字人说话需要提供音频文件,格式为wav,SDK提供TTS合成方法。 调取rtc.getTTS(text)方法进行语音合成,text参数为将要合成的文字,返回值为一个wav格式的音频文件

	rtc.getTTS(text).then(function(result){
        console.log(result)
		rtc.xdService(result);//调取数字人互动,参数为wav格式音频	
	})	

数字人互动

SDK提供数字人互动方法rtc.xdService(result),告诉数字人开始互动,参数result参数为wav格式的音频文件:

rtc.xdService('http://180.76.97.202/factory-tts/87bac151-d979-4e45-adcb-a19bc1e4ad8a.wav')

重置不交互时间

SDK存有在一定时间不交互离开房间的机制,提供方法rtc.xdService(result)重置计时,配合使用重启计时, 重置成功之后返回true,想要重启需要将leaveHouse设置为false,然后调取SDK方法rtc.NointeractionJS()进行计时重启:

self.clearNointeraction().then(function(obj){
	if(obj === true){
		rtc.leaveHouse = false;
		rtc.NointeractionJS();//重启
	}	
});

停止推流方法

SDK提供方法rtc.TlStopService()---停止推流方法,成功返回true,否则返回false:,

   rtc.TlStopService().then(function(result){
	   if(result===true){
		    //业务代码
	   }
	  
   })

房间自动询问

SDK提供方法rtc.ljwebsocket(boolean)---建立长链接进行房间自动询问,参数为Boolean类型,true为开启长链接,false为关闭长链接;

注意:必须配合new RTC({})选项Objfunction回调函数使用,Objfunction回调函数必须是全局函数,参数返回当前数字人服务房间人数:

	setYw(obj){
		if(obj>1){
			console.log("当前房间已满,不可进入房间");
		}else{
			console.log("当前房间为空,可以进入房间");
			this.CxgetUserLsit();//重新进入房间
		}
	}

音频播放失败监听

音频播放失败的回调AgoraRTC.onAutoplayFailed::

	AgoraRTC.onAutoplayFailed = () => {
		console.log("此处监听到音频不能播放")
		vm7.btn_yd = true;
	}
2024-01-03

接入指南

U3D实时互动项目快速接入。

搭建环境

在项目中引入如下五个库

  • HumanWebLipsync.loader.js
  • crypto-js.min.js
  • voice.js
  • basicVideoCall_fz.js
  • speechRecognition.js

环境装配

创建一个 startRTC 方法。该方法会创建一个供 SDK 各个接口使用的上下文 DRIVE对象,初始化 SDK 环境,并填写 SDK 的相关参数信息。代码如下:

  • 引入5个库。例如:
  • 创建上下文,启动渲染器进程,装配环境。如下:
var MyGameInstance;
function startRTC() {
	MyGameInstance = new DRIVE({
		prefixUrl:'http://180.76.97.202:9099',//为所有接口地址,测试环境为 (http://180.76.97.202:9099),线上为(https://qhw.smart-xiaoduo.cn/webapi_commons);
		appid:'OWMzO9U5M3NoN921emc1NTZ2am85YzJpNm9leW9sb37oYmZ3M8JnYXI43fdfdgm0',
		role: 1
	});
};

通过new DRIVE()初始化SDK运行环境:
prefixUrl为所有接口地址,测试环境为 (http://180.76.97.202:9099),线上为(https://qhw.smart-xiaoduo.cn/webapi_commons);必填项
KeyID为调取所有接口的token;必填项
aiId为当前数字人id;必填项

调用口型说话

SDK提供方法MyGameInstance.xdypService(text)---调用口型说话,参数text为说的内容,string。

调用模型动作

SDK提供方法MyGameInstance.playaction(num)---调用模型动作,参数num为动作指令,1为加油,Number。

MyGameInstance.playaction(1)

调整数字人位置

SDK提供方法MyGameInstance.playScale(num,type)---调整数字人位置,参数num为坐标数值,type为坐标类型,X为x轴方向,Y为y轴方向,Z为z轴方向,W为XYZ同时的方向。

MyGameInstance.playScale("2","W")

调整数字人大小

SDK提供方法MyGameInstance.playaCamFov("num")---调整数字人大小,参数num为缩放程度,string。

MyGameInstance.playaCamFov("50")
2024-01-03