虚拟直播实现流程(多人连麦直播互动为例)

虚拟直播既可以实现单人视频直播,也可以邀请观众上麦、进行多人连麦互动。

虚拟直播场景的直播分为两个阶段:

  1. 单虚拟主播直播:
    单虚拟主播直播是指主播创建房间后,使用虚拟形象进行音视频直播,观众可以进房观看直播。
    主播使用 Zego Avatar SDK 设置虚拟形象,随后采集 Avatar 纹理,使用 Express Video SDK 或其他三方推流工具推流到 CDN,观众通过 Express Video SDK 或其他三方播放器拉取主播视频流观看直播。
  2. 多人虚拟连麦直播:
    多人虚拟连麦直播是指主播创建房间后,使用虚拟形象进行音视频直播,观众可以进房申请连麦,上麦后也使用虚拟形象进行互动,适用于一对多视频互动的虚拟直播场景。
    主播与连麦者(主播或观众)使用 Express Video SDK 登录直播房间,使用 Zego Avatar SDK 设置虚拟形象,随后采集 Avatar 纹理,进行互动连麦,视频流推流到 ZEGO 服务器。观众同时拉取主播和连麦者的音视频流观看。

虚拟直播架构设计

虚拟直播场景的主要架构如下图所示(以多人连麦直播互动为例):

前提条件

  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 – 项目管理 中的“项目信息”。
  • 已在项目中集成 ZEGO Express SDK,详情请参考 实时音视频 – 快速开始 – 集成 SDK。
  • 已在项目中集成 ZEGO Avatar SDK,详情请参考 Avatar 虚拟形象 – 快速开始 – 集成 SDK。
  • 请联系 ZEGO 技术支持,提供申请到的 AppID,以及自己项目的包名 applicationId,以开通 Avatar 服务。

 

实现流程

虚拟直播场景的整体流程如下:

  1. 主播进入房间后,给 Avatar 设置虚拟形象,开始采集 Avatar 纹理内容,并进行预览并推流。
  2. 观众进入房间后,给 Avatar 设置虚拟形象,并进行拉流。
  3. 主播、观众均通过信令模块进行连接,信令模块可以控制当前业务房间内的直播流程,同步并通知各端当前的直播状态。
  4. 无论是否有连麦观众, 主播和观众均通过 ZEGO 音视频云服务进行推拉流。
  5. 观众请求与主播连麦后,信令模块会通知主播,并同步连麦者的个人信息。
  6. 主播接受连麦申请后,连麦观众开始采集 Avatar 纹理内容并推流,房间内所有成员将会接收到流更新通知,并拉取连麦观众的音视频流。
  7. 若连麦观众不再需要连麦,则向业务后台发起下麦请求。收到信令模块的下麦通知后,连麦观众停止推流、停止采集 Avatar 纹理内容、停止表情随动,主播和房间内的其他观众停止拉取该观众的流。

详细流程图如下:

1 开通 Avatar 服务

请联系 ZEGO 商务人员为 AppID 开通 Avatar 服务,以便创建虚拟形象。

2 初始化 Express Video SDK

在使用 Express Video SDK 进行视频通话之前,需要初始化 SDK。由于初始化操作 SDK 时,内部处理的操作较多,建议开发者在 App 启动时进行。

/** 定义 SDK 引擎对象 */
ZegoExpressEngine engine;ZegoEngineProfile profile = new ZegoEngineProfile();
/** 请通过 ZEGO 控制台获取,格式为 123456789L */
profile.appID = appID;
/** 64个字符,请通过 ZEGO 控制台获取,格式为 "0123456789012345678901234567890123456789012345678901234567890123" */
profile.appSign = appSign;
/** 通用场景接入 */
profile.scenario = ZegoScenario.GENERAL;
/** 设置app的application 对象 */
profile.application = getApplication();
/** 创建引擎 */
engine = ZegoExpressEngine.createEngine(profile, null);

在初始化 Express Video SDK 的时候需要开通 RTC 的自定义采集,Avatar 形象是通过自定义采集推送纹理。由于 Avatar 的数据是相反方向的,所以在初始化的时候需要设置镜像。

// 设置本地预览和拉流端看到的视频都是镜像画面。(Avatar 推送的镜像相反)
engine.setVideoMirrorMode(ZegoVideoMirrorMode.BOTH_MIRROR);
ZegoCustomVideoCaptureConfig videoCaptureConfig = new ZegoCustomVideoCaptureConfig();
// 设置自定义视频采集视频帧数据类型为 GL_TEXTURE_2D 类型
videoCaptureConfig.bufferType = ZegoVideoBufferType.GL_TEXTURE_2D;
engine.enableCustomVideoCapture(true, videoCaptureConfig, ZegoPublishChannel.MAIN);

3 创建虚拟形象

在使用虚拟直播前,创建自己的个人形象。详情请参考 创建虚拟形象。

4 登录直播房间

主播开始直播或观众观看直播前,需要先登录到直播房间。在收到登录房间成功的回调后,可以直接调用 Express Video SDK 的接口进行推拉流操作。

/** 创建用户 */
ZegoUser user = new ZegoUser("Anchor");/** 开始登录房间 */
engine.loginRoom("MetaLive", user);

5 设置个人虚拟形象

初始化ZegoCharacterHelper类,设置已经创建的个人的虚拟形象,用于直播的个人形象展示。


//mZegoInteractEngine 的初始化
if (mZegoInteractEngine == null) {mZegoInteractEngine = ZegoAvatarService.getInteractEngine();
}//初始化ZegoCharacterHelper类
if (mCharacterHelper == null) {mCharacterHelper = new ZegoCharacterHelper(AvatarDataUtil.getResourcePath(context));mCharacterHelper.setExtendPackagePath(AvatarDataUtil.getPackagesPath(context));
}//默认半身,先把动画关闭
cameraViewState = ZegoAvatarViewState.half;
setBodyState(cameraViewState, false);//获取默认虚拟形象数据
String jsonDefaultStr = AvatarDefaultJson.getDefaultAvatarJson(isBoy,AvatarDefaultJson.isHead);
//isBoy 为 true 是男生
if (isBoy) {//获取已创建男生的虚拟形象String jsonMaleStr = AvatarJsonMgr.getMaleJsonData(context);//男生数据为空的情况就设置为默认形象mCharacterHelper.setAvatarJson(!TextUtils.isEmpty(jsonMaleStr) ? jsonMaleStr : jsonDefaultStr);
} else {//获取已创建女生的虚拟形象String jsonFemaleStr = AvatarJsonMgr.getFemaleJsonData(context);//女生数据为空的情况就设置为默认形象mCharacterHelper.setAvatarJson(!TextUtils.isEmpty(jsonFemaleStr) ? jsonFemaleStr : jsonDefaultStr);
}

6 单主播直播

6.1 获取 Avatar 的纹理内容

Avatar 的虚拟形象数据是通过 startCaptureAvatar 回调到上层通过自定义采集推送出去。由于 Avatar 数据是透明背景,RTC是没背景的,转换的时候默认黑色,开发者可以自行将背景设置为需要的颜色。

//根据实际需求设置 Avatar 返回内容的宽(width)和高(height)
AvatarCaptureConfig config = new AvatarCaptureConfig(width, height);//开始采集获取 Avatar 纹理mCharacterHelper.startCaptureAvatar(config, new OnAvatarCaptureCallback() {@Overridepublic void onAvatarTextureAvailable(int textureID, int width, int height) {// 背景颜色设置为 true 才生效boolean useFBO = true;if(mBgRender == null){mBgRender = new TextureBgRender(textureID, useFBO, width, height, Texture2dProgram.ProgramType.TEXTURE_2D_BG);}if(mBgRender != null){mBgRender.setInputTexture(textureID);// 用户需要修改成所需要的颜色值(RGB)mBgRender.setBgColor(rColor, gColor, bColor, 1.0f);mBgRender.draw(true);}//通过 RTC SDK 的自定义采集 sendCustomVideoCaptureTextureData 进行推送数据engine.sendCustomVideoCaptureTextureData(mBgRender.getOutputTextureID(), width, height, System.currentTimeMillis());}});

6.2 主播开启预览并推流

主播向 ZEGO 音视频云服务推流,需要自己生成唯一的 StreamID,然后开始预览并推流。

// 开启预览
engine.startPreview(new ZegoCanvas(preview_view));// 推流
engine.startPublishingStream("Anchor");

6.3 观众拉流

观众进入房间后,会收到 Express Video SDK 的流更新通知,从中筛选出主播流的 StreamID 进行拉流。

// 观众拉流
ZegoCanvas zegoCanvas = new ZegoCanvas(view);
zegoCanvas.viewMode = ZegoViewMode.ASPECT_FILL;
engine.startPlayingStream("Anchor",zegoCanvas);

7 观众连麦

7.1 连麦观众推流

观众调用业务后台请求连麦接口,调用成功后,业务后台向主播发送请求连麦自定义信令。主播收到信令后,调用业务后台同意连麦接口,调用成功后,业务后台向房间内所有成员发送连麦成功的广播信令,连麦观众收到信令后,开始推流,观众上台后也是按照 6.1 获取 Avatar 的纹理内容 的流程,把 Avatar 的内容通过自定义采集推流出去。

// 连麦观众推流
engine.startPublishingStream("Audience1");

7.2 主播拉流

连麦观众推流后,房间内所有成员会收到 Express Video SDK 的流更新通知,主播获取连麦观众流的 StreamID 进行拉流。

房间内其他观众也在收到流更新回调时,获取连麦观众流的 StreamID 进行拉流。

// 主播拉流 
ZegoCanvas zegoCanvas = new ZegoCanvas(view);
zegoCanvas.viewMode = ZegoViewMode.ASPECT_FILL;
engine.startPlayingStream("Audience1",zegoCanvas);

7.3 连麦观众下麦

连麦观众调用业务后台的下麦接口,调用成功后,业务后台向房间内所有成员发送该观众下麦的广播信令。连麦观众收到信令后停止推流、停止采集获取 Avatar 纹理内容、停止表情随动检测,房间内其他观众收到信令后停止拉流。

// 连麦观众停止预览和结束推流
engine.stopPreview();
engine.stopPublishingStream();
// 房间内其他成员结束拉流 
engine.stopPlayingStream("Audience1");
//停止采集获取 Avatar 纹理
public void stopCaptureAvatar() {if (mCharacterHelper != null) {mCharacterHelper.stopCaptureAvatar();}
}
//停止表情随动
public void stopDetectExpression() {if (mZegoInteractEngine != null && mZegoInteractEngine.isStarted()) {mZegoInteractEngine.stopDetectExpression();}
}

进阶功能

形象切换

设置 RTC 视频采集源
当开发者需要从 Avatar 虚拟形象切换到真人形象或者从真人形象切换到 Avatar 虚拟形象的时候,均需要调用 Express SDK 的 callExperimentalAPI设置 RTC 视频采集源。

public static final int VIDEO_SRC_DEFAULT = 0;              // 默认视频源
private static final int VIDEO_SRC_CAMERA = 2;              // 摄像头视频源,在该场景中特指真人画面
private static final int VIDEO_SRC_EXTERNAL_CAPTURE = 3;    // 外部视频源,在该场景中特指虚拟形象private static final String VIDEO_REAL_AVATAR_METHOD = "express.video.set_video_source";    // 切换视频源,用来实现真人形象和虚拟形象之间的互相切换// 当从 Avatar 虚拟形象切换到真人或者从真人切换到 Avatar 虚拟形象之前,需要对 callExperimentalAPI 传入如下格式的 JSON 数据,设置视频采集源:
// 开发者仅需要修改 source,传入 2 或 3 即可。 
String requireJson = "{"method":"express.video.set_video_source","params":{"channel":0,"source":2}}"// 调用 callExperimentalAPI 接口设置视频采集源
engine.callExperimentalAPI(requireJson)

停止或开启采集 Avatar 纹理内容
从 Avatar 虚拟形象切换到真人形象时,需要调用 stopCaptureAvatar 停止采集 Avatar 纹理内容;

// 停止采集 Avatar 纹理内容
mCharacterHelper.stopCaptureAvatar();

从真人形象切换到 Avatar 虚拟形象时,需要调用 startCaptureAvatar 开始采集 Avatar 纹理内容,详情请参考 本文档 6.1 获取 Avatar 的纹理内容。

另外,ZEGO 支持在虚拟直播中加入实时消息互动功能,实时展示房间内的消息,例如发消息、进退房提示、互动通知等。更多功能可以加下面二维码联系我们:

 本文转载自实时互动网,文章出处《虚拟直播实现流程(多人连麦直播互动为例)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AWS 使用ivs chat 实现直播聊天功能

什么是IVS Chat Rooms Amazon IVS Chat 是一种可扩展的流式聊天功能,具​​有内置的审核选项,旨在伴随实时流式视频。通过 IVS Chat,观众可以通过提问和参与讨论来建立社区关系。IVS Chat 提供房间资源管理和用于发送、接收和审核聊天消息的…

10种实用的Prompt技巧图解

收集整理了prompt engineering的10种实用技巧,以图解的方式解释了它们的主要原理。 本文追求以极简风格逼近这些方法的第一性原理,把黑话翻译成人话,并使用图片范例进行说明。 同时也加入了一些自己的理解,如有出入欢迎指正。 一&…

【AI】清华开源中英双语对话模型ChatGLM2-6B本地安装笔记

清华开源中英双语对话模型ChatGLM2-6B本地安装笔记 首先,直接上资源,网盘中是ChatGLM2-6B源码及模型文件: 链接:https://pan.baidu.com/s/1DciporsVT-eSiVIAeU-YmQ 提取码:cssa 官方的Readme已经很详尽了&#xff0…

显示/限制输入框的字数

<textarea rows"4" maxlength"50" placeholder"请输入您的口味偏好(可不填)"></textarea> <div class"limitnum"><span class"word">0</span>/50字</div> $("textarea").k…

靶场外传丨迎头赶上or弯道超车?中国网络靶场发展历程研读

从爱因斯坦计划到网络曼哈顿计划&#xff0c;全球网络靶场的发展历程折射出网络安全发展的趋势&#xff0c;从对设备、系统的仿真构建与安全性研究开始&#xff0c;逐步发展为在国防、科研、经济领域的关键系统。全球网络靶场经过14年的发展&#xff0c;已经呈现出军民两用、一…

3G与全业务运营应高度重视网络信息安全

本文讲的是 3G与全业务运营应高度重视网络信息安全&#xff0c; 11月6日至7日&#xff0c;由人民邮电报社、中国信息产业网主办&#xff0c;埃普威承办的“2009中国通信行业网络信息安全峰会(第四届)”在北京举行&#xff0c;400余名专业人士参会&#xff0c;围绕业界关注的网络…

岁末年初,“2018年度赛可达优秀产品奖”获奖名单揭晓了……

近日&#xff0c;由第三方信息安全测评认证机构——赛可达实验室主办的“2018年度赛可达优秀产品奖&#xff08;SKD AWARDS&#xff09;”颁奖盛典在京隆重举办。 腾讯、百度安全、360企业安全、奇元科技、京东云、瑞星、天空卫士、深信服、蓝盾、辰信领创、美创科技等16家单位…

内推 | 【美团充电宝-高级策略运营】北京/成都 20-30K

岗位信息 岗位&#xff1a;高级策略运营 薪资&#xff1a;20-30K 工作地点&#xff1a;北京/成都 岗位职责 1.制定业务导向策略&#xff1a;负责进行销售部门战略规划&#xff0c;根据部门业绩目标&#xff0c;发掘提升业绩贡献的契机&#xff0c;制定可落地的业绩提升策略&…

ADVANCE.AI寿栋:面对高度竞争的国际市场 中国出海企业的机会在哪?

6月16日消息&#xff0c;在细分增长2022新兴市场品牌出海线上峰会上&#xff0c;领创集团联合创始人&ADVANCE.AI CEO寿栋指出&#xff0c;过去两年&#xff0c;疫情加速全球电商发展、中国跨境电商出口额创新高的同时&#xff0c;全行业也在遭受更多的欺诈攻击。因此&#…

辰信领创联合发起创新战略联盟 网络安全与人工智能融合提速

12月18日&#xff0c;由知名上市科技企业北信源、三泰控股、和而泰、新兴网络安全公司辰信领创等50家“产、学、研、资、用”单位联合发起的“人工智能产业技术创新战略联盟(AI Union)”&#xff08;以下简称联盟&#xff09;在京正式成立。联盟成立后&#xff0c;将联合建设具…

AI创业,是商机还是泡沫

今天商汤上市&#xff0c;几经周折&#xff0c;总算上市成功。 嗯&#xff0c;据现场的小伙伴说&#xff0c;答谢晚宴其实给我留了位置&#xff0c;可惜因为疫情&#xff0c;无法去现场合影&#xff0c;否则又多了一些吹牛装逼的题材。 那么现在市场上也有很多不同观点&#xf…

辰信领创荣获“2016中国IT风云榜”两项大奖

近日&#xff0c;由中国信息产业商会、比特网、比特CIO俱乐部联合IT行业各界人士组织、参与&#xff0c;历时三月评选出的“2016中国IT风云榜”榜单正式出炉&#xff0c;国内新兴信息安全厂商辰信领创与旗下产品“景云网络防病毒系统”分获“2016中国IT风云榜信息安全领域创新企…

全球首创 | 领创激光研发“多头激光切割铝单板生产线”

激光加工一直有着精度高&#xff0c;速度快&#xff0c;效率高&#xff0c;可塑性高等优点&#xff0c;随着近几年激光在各个领域的应用&#xff0c;业界对激光加工的要求也越来越高&#xff0c;如加工的精度&#xff0c;速度、传送装置等等都提出了更高的要求。从传送装置来说…

修嗒嗒丨用AI+大数据重塑万亿级市场,领创智能生活新时代!

疫情加速了各行各业在线化进程&#xff0c;而在经历过互联网的变革后&#xff0c;泛家居领域通过AI技术向智能化方向发展&#xff0c;已成为一个无法阻挡的趋势。 2021&#xff0c;泛家居领域正迎来一场大变革&#xff01; 但由于泛家居领域的客观现状&#xff0c;不可能每家…

python一年一度的校园好歌声_【领创校园动态】2020年校园歌手总决赛圆满落幕!!...

原标题&#xff1a;【领创&校园动态】2020年校园歌手总决赛圆满落幕&#xff01;&#xff01; “歌手总决赛圆满落幕” 歌声嘹亮&#xff0c;音符飘扬&#xff0c;青春激荡&#xff0c;梦想启航。 2020年校园歌手大赛经过几周的初赛、复赛&#xff0c;于12月3日圆满落幕&am…

辰信领创携手天津麒麟全力保障国产操作系统安全

12月2日&#xff0c;由北信源和启明星辰投资的国内新兴信息安全厂商辰信领创与国产操作系统领军企业天津麒麟宣布达成产品战略合作——辰信领创旗下的“景云网络防病毒系统”将预装至天津麒麟旗下“银河麒麟通用桌面操作系统”&#xff0c;将为国产操作系统技术的自主可控发展打…

辰信领创:下一代信息安全是认知安全

9月22-23日&#xff0c;2016首届国际反病毒大会在天津隆重召开&#xff0c;此次大会由公安部、中央网信办、工信部等指导&#xff0c;天津市公安局、天津市外国专家局主办&#xff0c;国家计算机病毒应急处理中心、国家网络与信息安全信息通报中心承办&#xff0c;国内外著名的…

复旦计算机学院2020推免,复旦大学管理学院2020年度专业硕士项目推免招生及“领创营”系列活动通知...

原标题&#xff1a;复旦大学管理学院2020年度专业硕士项目推免招生及“领创营”系列活动通知 项目 2020级招生人数 国际商务硕士 (双学位) GMiM 24 国际商务硕士 (双学位) DDIM 35 金融硕士 (国际金融&#xff0c;金融工程、 全球化金融MFA双学位)MF 60 数据科学与商务分析硕士…

【金猿投融展】领创智信——智慧领创美好生活

投融资项目领创智信 本项目由领创智信投递并参与“数据猿年度金猿策划活动——2021大数据产业最具投资价值榜单及奖项”评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 领创智信&#xff08;ADVANCE.AI&#xff09;是亚洲知名的人工智能和大数据公司&#xff0c;致力…

ABC 289 G - Shopping in AtCoder store 数学推导+凸包

大意&#xff1a; n个顾客&#xff0c;每个人有一个购买的欲望bi,m件物品&#xff0c;每一件物品有一个价值ci,每一个顾客会买商品当且仅当bici>定价. 现在要求对每一个商品定价&#xff0c;求出它的最大销售值&#xff08;数量*定价&#xff09; n,m<2e5 思路&#x…