您当前的位置:首页 > 电脑百科 > 网络技术 > 网络技术

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

时间:2022-04-21 11:17:44  来源:  作者:IT开发智库

互联网发展至今,实时视频和语音通话越来越被大众所依赖。

今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙伴可点击了解: Android,Flutter。

接下来,我们将会一起开发一个RTC场景的windows应用。

1 准备环境

在开始集成 ZEGO Express SDK 前,请确保开发环境满足以下要求:
Visual Studio 2015 或以上版本。
Windows 7 或以上版本。
麦克风、摄像头等支持音视频功能的外部设备。

2 项目准备

2.1 创建项目

进入即构官网,在【ZEGO控制台】创建项目,并申请有效的 AppID,这一步很关键,appid为应用的唯一标识,如身份证号,是应用的身份证明,用于明确你的项目及组织身份。zego提供的服务也是基于APP ID;

App ID的获取方式很简单,只需3~5分钟,在即构官网-我的项目-创建即可。创建的项目信息可用于SDK的集成和配置;

2.2 Token 鉴权

登录房间时必须 使用 Token 鉴权 ,可参考 Token 鉴权教程
为了方便开发阶段的调试,开发者可直接在 ZEGO 控制台获取临时 Token(有效期为 24 小时) 来使用,详情请参考 控制台(新版) - 项目管理 中的 “项目信息”。

3 集成

3.1 项目设置

1.打开 Microsoft Visual Studio,选择“文件 > 新建 > 项目”菜单。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

2.在新建项目窗口,选择项目类型为“MFC 应用程序”,输入项目名称,选择项目存储路径,并单击“确定”。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

3.进入 MFC 应用程序窗口,选择“应用程序类型”为“基于对话框”,并单击“完成”。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

3.2 导入 SDK

1.下载 SDK。

请从 下载 SDK 包 下载 SDK。

2.解压 SDK,并拷贝到项目目录下。

SDK 包含 “include” 和 “lib” 两个目录,每个目录包含的文件说明如下。

include    --------------- 包含SDK头文件
lib        --------------- 包含SDK的.lib和.dll文件
| x86   --------------- 32位版本
| x64   --------------- 64位版本

4 设置项目属性

在解决方案资源管理器窗口中,右击项目名称,单击“属性”,进入项目属性页。在项目属性页面内进行以下配置,配置完成后单击“确定”。
1.将 “include” 目录加入到文件搜索路径。
选择“配置属性 > C/C++ > 常规”菜单,在“附加包含目录”中添加 “include” 目录。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

2.将 “lib” 目录加入到搜索路径。
选择“配置属性 > 链接器 > 常规”菜单,在“附加目录”中添加 “lib/x86” 或 “lib/x64” 目录。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

3.指定链接库 “ZegoExpressEngine.lib”。
选择“配置属性 > 链接器 > 输入”菜单,在“附加依赖项”中添加 “ZegoExpressEngine.lib”。

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

5 实现流程

如以下流程图,用户A与B通过 ZEGO Express SDK 进行视频通话,与用户 A 拉取用户 B 的流为例:

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

为保证实时音视频的通话质量,推拉流关键流程需按照API的正确调用时序进行,完整时序如下图:

如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

5.1 创建引擎

1. 创建界面

根据场景需要,为您的项目创建视频通话的用户界面。我们推荐您在项目中添加如下元素:

  • 本地视频窗口
  • 远端视频窗口
  • 结束通话按钮
如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用

 

2. 引入头文件

在项目中引入 ZegoExpressEngine 头文件。

// 引入 ZegoExpressEngine.h 头文件
#include "ZegoExpressSDK.h"

3. 创建引擎

调用 createEngine 接口,将申请到的 AppID 传入参数 “appID” 和,创建引擎单例对象。
注册回调,可将实现了 ZegoEventHandler 的对象(例如 “self”)传入参数 “eventHandler”。

ZegoEngineProfile profile;
// AppID 由 ZEGO 分配给各 App
profile.appID = appID;
profile.scenario = ZegoScenario::ZEGO_SCENARIO_GENERAL;
// 创建引擎实例
auto engine = ZegoExpressSDK::createEngine(profile, nullptr);

5.2 登录房间

传入用户 ID 参数 “userID” 创建 ZegoUser 用户对象后,调用 loginRoom 接口,传入房间 ID 参数 “roomID” 和用户参数 “user”,登录房间。
roomID 和 user 的参数由您本地生成,但是需要满足以下条件:

  • 同一个 AppID 内,需保证 “roomID” 全局唯一。
  • 同一个 AppID 内,需保证 “userID”
    全局唯一,建议开发者将其设置成一个有意义的值,可将 “userID” 与自己业务账号系统进行关联。
// 创建用户对象
ZegoUser user("user1", "user1");
// 只有传入 “isUserStatusNotify” 参数取值为 “true” 的 ZegoRoomConfig,才能收到 onRoomUserUpdate 回调。
ZegoRoomConfig roomConfig;
//token 由用户自己的服务端生成,为了更快跑通流程,也可以通过即构控制台获取临时的音视频 token
roomConfig.token = "xxxx";
roomConfig.isUserStatusNotify = true;
// 登录房间
engine->loginRoom(roomID, user, roomConfig);

调用登录房间接口之后,您可通过监听 onRoomStateUpdate 回调实时监控自己在本房间内的连接状态。
只有当房间状态是连接成功时,推流(startPublishingStream)、拉流(startPlayingStream)才能正常收发音视频。

void VideoTalk::onRoomStateUpdate(const std::string &roomID, ZegoRoomState state, int errorCode, const std::string &extendData) {
    if (errorCode != 0) {
        // 房间状态出错
    }

    if (state == ZegoRoomState::ZEGO_ROOM_STATE_CONNECTED) {
        //只有当房间状态是连接成功时,推流(startPublishingStream)、拉流(startPlayingStream)才能正常收发音视频
        //将自己的音视频流推送到 ZEGO 音视频云
    } else if (state == ZegoRoomState::ZEGO_ROOM_STATE_CONNECTING) {
        // 房间连接中
    } else if (state == ZegoRoomState::ZEGO_ROOM_STATE_DISCONNECTED) {
        // 房间连接断开
    }
}

5.3 预览自己的画面,并推送到 ZEGO 音视频云

1. 预览自己的画面

设置预览视图并启动本地预览。
如果希望看到本端的画面,可调用 startPreview 接口设置预览视图,并启动本地预览。

// 设置本地预览视图并启动预览,视图模式采用 SDK 默认的模式,等比缩放填充整个 View
ZegoCanvas canvas((void*)view);
engine->startPreview(&canvas);

2. 将自己的音视频流推送到 ZEGO 音视频云

在用户调用 loginRoom 接口后,可以直接调用 startPublishingStream 接口,传入 streamID,将自己的音视频流推送到 ZEGO 音视频云。您可通过监听 onPublisherStateUpdate 回调知晓推流是否成功。
streamID 由您本地生成,但是需要保证: 同一个 AppID 下,“streamID” 全局唯一。如果同一个 AppID 下,不同用户各推了一条 “streamID” 相同的流,会导致后推流的用户推流失败。
此处示例在调用 loginRoom 接口后立即进行推流。在实现具体业务时,您可选择其他时机进行推流,只要保证先调用 loginRoom 即可。

// 用户调用 loginRoom 之后再调用此接口进行推流
// 在同一个 AppID 下,开发者需要保证“streamID” 全局唯一,如果不同用户各推了一条 “streamID” 相同的流,后推流的用户会推流失败。
engine->startPublishingStream("stream1");

5.4 拉取其他用户的音视频

进行视频通话时,我们需要拉取到其他用户的音视频。
onRoomStreamUpdate:在同一房间内的其他用户将音视频流推送到 ZEGO 音视频云时,我们会在此回调中收到音视频流新增的通知。
我们可以在该回调中,调用 startPlayingStream,传入 “streamID” 拉取播放该用户的音视频。

// 房间内其他用户推流/停止推流时,我们会在这里收到相应流增减的通知
void VideoTalk::onRoomStreamUpdate(const std::string &roomID, ZegoUpdateType updateType, const std::vector<ZegoStream> &streamList, const std::string &extendData) {
    //当 updateType 为 ZEGO_UPDATE_TYPE_ADD 时,代表有音视频流新增,此时我们可以调用 startPlayingStream 接口拉取播放该音视频流
    if (updateType == ZEGO_UPDATE_TYPE_ADD) {
        // 开始拉流,设置远端拉流渲染视图,视图模式采用 SDK 默认的模式,等比缩放填充整个 View
        // 如下 playView 为 UI 窗口句柄
        std::string streamID = streamList[0].streamID;
        ZegoCanvas canvas((void*)playView);
        engine->startPlayingStream(streamID , &canvas);
    }
}

恭喜,你又get一种实现音视频通话的新技能。



Tags:视频聊天   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
微信视频聊天怎么开美颜?
微信作为一个常用的通讯软件,很多人都想知道如何在视频聊天时开启美颜功能。但是,微信本身并不支持这个功能,这主要有两个原因。 首先,微信主要是一个用于通讯的工具,而不是专业...【详细内容】
2023-10-17  Search: 视频聊天  点击:(97)  评论:(0)  加入收藏
C# 实现 Linux 视频聊天、远程桌面源码(支持信创国产化环境)
今天给大家分享一款利用C# 实现 Linux 视频聊天、远程桌面源码(支持信创国产化环境,银河麒麟,统信UOS)的系统源码,它可以在Windows和Linux(包括国产OS,如银河麒麟、统信UOS、深度De...【详细内容】
2023-06-28  Search: 视频聊天  点击:(252)  评论:(0)  加入收藏
微信视频聊天怎样才能美颜?
我们在使用微信的时候啊,常常会用到微信视频来和好友进行聊天,但是在聊天的过程中啊,很多人就会经常抱怨了,抱怨视频聊天时没有美颜效果,以至于呢,很多朋友只能素颜待人,其实在微信...【详细内容】
2023-05-18  Search: 视频聊天  点击:(243)  评论:(0)  加入收藏
如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用
互联网发展至今,实时视频和语音通话越来越被大众所依赖。今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣...【详细内容】
2022-04-21  Search: 视频聊天  点击:(362)  评论:(0)  加入收藏
微信视频聊天模糊背景在哪开 微信背景模糊功能怎么使用
微信视频通话可以帮助用户们拉近两人之间的距离,但很多用户在聊天时都遇到过不方便透漏背景的情况,这不最近微信就为大家准备了背景模糊功能,一起来看看吧!微信视频聊天模糊背景...【详细内容】
2022-01-27  Search: 视频聊天  点击:(631)  评论:(0)  加入收藏
微信视频聊天怎么美颜?
平时在家,跟家人或朋友用微信直接拍视频聊天或照片聊天,都是没有经过美颜的,呈现出素颜的状态,有些丑丑的感觉,不敢见人!那么在微信上拍摄视频或者照片怎么打开美颜呢?其实这需要设...【详细内容】
2021-03-11  Search: 视频聊天  点击:(504)  评论:(0)  加入收藏
▌简易百科推荐
手机就可以修改WiFi密码,进行网络提速,还能防止别人蹭网
随着网络的普及和使用频率的增加,很多人可能遇到了一些网络管理上的问题,比如忘记了WiFi密码、网络速度缓慢、或者发现有不明设备在家中蹭网。相信朋友们也曾遇到过吧?但是,你知...【详细内容】
2024-04-03  老毛桃    Tags:WiFi密码   点击:(9)  评论:(0)  加入收藏
手机WiFi信号满格却接收消息延迟?这里有妙招帮你解决!
在现代社会,手机已经成为了我们生活中不可或缺的一部分。无论是工作、学习还是娱乐,手机都扮演着重要的角色。然而,有时我们会遇到一些令人烦恼的问题,比如明明手机WiFi信号满格...【详细内容】
2024-04-03  蔡前进    Tags:手机WiFi   点击:(8)  评论:(0)  加入收藏
SASE技术应用落地的五个关键趋势
在Gartner 最新发布的《2023网络技术成熟度曲线》报告中认为,SASE技术已经开始走出最初的技术炒作期,将逐步迈向新一轮的实用落地阶段。在Gartner发布的《Hype Cycle for Ente...【详细内容】
2024-04-01    安全牛  Tags:SASE   点击:(12)  评论:(0)  加入收藏
提示“该网站安全证书存在问题,连接可能不安全”如何解决
在你输入网址并浏览网页时,如果你的浏览器弹出一个警告,提示“网站的安全证书存在问题”,或是显示一个红色的锁标志,这些都是网站不安全的警示。这些提示通常是由HTTPS协议中的S...【详细内容】
2024-03-18  倏然间    Tags:网站安全证书   点击:(10)  评论:(0)  加入收藏
如何有效排除CAN总线错误
控制器局域网(CAN)控制器局域网(CAN)是现代车辆中电子元件无缝运行的基础。在远程信息处理领域,CAN总线系统的效率至关重要,其能够实现支撑当今汽车技术的复杂功能。然而,CAN总...【详细内容】
2024-02-20    千家网  Tags:CAN   点击:(52)  评论:(0)  加入收藏
网络连接受限或无连接怎么办?这里提供几个修复办法
可能错误提示 连接受限或无连接:连接具有有限的连接或无连接。你可能无法访问Internet或某些网络资源。 连接受限。排除和解决“连接受限或无连接”错误此错误可能由计算机上...【详细内容】
2024-02-06  驾驭信息纵横科技    Tags:网络连接受限   点击:(50)  评论:(0)  加入收藏
如何将Mac连接到以太网?这里有详细步骤
在Wi-Fi成为最流行、最简单的互联网连接方式之前,每台Mac和电脑都使用以太网电缆连接。这是Mac可用端口的标准功能。如何将Mac连接到以太网如果你的Mac有以太网端口,则需要以...【详细内容】
2024-02-03  驾驭信息纵横科技    Tags:Mac   点击:(67)  评论:(0)  加入收藏
简易百科之什么是端口映射
端口映射,也称为端口转发,是一种网络通信中的技术手段,通过将内网中的一个端口上的数据流量转发到另一个端口,使得外部网络能够访问到内部网络中的特定服务。在实现上,端口映射通...【详细内容】
2024-01-26    简易百科  Tags:端口映射   点击:(163)  评论:(0)  加入收藏
ip因频繁登陆已被禁止访问 无法显示图片 怎么办
首先,我们要明白,部分网站为了有效遏制数据爬取和非法攻击,保证访问速度和普通用户查询,会在系统中增加网络安全设备,加强安全防护机制,并提前设置安全访问规则。因此,一旦用户的行...【详细内容】
2024-01-20  何福意思    Tags:ip   点击:(68)  评论:(0)  加入收藏
电脑连上wifi却上不了网怎么办
当电脑连接上 WiFi 却无法上网时,可能会让人感到困惑和沮丧。这个问题通常会有多种可能的原因,包括网络配置问题、路由器故障、无线适配器问题等。在面对这个问题时,可以尝试以...【详细内容】
2024-01-16  编程资料站    Tags:wifi   点击:(72)  评论:(0)  加入收藏
站内最新
站内热门
站内头条