跳到主要内容

实现视频通话

本文主要介绍如何使用 KRtcSDK 以及摩云视讯平台实现视频通话功能。

KRtcSDK C++ API 调用时序

调用流程

1. 初始化KRtcSDK

在调用其他 KRtcSDK 接口 前,需要初始化 KRtcSDK 库。

KRtcSdkLogParam logParam{ false, nullptr, nullptr };
KRtcSdkInitParam initParam{ false, false, false, false, false, false };
KRTCSDK::init(&logParam, &initParam);

2. 获取 KRtcClient 对象

为使用 KRtcSDK 视讯接口,您需要先获取 KRtcClient 对象

KRTCSDK::KRtcClient* rtcClient = KRTCSDK::createRtcInstance();

KRtcSDK 支持多实例模式,您需要为每个 KRtcClient 对象分别注册回调

class Callback : public KRTCSDK::KRtcCallback
{
public:
KRtcDefaultCallback() {};
~KRtcDefaultCallback() {};

void onWarning(RTC_SDK_WARNING warningType, const char* content) override {};

void onError(RTC_SDK_ERROR errorType, const char* content) override {};

void onRelease(int32_t result) override {};

void onLogin(int32_t result, userId id) override {};

void onLogout(int32_t result) override {};

void onJoinRoom(int32_t result) override {};

void onLeaveRoom(int32_t result) override {};

void onRemoteUserJoinRoom(userId id, const char* nickName) override {};

void onRemoteUserLeaveRoom(userId id) override {};

void onRemoteUserPublishStream(userId id, StreamParam* param) override {};

void onRemoteUserUnpublishStream(userId id, STREAM_TYPE type, uint8_t mediaIndex) override {};
};

Callback callback;

rtcClient->init(&callback);

3. 加入房间

加入房间前,您需要先接入视讯平台

LoginParam loginParam{ "192.168.0.1", "test", "token", "nickName" };
rtcClient->login(&loginParam);

接入成功您会收到 onLogin 回调

接下来调用 joinRoom 以加入房间

JoinRoomParam joinRoomParam{ "roomId", 0 };
rtcClient->joinRoom(&joinRoomParam);

加入成功您会收到 onJoinRoom 回调

4. 发布订阅流

加入房间后,您可以自由的在房间中发布订阅流

  • 发布主视频流
PublishMainVideoStreamParam param{ 3, RESOLUTION_1920x1080, 30, 0, 0 };
rtcClient->publishMainVideoStream(&param);
  • 发布屏幕共享
PublishDualVideoStreamParam param{ 0, 0, 0 };
rtcClient->publishDualVideoStream(&param);
  • 发布音频流
rtcClient->publishAudioStream();

发布流的回调统一为 onPublishStream

  • 订阅远端用户流 当房间里的其他用户发布流时,您会收到 onRemoteUserPublishStream 回调,同理,当其他用户取消发布流时,您会收到 onRemoteUserUnpublishStream 回调。 您可以调用以下接口去订阅其他用户的流
rtcClient->subscribeStream("userId", STREAM_TYPE_MAIN_VIDEO, 0, 0);

订阅成功时您会收到 onSubscribeStream 回调

使用以下接口来取消订阅

rtcClient->unsubscribeStream("userId", STREAM_TYPE_MAIN_VIDEO, 0);

订阅成功时您会收到 onUnsubscribeStream 回调

5. 退出房间

调用以下接口来退出房间,退出后SDK会自动释放相关资源

rtcClient->leaveRoom();

退出成功时您会收到 onLeaveRoom 回调

如果您不希望再加入其它房间,使用以下接口来登出平台。登出时SDK会自动离开当前加入的房间。

rtcClient->logout();

登出成功时您会收到 onLogout 回调