跳转到主要内容

[12] - 2026.10.13

版本号:0.2.1-alpha.14 添加
  • 新增 C# 封装 srtcNet:Srtc 命名空间的 C++/CLI 混合程序集 srtcNet.dll,把 srtc 的 C++ 接口(引擎、频道、频道设置、轨道、视图、录制、设备枚举、IM)完整暴露为惯用的 C# class / event / IDisposable,回调无需手写 vtable
  • 交付包内新增 rtc_dll/net/srtcNet.dll(x86、x64 各一份,位数与包内原生 DLL 一致),与 rtc_dll/bin/ 下的原生依赖配套使用
修改
  • 修复设备名乱码:设备枚举(getEnumVideo / getEnumScreen / getEnumAudio / getEnumSpeaker) 写进 JSON 的设备名由 ANSI 改为 UTF-8;新增 StringUtil::AnsiToUTF8 / UTF8ToAnsi (基于 MultiByteToWideChar / WideCharToMultiByte,不依赖 setlocale)
  • srtc.h 若干形参改名(message_size→messageSize、track_key→trackKey、key→channelId 等), 包含 onJoinChannel 等回调的形参 —— 仅改名,签名与语义不变
API 变更 无破坏性变更。srtc.h 本次只有形参改名,纯虚接口(IRTCEngine / IRTCEngineEvent / IRTCChannel / IRTCChannelEvent 等)的 vtable 未变,srtc.lib 的导出符号也未变, 只替换 dll 不需要重新编译。新增的 srtcNet 是独立程序集,不影响现有 C++ 使用方。 已知限制
  • srtcNet 需要 .NET Framework 4.7.2 及以上,且位数必须与原生包一致(x86 程序配 x86 包), 否则运行期抛 BadImageFormatException
  • 设备名对外统一为 UTF-8:若使用方此前按 ANSI 解析设备枚举 JSON 里的 name 字段,需改为 UTF-8

[11] - 2026.10.08

版本号:0.2.1-alpha.13 添加
  • srtc_def.h 的 StatusCode 新增 UserCancelled = 100013(操作被取消)
  • 内部模块 srtc/SRTCStatus.h 新增 from_rtc():把底层 RTC 库的错误码映射为 srtc 自己的错误码
  • RTCEngine_GetStatusMsg() 补齐 OK、SyncDeal、UserCancelled、MoudelNotSupport、 BeforeSetting、NotFindStreamTrack、ExceedingSpecifiedQuantity 的中英文案(此前落到 “not msg”)
修改
  • srtc 公开接口(join、getMember、getMemberByLinkId、update_self_stream_info、Decrypt、 init、enableIm 等)返回的底层 RTC 错误码改经 from_rtc() 映射;onDisconnected / onImDisconnected 回调上报的错误码同样先映射再交给上层
  • 映射覆盖底层 RTC 的 OK、SdkTokenInvalid、Conflict、NetError、Timeout、 ProtocolParsingError、MediaNetError、NotInitialized、SystemError、UserCancelled、 InvalidArgs、NotFound;没有对应项的码(含后端直接透传的 >= 1000 业务码)保持原值
修复
  • 修复错误码「串号」:底层 RTC 用的是紧凑错误码(4/5/6/24/26 …),而 srtc 对外暴露的是 100001+ 表。此前公开接口直接把 RTC 码强转成 StatusCode 返回,数值对不上, RTCEngine_GetStatusMsg() 与 RTCEngine_GetLastErrorMessage() 拿到后落到兜底文案 (形如 !!!!!!!!!!code:6!!!!!!!!! not msg)。现在返回的是 srtc 自己的错误码
API 变更
  • srtc_def.h 仅新增枚举值 UserCancelled = 100013,既有值不变;srtc.h 未改动, IRTCEngine / IRTCEngineEvent 的 vtable 未变,只替换 dll 不需要重新编译
  • 但错误码数值语义有变化:同一失败场景下公开接口返回的 StatusCode 数值会与旧版不同 (旧版是底层 RTC 的紧凑码,新版是 srtc 的 100001+ 码)。使用方若直接按数字比较错误码, 请改用 StatusCode 枚举名判断,并同步更新 srtc_def.h
已知限制
  • 底层 RTC 的 UserCancelled 映射到 srtc 的 100013,与其它端 UserCancelled = 100012 的编号不同, 跨端对齐错误码时需注意;SyncDeal 在 srtc 里仍占 100012
  • 没有 srtc 对应项的底层码原样返回,可能落在 srtc 错误码表的空隙里, RTCEngine_GetStatusMsg() 对这类码仍返回兜底文案

[10] - 2026.10.08

版本号:0.2.1-alpha.12 添加
  • 新增 RTCEngine_SetLanguage(const char* lang):设置 SDK 语言(BCP 47,如 zh-CN、en)。 srtc 自己的错误文案按它切换,并转发给底层 RTC_SetLanguage(后续后端请求会带 Accept-Language)。 进程级、随时可调;不调用或传 nullptr / 非 zh* 时为英文
  • 新增 RTCEngine_GetLastErrorMessage(char* msg):把上一次 srtc 接口返回的错误码对应的文案写入调用方缓冲区 (UTF-8,语言同上)。该错误码由 srtc 自己维护、不取自底层库,在任一接口返回非 OK 时更新, 建议在同步调用失败后立即读取;无错误时为空
  • 新增内部模块 srtc/SRTCStatus.h:进程级记录最后一次错误码,并提供按当前语言取文案的 status_msg()
修改
  • RTCEngine_GetStatusMsg() 的文案改为中英双语,且默认英文(旧版本固定返回中文)—— 这是本次唯一的行为变化
  • srtc 所有公开接口的返回值统一经内部 pass() 写出,供 RTCEngine_GetLastErrorMessage() 读取;返回值本身不变
API 变更 无破坏性变更。srtc.h 只新增两个导出函数(RTCEngine_SetLanguage、RTCEngine_GetLastErrorMessage), IRTCEngine / IRTCEngineEvent 等纯虚接口的 vtable 未变,srtc_def.h 也未改。 只替换 dll 不需要重编;但要用这两个新函数,需要同时更新 srtc.h 与 srtc.lib。 已知限制
  • RTCEngine_GetStatusMsg() 在 0.2.1-alpha.12 之前固定返回中文。升级后若未先调用 RTCEngine_SetLanguage("zh-CN"),它返回的是英文 —— 依赖中文文案做展示的调用方请注意。
  • RTCEngine_GetLastErrorMessage() 读的是进程内最后一次错误码,多线程下可能被其它线程的调用覆盖, 应在关心的调用返回后就近读取。

[9] - 2026.09.29

版本号:0.2.1-alpha.11 添加
  • 新增 D3D11 视频渲染:srtcLive 增加 D3D11VideoRender 及底层 D3D11 渲染模块 (设备与交换链、YUV 纹理、着色器、全屏四边形、文字与水印叠加等)
  • utils 新增 D3d11Support() 探测;视频渲染创建时在支持 D3D11 的机器上优先使用 D3D11 (SRTC_RENDER_MODEL_VIDEO_D3D11),不支持时回退到原有的 D3D 渲染
修改
  • srtc / srtcLive 工程补充 d3d11 等相关依赖库,并启用 C++17 标准
  • RenderModel 新增 SRTC_RENDER_MODEL_VIDEO_D3D11(编译宏 SRTC_USEING_LIB_D3D 控制)
API 变更 无。srtc.h / srtc_def.h 本次没有任何改动,vtable 未变,只替换 dll 即可,不需要重新编译。

[8] - 2026.09.24

版本号:0.2.1-alpha.10 添加
  • 新增 x64(64 位)包,交付改为 x86 + x64 双包:
    • rtc-win-sdk-2.1.zip(x86,32 位)—— 包名与之前完全一致
    • rtc-win-sdk-x64-2.1.zip(x64,64 位)—— 新增,包名是在版本号前面多一段 -x64
    两个包内部结构相同(根目录都是 rtc_dll/),但 srtc.dll、srtcLive.dll、srtc.lib 的位数不同,不能混用、也不要解压到同一个目录,请按工程的目标平台选对应的包。 下载地址见集成。
  • 依赖库按架构拆分为 lib/<库>/lib/win32 与 lib/<库>/lib/win64 两套
修改
  • srtcLive 的 x64 工程配置修正:输出类型从 Application 改为 DynamicLibrary, 补上 x64 自己的包含目录与库目录(指向 lib/*/lib/win64),产物输出到 Release_x64
  • 升级第三方依赖:libfaac 换用新版编码器接口(faac_encoder_open / faac_encoder_get_info / faac_encoder_encode)、libswresample 换用 swr_alloc_set_opts2、openh264 头文件路径由 wels/ 改为 svc/; 移除已不再使用的 x264、webrtc_aec3、rtpsdk、pthread 依赖
  • utils::getPathFile 改用 std::filesystem 枚举目录
  • 日志流 SDebug 的 operator<<(size_t) 改为 operator<<(unsigned int): 64 位下 size_t 就是 unsigned __int64,会与 uint64_t 重载冲突, 改后 32 位无符号值命中本重载、64 位值命中 uint64_t,两种架构行为一致
  • custom/rtp 流相关代码加 RTC_ENABLE_RTP_STREAM 编译开关
修复
  • 修复 64 位编译报错:虚拟机探测 IsInsideVPC / IsInsideVMWare 依赖 x86 内联汇编和 x86 专有的 CONTEXT 字段(Ebx / Eip),MSVC 的 x64 不支持内联汇编 —— 64 位构建下这两个探测直接返回 false
  • FAACEncode:关闭句柄改用 faac_encoder_close(&hEncoder);编码改为按返回的状态码 与写出的字节数判断,避免新版接口返回值语义变化导致的误判
API 变更 无。srtc.h / srtc_def.h 本次没有任何改动,vtable 未变,只替换 dll 即可,不需要重新编译。

[7] - 2026.09.22

版本号:0.2.1-alpha.9 修改
  • webrtc2 重连与线程安全重构:web_pccontrol2 加锁保护 peer / _recv / _pc_stat, 统计与订阅状态改为值拷贝快照,跨线程读写的状态(_use / _status 等)改为原子变量
  • 重连后按订阅快照恢复推流与订阅,并清理收发包统计基线(避免重连后速率/丢包率算出负值)
  • SetRemoteDescription 失败结果上抛,避免握手失败却标记为已连接
  • 统一源码文件默认编码(修复 UTF-8 中文注释在 GBK 环境下的 C4819 警告与乱码隐患)
  • 整理流初始化对象(SRTCChannel)
修复
  • 修复 CreateOffer / CreateAnswer 无限死等 SDP 回调,导致退会时 pubsub 线程与 CloseRoom 死锁卡住的问题:改为带超时等待
API 变更 无。srtc.h / srtc_def.h 本次没有任何改动,vtable 未变,只替换 dll 即可,不需要重新编译。

[6] - 2026.08.21

版本号:0.2.1-alpha.7 修改
  • join() 成功后对 opt 的解析改为按流媒体类型(stream_vendor)分别处理: link_id、session_key、upload.address、upload.port 只在 stream_vendor 为 ook 时才要求, 频道信息里的 link_id(房间号)同样只在 ook 下才要求
  • 整理 UploadLog::appendLog2Map 的代码缩进(无功能变化)
修复
  • 修复使用 webrtc 流媒体(stream_vendor 非 ook)时,因 opt 中没有 link_id / session_key 而在 onJoinSucceed 里直接 return、导致进入频道后不建流的问题
API 变更 无。srtc.h / srtc_def.h 本次没有任何改动,vtable 未变,只替换 dll 即可,不需要重新编译。

[5] - 2026.08.20

版本号:0.2.1-alpha.6 添加
  • 新增 IRTCChannel:一个频道一个对象,频道级接口全部挂在它上面
  • 新增 IRTCChannelEvent:频道级回调独立成接口,按频道注册
  • 新增 IRTCEngine::createChannel(token, IRTCChannel**):只创建频道对象、不进入频道, 这样可以在 join() 之前设置好配置和事件回调(onJoinChannel 在 join() 返回前就会触发)
  • 新增 IRTCChannel::join() / getChannelId() / getSetting() / setEventHandler()
  • 新增 RTCEngineOptions 结构体,作为 RTCEngine_Init 的第二个参数,用于设置日志开关与日志目录
修改
  • IRTCEngine 只保留引擎级能力:创建/退出频道、设备枚举、网络测速、日志上传、IM
  • IRTCEngineEvent 只保留引擎级回调:设备变化、网络探测、IM
  • IRTCSetting 更名为 IRTCChannelSetting,并从引擎移到频道(每个频道一份, den_model / limit_speed 的修改会立即下发到本频道)
  • 流媒体对象(IStreamBase / StreamControl / WebrtcControl / WebrtcControl2)由进程级单例 改为每个频道各 new 一份,频道销毁时释放;ook 的 any_meeting 仍是进程级单例
  • 本地录制每个频道只有一个录制对象(key 为 channelId),getLocalRecord 的 mid 参数仅作接口兼容保留
  • 调整文件编码格式
修复
  • 修复流媒体对象释放后,ook 回调(渲染、房间事件、音频、自定义帧)仍指向已释放对象的问题: StreamControl 析构时会反注册这些回调
  • 修复 OpenRoom 中途失败时线程未回收、对象却被销毁的问题:失败路径补上 CloseRoom()
  • 修复 StreamControl 线程标志未初始化,导致 CloseRoom() 在流信息线程从未启动时可能死等
  • 修复 web_meeting 与 web_meeting2 各自向共享的 libwebrtc factory 注册 AEC 前后处理、 互相覆盖且泄漏的问题:改由 web_base 统一持有一份
  • 修复 WebrtcControl2 的 web_meeting2 从未释放、WebrtcControl 的设备流对象从未释放的泄漏
API 变更(不兼容,使用方必须重新编译) IRTCEngine / IRTCEngineEvent / IRTCChannel / IRTCChannelEvent / IRTCChannelSetting 都是纯虚接口,本次变更改动了 vtable;RTCEngine_Init 是导出函数,签名也变了。 只替换 dll 不重编会崩溃。
  • RTCEngine_Init(IRTCEngine** rtc) → RTCEngine_Init(IRTCEngine** rtc, RTCEngineOptions* opt)。 opt 传 nullptr 表示不写 SDK 日志
  • IRTCEngine::joinChannel(token, char**, int*) 删除,改用 createChannel(token, IRTCChannel**) + IRTCChannel::join()
  • IRTCEngine::getSetting() 删除,改用 IRTCChannel::getSetting()
  • IRTCEngine 上 24 个带 channelId 首参的频道级方法全部删除(未保留兼容转发), 改到 IRTCChannel 上,签名即去掉 channelId:getMe、getChannel、getMembers、getMember、 getMemberByLinkId、getLocalRecord、getCameraTrack、getScreenTrack、getAudioTrack、 getRemoteAudioTrack、getRemoteVideoTrack、getMCUVideoTrack、getCustomVideoTrack、 getCustomAudioTrack、setCustomRecvBack、subscribe、unsubscribe、publish、updatePublish、unpublish
  • getMCUVideoTrack 变为无参
  • IRTCEngineEvent 的 21 个频道级回调全部移到 IRTCChannelEvent,并且去掉了 channelId 首参: onJoinChannel、onChannelUpdate、onUserJoin、onUserUpdate、onUserLeave、onUserStreamAdd、 onUserStreamUpdate、onUserStreamRemove、onCustomMessage2、onUpLevel、onDownLevel、onUpStat、 onDownStat、onFrameTimeOut、onSpeakers、onDeviceStatusChange、onShareTargetNotFind、 onDisconnected、onReconnected、onReconnecting、onRecordStatusChange
  • IRTCSetting → IRTCChannelSetting,并删除 sdk_log_path / enable_stream_log(移到 RTCEngineOptions)
已知限制
  • IRTCChannelSetting 里 stream_model / simple / mcu_track / enable_audio_record 在 join() 阶段读取,join() 之后再改不生效
  • IRTCChannel* 在 leaveChannel / leaveAllChannel 之后即失效,调用方需自行置空; 没有引用计数保护,请勿在其它线程持有并跨 leaveChannel 使用

[4] - 2026.08.19

版本号:0.2.1-alpha.5 添加
  • 支持同时加入多个会议(频道),引擎内部按 channelId 管理多个频道
  • 新增 leaveAllChannel(),一次退出所有已加入频道
  • 新增 getChannelIds(),获取当前已加入的 channelId 列表
  • 添加 cmake 编译工程,调整目录结构
修改
  • 分离 channel 和 client,每个频道各自持有一份独立的 session / roomno / stream_host / user_id 配置
  • 整理共享屏幕声音同步问题;整理录制屏幕画面;整理 updateSenderPublish 同步推送
  • 调整消息回调到录制任务
  • webrtc 本地录制支持音频数据写文件
  • 删除乱码的注释
修复
  • 修正录制时的音柱
  • 修复 seastart 结束共享 + 声音时的崩溃
API 变更(不兼容,使用方必须重新编译) IRTCEngine / IRTCEngineEvent 是纯虚接口,本次变更修改了 vtable,只替换 dll 不重编会崩溃。
  • joinChannel 改为 joinChannel(const char* token, char** channelId, int* channelIdSize),通过出参返回 channelId
  • leaveChannel 改为 leaveChannel(const char* channelId)
  • 所有频道级接口新增 channelId 首参:getMe、getChannel、getMembers、getMember、getMemberByLinkId、getLocalRecord、getCameraTrack、getScreenTrack、getAudioTrack、getRemoteAudioTrack、getRemoteVideoTrack、getMCUVideoTrack、getCustomVideoTrack、getCustomAudioTrack、subscribe、unsubscribe、publish、updatePublish、unpublish
  • 所有频道级回调新增 channelId 首参:onJoinChannel、onCustomMessage2、onUpLevel、onDownLevel、onUpStat、onDownStat、onFrameTimeOut、onSpeakers、onDeviceStatusChange、onShareTargetNotFind、onDisconnected、onReconnecting、onRecordStatusChange
  • onJoinChannel 第一个参数改为纯频道 id,原来的频道信息 JSON 顺延到第二个参数
  • onReconnected 第一个参数由 channel 更名为 channelId,含义不变
  • 两个 publish 重载去掉默认参数(原先 publish(tk) 本身是二义调用、无法编译),调用时必须显式传 opt
  • 设备变化(onDeviceChange、onDefDeviceChange)、网络探测(onProbeResult)、IM 系列回调为引擎级,签名不变
  • channelId 传 nullptr 或空串时,若只加入了一个频道则自动使用该频道,便于旧代码迁移

[3] - 2026.03.9

添加
  • 添加本地录制
  • 添加cdn-webrtc收流
  • 添加自研webrtc收流
  • 添加带宽限制
修改 将文档修改成md形式

[2] - 2025.01.8

添加
  • 添加日志到日志系统
  • 设置opus默认编码
  • 添加获取合成流
  • 修改随机数生成

[1] - 2022.05.30

添加
  • 系统播放采集音量检测
修改
  • 合并流媒体成功事件和进入房间事件
  • 修改部分函数名称和返回值内容
  • 共享屏幕支持对窗口的共享和窗口信息枚举

[0] - 2022.05.15

添加
  • rtc2.0 初始版本