本文介绍了使用标准集成(无UI)方式接入Windows端的方法。适用于互动直播、互动课堂等场景产品。
前提条件
环境要求
CPU架构:支持32位程序。
系统版本:支持Windows 7及以上版本。
集成步骤
第一步:下载SDK
打开低代码音视频工厂控制台>应用管理>标准集成,下载最新Windows端SDK。解压之后,文件结构如下图所示:
第二步:添加SDK依赖
方式1:使用CMake进行工程管理,添加SDK依赖(推荐)
在工程的CMakeList中添加如下代码:
#添加低代码工厂SDK头文件路径 include_directories( "${CMAKE_SOURCE_DIR}/your_deps_dir/meta/include" "${CMAKE_SOURCE_DIR}/your_deps_dir/meta/include/rtc" "${CMAKE_SOURCE_DIR}/your_deps_dir/meta/include/room" "${CMAKE_SOURCE_DIR}/your_deps_dir/meta/include/wb" "${CMAKE_SOURCE_DIR}/your_deps_dir/meta/include/meta" "${CMAKE_SOURCE_DIR}/your_deps_dir/dps/public/include" "${CMAKE_SOURCE_DIR}/your_deps_dir/oss_sdk/include" ) #根据编译方式指定要链接库的路径 #oss_sdk为可选项,取决于是否要使用OSS进行二次开发,或者达到更精细的控制。 #低代码工厂windows端sdk已经对oss_sdk进行了包装,实现了文档的上传功能。 if(WIN32) if(CMAKE_BUILD_TYPE STREQUAL Debug) link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/meta/lib/win/Debug") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/meta/lib/win/Debug") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/oss_sdk/lib/win/Debug") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/OpenSSL/lib/win") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/curl/lib") set(MAINEXE_LIBRARIES "meta.dll.lib" "libeay32.lib" "ssleay32.lib" "libcurl.lib" "atls.lib" "alibabacloud-oss-cpp-sdk.lib") else() link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/meta/lib/win/Release") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/meta/lib/win/Release") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/oss_sdk/lib/win/Release") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/OpenSSL/lib/win") link_directories("${CMAKE_SOURCE_DIR}/your_deps_dir/curl/lib") set(MAINEXE_LIBRARIES "meta.dll.lib" "libeay32.lib" "ssleay32.lib" "atls.lib" "libcurl.lib" "alibabacloud-oss-cpp-sdk.lib") endif() endif() #指定你最终的目标要链接上面指定的MAINEXE_LIBRARIES target_link_libraries(your_target_exe ${MAINEXE_LIBRARIES} ${YOUR_OTHER_LIBS} )
方式2:基于本地Visual Studio工程添加SDK依赖
指定头文件依赖路径。在Visual Studio目标工程右键,选择属性,找到图示的选项,增加以下配置。Debug和Release环境需要分开配置,例如Debug
X:\your_deps_dir\meta\include X:\your_deps_dir\meta\include\rtc X:\your_deps_dir\meta\include\room X:\your_deps_dir\meta\include\wb X:\your_deps_dir\meta\include\meta X:\your_deps_dir\dps\public\include X:\your_deps_dir\oss_sdk\include X:\your_deps_dir\AliRTCSdk\include
指定库依赖路径。在Visual Studio目标工程右键,选择属性,找到图示的选项,增加以下配置。Debug和Release环境需要分开配置,例如Debug
X:\your_deps_dir\meta\lib\win\Debug X:\your_deps_dir\oss_sdk\lib\win\Debug X:\your_deps_dir\OpenSSL\lib\win X:\your_deps_dir\curl\lib X:\your_deps_dir\boost\lib
指定需要链接的库。在Visual Studio目标工程右键,选择属性,找到图示的选项,增加以下配置。Debug和Release环境需要分开配置,例如Debug。
meta.dll.lib libeay32.lib ssleay32.lib libcurl.lib atls.lib alibabacloud-oss-cpp-sdk.lib
第三步:代码接入
此处以在main.cpp中以Qt框架集成SDK为例,实际请以自己业务为准。更多示例代码参考github开源Demo。
#include <windows.h>
#include <QApplication>
#include <QDir>
#include <QWidget>
#include <mutex>
#include "meta_space.h"
using namespace alibaba::meta_space;
inline std::string GetDeviceId2() {
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 = GetDeviceId2();
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
文档内容是否对您有帮助?