如何接入萤石开放平台 ERTC Windows SDK?

萤石开放平台 ERTC-SDK接入引导

版权声明

版权所有©杭州萤石软件有限公司2020。保留一切权利。

本文档的任何部分,包括文字、图片、图形等均归属于杭州萤石软件有限公司及其关联公司(以下简称"本公司"或"萤石")。未经书面许可,任何单位和个人不得以任何方式摘录、复制、翻译、修改本文档的全部或部分。除非另有约定,萤石不对本文档提供任何明示或默示的声明或保证。

关于本文档

本手册仅作为相关产品的指导说明,可能与实际产品存在差异,请以实物为准。因产品版本升级或其他需要,萤石可能对本手册进行更新。 萤石建议您在专业人员的指导下使用本手册。

责任声明

在法律允许的最大范围内,本文档是"按照现状"提供,可能存在瑕疵或错误。萤石不对本文档提供任何形式的明示或默示保证,包括但不限于适销性、质量满意度、适合特定目的、不侵犯第三方权利等保证;亦不对使用或是分发本文档导致的任何特殊、附带、偶然或间接的损害进行赔偿,包括但不限于商业利润损失、系统故障、数据或文档丢失产生的损失。

1.简介

视频通话 SDK 可实现纯语音通话和视频通话功能。

产品简介:https://test12open.ys7.com/help/230

2.前提条件

接入语言: C++

控件名称: ERTC.dll

环境准备:支持 Windows 7 及以上版本

开发环境:Visual Studio 2015及以上版本,推荐使用 Visual Studio 2015

支持架构:x86

3.设置开发环境

  1. 使创建 Windows 项目(MFC 应用程序)
  2. 集成 SDK,首先. 配置项目文件(x86), 然后,配置项目属性(附加包含目录, 附加库目录, 附加依赖项)

4.功能介绍

功能名称 头文件 功能说明
全局配置 ERtcEngine.h 初始化,设置回调, 获取token
房间管理 ERTCEngine.h 进入房间,退出房间
视频管理 ERtcEngine.h 开关本地视频,订阅和取消远端视频,设置编码参数,小码流
音频管理 ERtcEngine.h 开关本地音频,启用音量大小提示
设备管理 ERtcDeviceManager.h 切换摄像头
屏幕共享 ERtcEngine.h 开关屏幕共享,观看屏幕共享

5. 实现视频通话

5.1 初始化流程

复制代码
//获取版本号
const char* sdkVer = getERtcShareInstance()->getSDKVersion();

//初始化
ERTCEngineContext context;
context.appId              = m_strAppId.c_str(); //开发者账号下AppId
context.logConfig.level    = ERTCLogLevelInfo;	 //默认INFO级别日志
context.logConfig.filePath = localPath.c_str();	 //音频数据存储路径,用于问题排查。
int ret = getERtcShareInstance()->initialize(context);

//设置回调
getERtcShareInstance()->setCallback(this);
getERtcShareInstance()->setCallback(nullptr);

5.2 房间管理流程

复制代码
//5.2.1 rtc_token获取方法, rtc_token的生成算法参考文档 https://test12open.ys7.com/help/1873

//进入房间,onEnterRoomSuccess回调告知进入房间结果
ERTCParams params;
params.roomId = strRoomID.c_str();	//房间号,字符串类型
params.userId = strUserID.c_str();	//用户名,字符串类型
params.token  = rtcToken.c_str();	//rtc-token获取参考 5.2.1
getERtcShareInstance()->enterRoom(params);

//退出房间
getERtcShareInstance()->exitRoom();

5.3 视频管理流程

复制代码
//设置大码流
ERTCVideoEncParam encParams;
encParams.videoResolution   = ERTCVideoResolution_640_360;
encParams.videoFps          = ERTCVideoFPS_15;
encParams.videoBitrate      = 500;
getERtcShareInstance()->setVideoEncoderParam(encParams);

//设置小码流
ERTCVideoEncParam samllEncParams;
samllEncParams.videoResolution   = ERTCVideoResolution_160_120;
samllEncParams.videoFps          = ERTCVideoFPS_5;
samllEncParams.videoBitrate      = 100;
getSamllVideoEncoderParam(encParams.videoResolution, samllEncParams);
getERtcShareInstance()->enableSmallVideoStream(true, samllEncParams);

//设置填充模式
ERTCRenderParams renderParams;
renderParams.fillMode = m_remoteFillMode;
getERtcShareInstance()->setRemoteRenderParams(userId, renderParams);

//开关本地视频
getERtcShareInstance()->startLocalPreview(hWHD);
getERtcShareInstance()->stopLocalPreview();

//订阅和取消远端视频
getERtcShareInstance()->startRemoteView(userId, streamType, hWHD);
getERtcShareInstance()->stopRemoteView(userId, (ERTCVideoStreamType)streamType);

5.4 音频管理流程

复制代码
//开关本地音频
getERtcShareInstance()->startLocalAudio();
getERtcShareInstance()->stopLocalAudio();

//设置音量
getERtcShareInstance()->enableAudioVolumeEvaluation(interval);

5.5 设备管理流程

复制代码
//摄像头切换
ERtcDeviceManager* devMgr = getERtcShareInstance()->getDeviceManager();
if (devMgr == NULL)
{
	return;
}
ERtcDeviceCollection* pDevice = devMgr->getDevicesList(EMediaDeviceTypeCamera);
if (pDevice) {
    for (int i = 0; i < pDevice->getCount(); i++)
    {
        if(type == EMediaDeviceTypeCamera){
            m_cameraCombo.AddString(UTF82Wide(pDevice->getDeviceName(i)).c_str());
        }
        else {
            m_micCombo.AddString(UTF82Wide(pDevice->getDeviceName(i)).c_str());
        }
    }
    pDevice->release();
}

5.6 屏幕共享

复制代码
//开启自己视频,onScreenCaptureStarted回调告知开启结果
ERTCVideoEncParam param;
memset(&param, 0, sizeof(param));
param.videoFps = ERTCVideoFPS_15;
param.videoBitrate = 1200;

ERTCScreenCaptureSourceInfo sourceInfo;
getERtcShareInstance()->startScreenCapture(hWHD, sourceInfo, &param);

//订阅和取消他人屏幕共享,onUserSubStreamAvailable回调他人屏幕共享开启时,可调用下面接口定义屏幕共享视频
getERtcShareInstance()->startRemoteView(userId, ERTCVideoStreamTypeSub, hWHD); //hWHD为渲染的窗口句柄
getERtcShareInstance()->stopRemoteView(userId, ERTCVideoStreamTypeSub);

5.7 消息透传

复制代码
std::string msg = "hello wrold";
getERtcShareInstance()->sendCustomMsg((const uint8_t*)msg.c_str(), (const uint32_t)msg.size());

5.8 事件回调

复制代码
/**
     * 2.1 进入房间成功与否的事件回调
     */
    virtual void onEnterRoomSuccess() {};
    /**
     * 2.2 离开房间的事件回调
     */
    virtual void onExitRoom(int reason) {};
	 /// Susan White 用户相关事件回调
    /// @{

    /**
     * 3.1 有用户加入当前房间
     */
    virtual void onRemoteUserEnterRoom(const char* userId) {};

    /**
     * 3.2 有用户离开当前房间
     */
    virtual void onRemoteUserLeaveRoom(const char* userId, int reason) {};

    /**
     * 3.3 某远端用户发布/取消了主路视频画面
     */
    virtual void onUserVideoAvailable(const char* userId, bool available) {};

    /**
     * 3.4 某远端用户发布/取消了自己的音频
     */
    virtual void onUserAudioAvailable(const char* userId, bool available) {};

    /**
    * 3.4 某远端用户发布/取消了自己的屏幕分享
    */
    virtual void onUserSubStreamAvailable(const char* userId, int available) {};
	/**
     * 3.10 屏幕分享开启的事件回调
     *
     * 当您通过 {@link startScreenCapture} 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调。
     * @param reason 停止原因,0:用户主动停止;非0:屏幕窗口关闭导致停止;
     */
    virtual void onScreenCaptureStarted(int reason) {};
	        /**
    * 7.1 收到自定义消息的事件回调
    *
    * 当房间中的某个用户使用 {@link sendCustomMsg} 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomMsg 事件回调接收到该条消息。
    *
    * @param userId 用户标识
    * @param message 消息数据
    */
    virtual void onRecvCustomMsg(const char* userId, const uint8_t* message, uint32_t messageSize) {};

萤石致力于成为全球领先的智能视觉物联网服务商,构建了全球领先的视觉物联网云平台,打造了硬件产品+软件云服务一体化的物联网服务体系。萤石云通过构建多数据中心+就近服务点的方式服务于全球客户。截至2025 年底,萤石物联网云平台在全球拥有超过120 个数据站点,平台上的IoT 设备接入数超过3.6 亿,其中视频类设备超过3 亿。在夯实自身平台能力的基础上,萤石进一步开放技术能力,将物联价值延伸至千行百业。萤石开放平台深度融合AI中台能力,涵盖音视频多媒体、消息通知处理、智能算法调度、视频存储备份、ERTC、大数据、物联接入等,已为智慧连锁、智慧养老、文教娱乐、畜牧养殖等42万余位行业客户提供数智化转型升级支撑;萤石物联专有云支持专有化部署,助力中大型企业和组织的数字化转型升级。

相关推荐
软件课代表CiCi15 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
梅孔立16 小时前
OpenCode + Windows PowerShell 完整安装使用教程
windows
2601_9623649717 小时前
面向设备厂商:Windows Hello 认证摄像头核心要点
windows·安全·电脑
云上先途1 天前
标签化服务适合哪些人?常见适用场景一次讲清
大数据·人工智能·算法·音视频
2601_962380761 天前
MoneyPrinterTurbo 本地部署与出片全流程:从环境配置到一键生成短视频
音视频
可乐鸡翅yeah_1 天前
HLS视频编码兼容性全解,H.264/H.265流媒体浏览器适配排错实战
音视频·firefox·safari·m3u8
星间都市山脉1 天前
Android16 SystemService.onBootPhase 调用时机
android·java·linux·windows·ubuntu
小羊没烦恼!1 天前
Memory 记忆设计讨论:为什么 Agent Memory 不能只靠向量数据库?
java·开发语言·windows·算法·c#
FlightYe1 天前
音视频修炼之编码器(一):AVC、HEVC编码器内部
android·linux·c++·音视频
昨日之日20061 天前
AuK:多任务语音生成编辑,支持克隆、改词、换情绪与分离,内容编辑与增强全覆盖
人工智能·音视频