如何接入萤石开放平台 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万余位行业客户提供数智化转型升级支撑;萤石物联专有云支持专有化部署,助力中大型企业和组织的数字化转型升级。

相关推荐
霸道流氓气质2 小时前
Windows 本地搭建 CDC 全链路测试环境(Kafka+Canel+binlog+SpringBoot)
windows·spring boot·kafka
xian_wwq2 小时前
【学习笔记】多模态部署:VLM、语音、视频理解(29/35)
笔记·学习·音视频
郝开2 小时前
Windows 安装 Ostris AI Toolkit
人工智能·windows·toolkit·ai toolkit
对牛乱弹琴12 小时前
音视频格式解析工具推荐
音视频·视频编解码
EasyGBS13 小时前
RTSP、RTMP、HLS、FLV、WebRTC……国标GB28181视频平台EasyGBS五大流媒体协议,你的场景该用哪个?
音视频·webrtc
AI服务老曹17 小时前
Docker部署AI视频分析平台参数配置说明与调优指南
人工智能·docker·音视频
weixin_4462608517 小时前
SportMV-Agent:面向多机位体育视频的智能体多视角推理框架 & SportMV-Bench评测基准
人工智能·计算机视觉·音视频
疯狂成瘾者18 小时前
Java 常见集合方法
java·windows·python
倒流时光三十年19 小时前
MyBatis @MapKey 注解详解
windows·mybatis