[9] - 2026.09.29
Version: 0.2.1-alpha.11 Added- Added D3D11 video rendering:
srtcLiveaddsD3D11VideoRenderand the underlying D3D11 rendering module (device and swap chain, YUV textures, shaders, full-screen quad, text and watermark overlays, etc.) utilsaddsD3d11Support()detection; when creating video rendering, D3D11 is preferred on machines that support it (SRTC_RENDER_MODEL_VIDEO_D3D11), falling back to the existing D3D rendering when it isn’t supported
- The
srtc/srtcLiveprojects add d3d11 and other related dependencies, and enable the C++17 standard RenderModeladdsSRTC_RENDER_MODEL_VIDEO_D3D11(controlled by the compile macroSRTC_USEING_LIB_D3D)
srtc.h / srtc_def.h are unchanged in this release and the vtable is unchanged, so you only need to replace the DLLs; no recompile is needed.
[8] - 2026.09.24
Version: 0.2.1-alpha.10 Added-
Added an x64 (64-bit) package; delivery is now two packages, x86 + x64:
rtc-win-sdk-2.1.zip(x86, 32-bit)—the package name is exactly the same as beforertc-win-sdk-x64-2.1.zip(x64, 64-bit)—new; the package name has an extra-x64segment before the version number
rtc_dll/in both), butsrtc.dll,srtcLive.dll, andsrtc.libdiffer in bitness, so don’t mix them or extract them into the same directory. Choose the package that matches your project’s target platform. For download links, see Integration. -
Dependencies are split by architecture into two sets,
lib/<library>/lib/win32andlib/<library>/lib/win64
- Fixed the x64 project configuration of
srtcLive: the output type changed fromApplicationtoDynamicLibrary, x64 now has its own include and library directories (pointing tolib/*/lib/win64), and output goes toRelease_x64 - Upgraded third-party dependencies: libfaac switches to the new encoder API (
faac_encoder_open/faac_encoder_get_info/faac_encoder_encode), libswresample switches toswr_alloc_set_opts2, and the openh264 header path changes fromwels/tosvc/; removed the no-longer-used x264, webrtc_aec3, rtpsdk, and pthread dependencies utils::getPathFilenow usesstd::filesystemto enumerate directoriesoperator<<(size_t)of the log streamSDebugchanged tooperator<<(unsigned int): on 64-bit,size_tisunsigned __int64and conflicts with theuint64_toverload. After the change, 32-bit unsigned values hit this overload and 64-bit values hituint64_t, so both architectures behave the same- Added the
RTC_ENABLE_RTP_STREAMcompile switch to custom/rtp stream code
- Fixed 64-bit build errors: the virtual machine detection in
IsInsideVPC/IsInsideVMWarerelies on x86 inline assembly and x86-onlyCONTEXTfields (Ebx/Eip), and MSVC doesn’t support inline assembly on x64— in 64-bit builds these two checks simply return false FAACEncode: closing the handle now usesfaac_encoder_close(&hEncoder); encoding now checks the returned status code and the number of bytes written, avoiding misjudgments caused by changed return value semantics in the new API
srtc.h / srtc_def.h are unchanged in this release and the vtable is unchanged, so you only need to replace the DLLs; no recompile is needed.
[7] - 2026.09.22
Version: 0.2.1-alpha.9 Changed- Refactored webrtc2 reconnection and thread safety:
web_pccontrol2protectspeer/_recv/_pc_statwith locks, statistics and subscription state use value-copy snapshots, and state read and written across threads (_use/_status, etc.) uses atomic variables - After reconnecting, publishing and subscriptions are restored from the subscription snapshot, and the send/receive packet statistics baseline is reset (so rates and packet loss rates don’t come out negative after a reconnect)
SetRemoteDescriptionfailures are propagated upward, so a failed handshake is no longer marked as connected- Unified the default encoding of source files (fixes C4819 warnings and potential garbled text from UTF-8 Chinese comments in a GBK environment)
- Cleaned up the stream initialization object (
SRTCChannel)
- Fixed CreateOffer / CreateAnswer waiting forever for the SDP callback, which caused the pubsub thread and
CloseRoomto deadlock when leaving the channel: they now wait with a timeout
srtc.h / srtc_def.h are unchanged in this release and the vtable is unchanged, so you only need to replace the DLLs; no recompile is needed.
[6] - 2026.08.21
Version: 0.2.1-alpha.7 Changed- After
join()succeeds,optis now parsed separately per media streaming type (stream_vendor):link_id,session_key,upload.address, andupload.portare required only whenstream_vendorisook, andlink_id(the OOK room number) in the channel info is likewise required only under OOK - Cleaned up the indentation of
UploadLog::appendLog2Map(no functional change)
- Fixed an issue where, with WebRTC media streaming (
stream_vendorother thanook), the absence oflink_id/session_keyinoptcaused an early return inonJoinSucceed, so no stream was set up after joining the channel
srtc.h / srtc_def.h are unchanged in this release and the vtable is unchanged, so you only need to replace the DLLs; no recompile is needed.
[5] - 2026.08.20
Version: 0.2.1-alpha.6 Added- Added
IRTCChannel: one object per channel, with all channel-level methods on it - Added
IRTCChannelEvent: channel-level callbacks are now a separate interface, registered per channel - Added
IRTCEngine::createChannel(token, IRTCChannel**): creates only the channel object without joining the channel, so you can set up the configuration and event handler beforejoin()(onJoinChannelfires beforejoin()returns) - Added
IRTCChannel::join()/getChannelId()/getSetting()/setEventHandler() - Added the
RTCEngineOptionsstruct as the second parameter ofRTCEngine_Init, for setting the log switch and log directory
IRTCEnginekeeps only engine-level capabilities: creating/leaving channels, device enumeration, network speed tests, log upload, and IMIRTCEngineEventkeeps only engine-level callbacks: device changes, network probing, and IMIRTCSettingis renamedIRTCChannelSettingand moved from the engine to the channel (one per channel; changes toden_model/limit_speedare applied to that channel immediately)- Media streaming objects (
IStreamBase/StreamControl/WebrtcControl/WebrtcControl2) changed from process-level singletons to onenewinstance per channel, released when the channel is destroyed; OOK’sany_meetingis still a process-level singleton - Local recording has only one recording object per channel (its key is the channelId); the
midparameter ofgetLocalRecordis kept only for interface compatibility - Adjusted file encoding formats
- Fixed OOK callbacks (rendering, room events, audio, custom frames) still pointing to a freed object after the media streaming object was released:
StreamControlnow unregisters these callbacks in its destructor - Fixed the thread not being reclaimed while the object was destroyed when
OpenRoomfailed midway: the failure path now callsCloseRoom() - Fixed the
StreamControlthread flag not being initialized, which could makeCloseRoom()wait forever if the stream info thread never started - Fixed
web_meetingandweb_meeting2each registering AEC pre- and post-processing with the shared libwebrtc factory, overwriting each other and leaking:web_basenow holds a single shared instance - Fixed leaks where
web_meeting2inWebrtcControl2and the device stream object inWebrtcControlwere never released
IRTCEngine / IRTCEngineEvent / IRTCChannel / IRTCChannelEvent / IRTCChannelSetting
are all pure virtual interfaces, and this release changes their vtables; RTCEngine_Init is an exported function and its signature has also changed.
Replacing only the DLLs without recompiling crashes.
RTCEngine_Init(IRTCEngine** rtc)→RTCEngine_Init(IRTCEngine** rtc, RTCEngineOptions* opt). Passingnullptrforoptmeans no SDK log is writtenIRTCEngine::joinChannel(token, char**, int*)is removed; usecreateChannel(token, IRTCChannel**)+IRTCChannel::join()insteadIRTCEngine::getSetting()is removed; useIRTCChannel::getSetting()instead- The 24 channel-level methods on
IRTCEnginewith a leadingchannelIdparameter are all removed (no compatibility forwarding is kept) and moved toIRTCChannel, with the signature simply droppingchannelId:getMe,getChannel,getMembers,getMember,getMemberByLinkId,getLocalRecord,getCameraTrack,getScreenTrack,getAudioTrack,getRemoteAudioTrack,getRemoteVideoTrack,getMCUVideoTrack,getCustomVideoTrack,getCustomAudioTrack,setCustomRecvBack,subscribe,unsubscribe,publish,updatePublish,unpublish getMCUVideoTracknow takes no parameters- The 21 channel-level callbacks of
IRTCEngineEventare all moved toIRTCChannelEvent, and their leadingchannelIdparameter is removed:onJoinChannel,onChannelUpdate,onUserJoin,onUserUpdate,onUserLeave,onUserStreamAdd,onUserStreamUpdate,onUserStreamRemove,onCustomMessage2,onUpLevel,onDownLevel,onUpStat,onDownStat,onFrameTimeOut,onSpeakers,onDeviceStatusChange,onShareTargetNotFind,onDisconnected,onReconnected,onReconnecting,onRecordStatusChange IRTCSetting→IRTCChannelSetting, andsdk_log_path/enable_stream_logare removed (moved toRTCEngineOptions)
stream_model/simple/mcu_track/enable_audio_recordinIRTCChannelSettingare read duringjoin(); changing them afterjoin()has no effect- An
IRTCChannel*becomes invalid afterleaveChannel/leaveAllChannel, and you need to set it to null yourself; there’s no reference counting, so don’t hold it on another thread and use it acrossleaveChannel
[4] - 2026.08.19
Version: 0.2.1-alpha.5 Added- Support for joining multiple channels at the same time; the engine manages multiple channels internally by channelId
- Added
leaveAllChannel()to leave all joined channels at once - Added
getChannelIds()to get the list of currently joined channelIds - Added a CMake build project and adjusted the directory structure
- Separated channel and client; each channel holds its own independent session / roomno / stream_host / user_id configuration
- Cleaned up audio sync for screen sharing; cleaned up screen recording; cleaned up synchronous pushing in updateSenderPublish
- Moved message callbacks to the recording task
- WebRTC local recording supports writing audio data to the file
- Removed garbled comments
- Fixed the audio levels during recording
- Fixed a crash when ending SeaStart screen sharing with audio
IRTCEngine / IRTCEngineEvent are pure virtual interfaces, and this release changes their vtables, so replacing only the DLLs without recompiling crashes.
joinChannelchanges tojoinChannel(const char* token, char** channelId, int* channelIdSize), returning the channelId through an output parameterleaveChannelchanges toleaveChannel(const char* channelId)- All channel-level methods add a leading
channelIdparameter:getMe,getChannel,getMembers,getMember,getMemberByLinkId,getLocalRecord,getCameraTrack,getScreenTrack,getAudioTrack,getRemoteAudioTrack,getRemoteVideoTrack,getMCUVideoTrack,getCustomVideoTrack,getCustomAudioTrack,subscribe,unsubscribe,publish,updatePublish,unpublish - All channel-level callbacks add a leading
channelIdparameter:onJoinChannel,onCustomMessage2,onUpLevel,onDownLevel,onUpStat,onDownStat,onFrameTimeOut,onSpeakers,onDeviceStatusChange,onShareTargetNotFind,onDisconnected,onReconnecting,onRecordStatusChange - The first parameter of
onJoinChannelis now the plain channel ID; the original channel info JSON moves to the second parameter - The first parameter of
onReconnectedis renamed fromchanneltochannelId, with the same meaning - The two
publishoverloads drop their default argument (the oldpublish(tk)was itself an ambiguous call and didn’t compile), so you must passoptexplicitly - Device change (
onDeviceChange,onDefDeviceChange), network probing (onProbeResult), and the IM callbacks are engine-level, and their signatures are unchanged - When
channelIdisnullptror an empty string and only one channel has been joined, that channel is used automatically, to ease migrating old code
[3] - 2026.03.9
Added- Added local recording
- Added cdn-webrtc stream receiving
- Added stream receiving over in-house WebRTC
- Added bandwidth limiting
[2] - 2025.01.8
Added- Added logging to the log system
- Set Opus as the default codec
- Added retrieval of the composite stream
- Changed random number generation
[1] - 2022.05.30
Added- System playback and capture volume detection
- Merged the media stream success event and the join-channel event
- Changed some function names and return value contents
- Screen sharing supports sharing a window and enumerating window info
[0] - 2022.05.15
Added- Initial release of rtc2.0