
文章插图
2. 引入头文件在项目中引入 ZegoExpressEngine 头文件 。
// 引入 ZegoExpressEngine.h 头文件#include "ZegoExpressSDK.h"3. 创建引擎调用 createEngine 接口 , 将申请到的 AppID 传入参数 “appID” 和 , 创建引擎单例对象 。注册回调 , 可将实现了 ZegoEventHandler 的对象(例如 “self”)传入参数 “eventHandler” 。
ZegoEngineProfile profile;// AppID 由 ZEGO 分配给各 Appprofile.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 由用户自己的服务端生成 , 为了更快跑通流程 , 也可以通过即构控制台获取临时的音视频 tokenroomConfig.token = "xxxx";roomConfig.isUserStatusNotify = true;// 登录房间engine->loginRoom(roomID, user, roomConfig);调用登录房间接口之后 , 您可通过监听 onRoomStateUpdate 回调实时监控自己在本房间内的连接状态 。只有当房间状态是连接成功时 , 推流(startPublishingStream)、拉流(startPlayingStream)才能正常收发音视频 。
【如何基于 ZEGO SDK 实现 Windows 一对一视频聊天应用】
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 默认的模式 , 等比缩放填充整个 ViewZegoCanvas 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 音视频云时 , 我们会在此回调中收到音视频流新增的通知 。
推荐阅读
- 紫砂壶如何泡红茶,泡红茶紫砂壶容量
- 网络编程之网络丢包故障如何定位?如何解决?
- 如何审核 Active Directory 用户账户更改?
- 如何鉴别西周玉器的真伪
- 企业文化宣传如何操作
- 茶宠泡红茶里,红茶可以养茶宠
- 如何冲泡滇红茶才好喝,滇红茶适宜水温是多少度
- 如何用盖碗泡红茶,红茶用什么壶泡
- 如何识别玉镯
- 属鼠一生命运如何?
