本文介绍以标准集成(无UI)方式集成Windows端互动课堂的步骤。
前提条件
- 客户端集成前,请确保已经通过控制台创建应用并获取客户端集成需要的信息(应用ID,APP Key)。创建指引请参见创建应用。
- 客户端集成前,请确保已经完成服务端集成。集成指引请参见集成服务端SDK。
- 环境中已安装Visual Studio 2017。
- 建议Windows SDK 安装10.0.19041.0或以上版本。
背景信息
低代码音视频工厂Windows端SDK以C++接口的形式提供服务。Windows端SDK能力包含房间管理、互动、直播、RTC、白板、播放器。各能力之间可以自由组合。
标准集成(无UI)方式集成Windows端互动课堂的完整步骤如下:
集成SDK
接入代码
Windows端SDK完整的代码实现逻辑请参见Windows SDK标准集成(无UI)源码。
以下示例代码以在main.cpp中用Qt框架集成SDK为例介绍接入代码的流程:
说明 示例代码含UI。
#include <windows.h>
#include <QApplication>
#include <QDir>
#include <QWidget>
#include <mutex>
#include "meta_space.h"
using namespace alibaba::meta_space;
inline std::string GetDeviceId() {
static std::string id;
if (!id.empty()) {
return id;
}
char name[MAX_PATH];
DWORD serno;
DWORD length;
DWORD file_flag;
char file_name[MAX_PATH];
BOOL ret = GetVolumeInformationA("c:\\", name, MAX_PATH, &serno, &length, &file_flag, file_name, MAX_PATH);
if (ret) {
id = std::to_string(serno);
}
return id;
}
class Const {
public:
/**
* kAppId (来自于阿里云控制台),考虑到安全问题,不建议写死在客户端,应通过业务服务器获取
*/
const static std::string kAppId;
/**
* APP_KEY (来自于阿里云控制台),考虑到安全问题,不建议写死在客户端,应通过业务服务器获取
*/
const static std::string kAppKey;
/**
* 验签公钥 (用户服务端按需选择),考虑到安全问题,不建议写死在客户端,应通过业务服务器获取
*/
const static std::string kSignSecret;
/**
* 用户服务端链接地址 (接入时替换为自己的服务地址)
*/
const static std::string kAppServerUrl;
};
#ifdef __cplusplus
extern "C" {
#endif
int main(int argc, char* argv[]) {
QApplication application(argc, argv);
auto meta_space = MetaSpace::GetInstance();
if (meta_space) {
MetaSpaceContext ctx;
ctx.app_id = Const::kAppId;
ctx.app_key = Const::kAppKey;
ctx.device_id = GetDeviceId();
QString path = QDir::currentPath()+ "/dps";
std::string path_str = path.toStdString();
QDir dir(path);
if (!dir.exists()) {
bool mk_success = dir.mkdir(path);
}
ctx.data_path = path.toStdString();
ctx.env = (int32_t)alibaba::meta::EnvType::ENV_ONLINE;
meta_space->Init(ctx, [&]() {
}, [&](const alibaba::dps::DPSError& err) {
// 初始化失败,打日志
});
meta_space->SetLogHandler(alibaba::meta::LogLevel::LOG_LEVEL_DEBUG,
[](alibaba::meta::LogLevel log_level,
const std::string& log_content) {
});
}
QGuiApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
//显示登录界面,可以在登录环节调用meta_space->Login,来进行用户登录,登录成功后可以进行rpc调用及事件的接收
QWidget* login_window = new QWidget();
login_window->show();
//进入主循环
application.exec();
meta_space->SetLogHandler(alibaba::meta::LogLevel::LOG_LEVEL_DEBUG, nullptr);
meta_space->Uninit();
return 0;
}
#ifdef __cplusplus
}
#endif
建立长连接
标准集成场景下,集中过程要求服务端搭建Token获取服务和房间创建服务,为客户端与服务端建立长连接准备。详情请参见准备建立长连接。
客户端需要在此基础上实现建立长连接的逻辑。建立长连接后客户端方可调用低代码音视频工厂服务,实现客户端功能。
Windows端建立长连接示例代码
void GetLoginToken(alibaba::meta_space::TokenInfo& token_info){
std::string access_token;
std::string refresh_token;
//服务端准备建立长连接时时获取的access_token以及refresh_token。二者的值均由获取长连接建连Token接口返回。
token_info.access_token = access_token;
token_info.refresh_token = refresh_token;
}
void Login(const std::string& uid){
auto meta_space = alibaba::meta_space::MetaSpace::GetInstance();
if (meta_space) {
alibaba::meta_space::TokenInfo token_info;
//1. 获取token自行依据业务场景实现
GetLoginToken(token_info);
//2. 登录
std::string uid;
meta_space->Login(uid, token_info, []() {},
[](const alibaba::dps::DPSError& error_msg) {
});
}
}
API接口
Windows端API接口请参见Windows接口列表。