2、关键代码说明
(1)code/dist
: 直播demo的打包文件。
在code/webpack.common.js中说明了打包入口,将整个demo的业务逻辑打包到code/dist目录下,生成HWLive.js文件,在code/index.html可以引入这个sdk,然后使用HWLive调用code/src/index.js中对外暴露的方法。
(2)code/src/authSign
: 对ak/sk进行转码的sdk。
demo的业务逻辑需要和后台交互,例如:调用请求开始直播接口(https://support.huaweicloud.com/api-metastudio/StartSmartLive.html)。向后台请求都需要携带身份信息,需要将ak/sk信息,通过sdk进行编码转化成下图所需的信息。

(3)code/src/hrtc
: 支持实时音视频的rtc sdk。
该文件主要是rtc sdk的代码,为直播业务的实时音视频提供能力。具体的一些钩子如下:
(https://support.huaweicloud.com/csdk-rtc/rtc_05_0138.html#rtc_05_0138__section19133134173816)
(4)code/src/index.js
: 定义打包文件中对外暴露的方法。
定义对外暴露的方法,分别为:
startLive:开始直播
closeLive:取消\关闭直播
pauseLive:暂停\继续直播
sendMessage:直播中进行回复。入参为一个对象{role: 回复角色, audioFile: 选填,回复的音频文件, textContent: 选填,回复的文本内容 },一次只能回复音频或文本一种类型,所以每次调用只需传audioFile或textContent;
startTakeover: 开始直播接管;
endTakeover:暂停直播接管;
(5)code/src/liveService.js
: 和后台交互逻辑。
请求/v1/{project_id}/smart-live-rooms/{roomId}/smart-live-jobs开启直播任务,开启成功,则调用joinLiveRoom方法,进行创建一个实时音视频通话的客户端对象、客户端事件监听等操作;
请求/v1/{project_id}/smart-live-rooms/{roomId}/smart-live-jobs/{job_id}/stop结束直播任务;
判断当前直播状态,“暂停直播”还是“正在直播中”。
如果要进行暂停直播,则调用rtc.js的方法,给client发送play_pause,对数字人暂停剧本播放,并保持静默状态;如果要继续直播,则调用rtc.js的方法,给client发送play_pause,数字人恢复剧本播放;
入参为object,其中属性textContent为直播中回复的文本内容,属性audioFile为直播中回复的音频文件,属性role为直播中进行回复的角色(主播/助播)。如果入参中audioFile非空,则说明是上传音频文件进行回复;如果入参中textContent非空,则说明输入文本进行回复。请求/v1/{project_id}/smart-live-rooms/{room_id}/smart-live-jobs/{job_id}/command接口实现;
开始真人接管。初始化设备,获取音频流,publish发布音频流到远端,发送voice_start消息,启动数字人实时语音播放;
结束真人接管。发送voice_end消息,结束数字人实时语音播放,然后发送play_resume消息,让数字人恢复剧本播放,unpublish取消发布本地音频流;
直播中发送音频文件回复时,需要上传音频文件到资产库。1、创建资产;2、创建音频文件;3、通过临时授权url上传文件;4、确认文件已上传;5、获取文件资产详情,获取音频文件的download_url,然后使用download_url通知后台进行音频回复;
(开放性接口:https://support.huaweicloud.com/api-metastudio/StartSmartLive.html)
(6)code/src/rtc.js
: 和rtc sdk交互逻辑。
该文件中是针对rtc sdk的一些调用,可以参考:
(https://support.huaweicloud.com/csdk-rtc/rtc_05_0137.html)
(https://support.huaweicloud.com/api-metastudio/metastudio_02_0014.html)
Demo介绍
MetaStudio数字人直播调用sdk demo,如下图所示:
针对数字人直播能力,本Demo提供了JavaScript的实现,供参考使用。
前提及准备
了解HTML及JavaScript基础知识,开发环境安装nodejs。
Demo实现效果
Demo使用说明
1、代码目录说明
code/dist
: 直播demo的打包文件。code/src/authSign
: 对ak/sk进行转码的sdk。code/src/contants
: 常量声明。code/src/hrtc
: 支持实时音视频的rtc sdk。code/src/utils
: 公共方法。code/src/index.js
: 定义打包文件中对外暴露的方法。code/src/liveService.js
: 和后台交互逻辑。code/src/rtc.js
: 和rtc sdk交互逻辑。code/index.css
: index.html中页面的样式。code/index.html
: Demo展示页面。2、关键代码说明
(1)
code/dist
: 直播demo的打包文件。在code/webpack.common.js中说明了打包入口,将整个demo的业务逻辑打包到code/dist目录下,生成HWLive.js文件,在code/index.html可以引入这个sdk,然后使用HWLive调用code/src/index.js中对外暴露的方法。
(2)
code/src/authSign
: 对ak/sk进行转码的sdk。demo的业务逻辑需要和后台交互,例如:调用请求开始直播接口(https://support.huaweicloud.com/api-metastudio/StartSmartLive.html)。向后台请求都需要携带身份信息,需要将ak/sk信息,通过sdk进行编码转化成下图所需的信息。

(3)
code/src/hrtc
: 支持实时音视频的rtc sdk。该文件主要是rtc sdk的代码,为直播业务的实时音视频提供能力。具体的一些钩子如下: (https://support.huaweicloud.com/csdk-rtc/rtc_05_0138.html#rtc_05_0138__section19133134173816)
(4)
code/src/index.js
: 定义打包文件中对外暴露的方法。定义对外暴露的方法,分别为:
startLive:开始直播
closeLive:取消\关闭直播
pauseLive:暂停\继续直播
sendMessage:直播中进行回复。
入参为一个对象{role: 回复角色, audioFile: 选填,回复的音频文件, textContent: 选填,回复的文本内容 },一次只能回复音频或文本一种类型,所以每次调用只需传audioFile或textContent;
startTakeover: 开始直播接管;
endTakeover:暂停直播接管;
(5)
code/src/liveService.js
: 和后台交互逻辑。请求/v1/{project_id}/smart-live-rooms/{roomId}/smart-live-jobs开启直播任务,开启成功,则调用joinLiveRoom方法,进行创建一个实时音视频通话的客户端对象、客户端事件监听等操作;
请求/v1/{project_id}/smart-live-rooms/{roomId}/smart-live-jobs/{job_id}/stop结束直播任务;
判断当前直播状态,“暂停直播”还是“正在直播中”。
如果要进行暂停直播,则调用rtc.js的方法,给client发送play_pause,对数字人暂停剧本播放,并保持静默状态;如果要继续直播,则调用rtc.js的方法,给client发送play_pause,数字人恢复剧本播放;
入参为object,其中属性textContent为直播中回复的文本内容,属性audioFile为直播中回复的音频文件,属性role为直播中进行回复的角色(主播/助播)。如果入参中audioFile非空,则说明是上传音频文件进行回复;如果入参中textContent非空,则说明输入文本进行回复。请求/v1/{project_id}/smart-live-rooms/{room_id}/smart-live-jobs/{job_id}/command接口实现;
开始真人接管。初始化设备,获取音频流,publish发布音频流到远端,发送voice_start消息,启动数字人实时语音播放;
结束真人接管。发送voice_end消息,结束数字人实时语音播放,然后发送play_resume消息,让数字人恢复剧本播放,unpublish取消发布本地音频流;
直播中发送音频文件回复时,需要上传音频文件到资产库。1、创建资产;2、创建音频文件;3、通过临时授权url上传文件;4、确认文件已上传;5、获取文件资产详情,获取音频文件的download_url,然后使用download_url通知后台进行音频回复;
(开放性接口:https://support.huaweicloud.com/api-metastudio/StartSmartLive.html)
(6)
code/src/rtc.js
: 和rtc sdk交互逻辑。该文件中是针对rtc sdk的一些调用,可以参考:
(https://support.huaweicloud.com/csdk-rtc/rtc_05_0137.html)
(https://support.huaweicloud.com/api-metastudio/metastudio_02_0014.html)