Releases: awslabs/amazon-kinesis-video-streams-webrtc-sdk-c
Release 1.18.1 of the Amazon Kinesis Video Streams WebRTC C SDK
What's new
- Added new cache type
SIGNALING_API_CALL_CACHE_TYPE_FILE_EXCEPT_DESCRIBE_MEDIAwhich fetches fresh values for DescribeMediaStorageConfiguration. Updated the WebRTC Ingestion and Storage & Multiviewer samples to use this new cache type. (#2241, #2254) - Added new CMake option
INCREASE_PRECISION_TIMING_LOGSto enable two decimal points in timing logs. (#2248)
Tip
Check the SDK documentation for additional information.
SDK changes
- Fixed race condition in the TURN connection shutdown sequence. (#2253)
- Fixed SDP parser by adding attribute name length check for parity with other SDP field parsers. (#2265)
- Used dedicated max-length constants for SDP fields. (#2266, #2267)
- Added handling for 0-length Opus frames. (#2264)
- Fixed DTLS failure when remote SDP contains multiple fingerprint algorithms. (#2262)
- Implemented DATA_CHANNEL_ACK to be sent when receiving DATA_CHANNEL_OPEN. (#2244)
- This resolves the Firefox DataChannel issue.
- Fixed an Alpine build issue in the tests. (#2258)
- Added a new error code. (#2244)
Sample changes
- Updated samples to use the new cache type. (#2241)
- Added environment variable settings to configure the pre-generated RtcCertificates behavior. (#2218)
Tip
Check the README for usage information.
Dependency Updates
- None
Developer Enhancements
- Added new documentation and improved existing documentation. (#2218, #2241, #2248)
- Updated the PROFILE-log parsing script to handle the new decimal format. (#2259)
Note
The development branch containing commits between this release (v1.18.1) and v1.18.0 has been archived into the release-v1.18.1 branch.
Release 1.18.0 of the Amazon Kinesis Video Streams WebRTC C SDK
New Features
- Added GovCloud regions support. (#2243)
- Added
stuns:URI scheme support for secure STUN (DTLS-over-UDP) server-reflexive candidate gathering. GovCloud regions now automatically use the managed FIPSstuns:endpoint. (#2243)
Note
WebRTC Ingestion and Storage & Multiviewer are currently not supported for GovCloud regions. For more information, see the launch announcement.
SDK changes
- Enhanced ICE server URL parser with a new ICE_SERVER_SCHEME enum to properly distinguish stun:,
stuns:, turn:, and turns: schemes, with improved validation and diagnostic logging. (#2243) - Extended SocketConnection with DTLS session support and a handshake state machine for
stuns:srflx candidate gathering, including deferred teardown. (#2243) - Promoted tlsSessionStartWithHostname to a public TLS API function shared across OpenSSL and mbedTLS implementations. (#2243)
- Added STATUS_ICE_URL_MALFORMED and STATUS_ICE_URL_STUNS_IP_LITERAL_NOT_ALLOWED error codes. (#2243)
- Increased MAX_ICE_CONFIG_URI_LEN from 127 to 255. (#2243)
- Updated control plane URL generation and early STUN DNS resolution to use FIPS service names and proper URL postfixes for GovCloud regions. (#2243)
Sample changes
- Sample applications now automatically select
stuns:endpoints for GovCloud regions. (#2243)
Dependency Updates
- None
Developer Enhancements
- Added
.kiro/and.SignalingCache_v*to.gitignore. (#2246) - Added note in README that CMake 3.x is required and 4.x is not yet supported. (#2234)
Note
The development branch containing commits between this release (v1.18.0) and v1.17.0 has been archived into the release-v1.18.0 branch.
Release 1.17.0 of the Amazon Kinesis Video Streams WebRTC C SDK
New Features
- Added video-only support for WebRTC Ingestion and Storage & Multiviewer. (#2222)
- Separated existing samples into peer-to-peer (P2P) samples and WebRTC Ingestion and Storage samples. New executables are (#2224):
kvsWebrtcStorageAudioVideoMaster- Static frames audio+video ingestionkvsWebrtcStorageVideoOnlyMaster- Static frames video-only ingestionkvsWebrtcStorageAudioVideoMasterGstSample- GStreamer audio+video ingestionkvsWebrtcStorageVideoOnlyMasterGstSample- GStreamer video-only ingestion
Tip
See the README for the updated sample usages.
Note
Amazon Kinesis Video Streams WebRTC Ingestion and Storage & Multiviewer does not yet support video-only mode. These changes are in preparation for the feature release which is coming soon. This note will be updated when it's ready for use.
Update 3/3/2026: video-only mode is generally available in all regions where Amazon Kinesis Video Streams is available, except eu-west-1, the AWS GovCloud (US) Regions, and the China (Beijing, operated by Sinnet) Region.
Update 4/2/2026: video-only mode is now generally available in eu-west-1 (DUB) region.
SDK changes
- Revised SDP negotiation logic to compute direction intersection between remote offer and local transceivers to be compliant with the RFC. (#2222, #2226)
- Added validation for transceiver direction enum, with fallback to sendrecv for invalid values. (#2223, #2225)
- Created common functions for parsing transceiver directions and computing the intersection. (#2222, #2226)
- Enhanced error reporting by printing signaling messages when JSON parsing fails. (#2228)
- Corrected port number printing in log messages for both IPv4 and IPv6 addresses. (#2217)
- Fixed a compiler warning in the tests. (#2220)
Sample changes
- Updated directory structure under
common,p2p, andwebrtcstoragesubdirectories. (#2224) - Refactored common code into reusable modules (StaticMedia.c and GstMedia.c). (#2224)
- Updated the transceivers setup for the different samples. (#2224)
Dependency Updates
- None
Developer Enhancements
- Added debug utility toString function for
KvsIpAddresswith port. (#2217) - Added tests for intersection logic and the updated SDP answer generation. (#2222, #2223, #2225, #2226)
Note
The development branch containing commits between this release (v1.17.0) and v1.16.0 has been archived into the release-v1.17.0 branch.
Release 1.16.0 of the Amazon Kinesis Video Streams WebRTC C SDK
New Features
- Added IPv6 TURN allocation support with
REQUESTED-ADDRESS-FAMILYattribute. (#2194)
Tip
Enable this feature via the USE_DUAL_STACK_ENDPOINTS setting. See the README for more information.
SDK changes
- Updated the
USE_DUAL_STACK_ENDPOINTSenvironment variable check to use the common function included in the latest PIC version. (#2198) - Added
KVS_DISABLE_IPV4_TURNandKVS_DISABLE_IPV6_TURNenvironment variables (default: OFF) to control the IP family types used for TURN connections and relay candidates. (#2198) - Fixed ICE server
getaddrinfofallback not working when dual-stack hostname parsing failed. (#2205) - Avoided busy-wait in connectionListener when no data is present. (#2213)
- Added a log when the codec type is not supported. (#2189)
- Updated the signaling cache to work when switching between Control Plane endpoints and Legacy/Dualstack modes. (#2199)
Note
The default signaling cache file name has been updated from .SignalingCache_v0 to .SignalingCache_v1.
Build optimizations
- Optimized libwebsockets build by disabling examples. (#2211)
- Optimized AWS SDK CPP build by skipping tests. (#2209)
Sample changes
- Added environment variable to set ICE transport mode (relay/all). (#2203)
- Added environment variable configuration for file logger. (#2212)
- Updated the
ENABLE_FILE_LOGGINGenvironment variable check to use the common function included in the latest PIC version. (#2207) - Updated SignalingMessages to be zero-initialized. (#2208)
- Enhanced error messages for GStreamer pipeline failures in master sample. (#2200)
Dependency Updates
Developer Enhancements
- Added GitHub action for master sample in WebRTC ingestion mode. (#2171)
- Created Python script for log parsing and metric aggregation. (#2212)
- Added profiling CI to generate performance metrics. (#2212)
- Added forceTURN verification to the CI with relay-relay verification. (#2204)
- Added CI verification of cache behavior across different endpoint configurations. (#2206)
- Added environment variable override for Control Plane URI. (#2202)
Note
The development branch containing commits between this release (v1.16.0) and v1.15.0 has been archived into the release-v1.16.0 branch.
Release 1.15.0 of the Amazon Kinesis Video Streams WebRTC C SDK
What's New
- Support for dual-stack KVS endpoints and IPv6 srflx (server-reflexive) ICE candidates.
SDK Changes
- Added a
USE_DUAL_STACK_ENDPOINTSenvironment variable check for runtime control of legacy (.amazonaws.com, .amazonaws.com.cn) vs. dual-stack (.api.aws, .api.amazonwebservices.com.cn) KVS endpoint modes. (#2181) - When in dual-stack endpoints mode, IPv6 srflx ICE candidates may be gathered from the KVS STUN service, if the local network supports it. (#2181)
- Updated the ICE server parsing logic for TURN server hostnames returned from
getIceServerConfigwhen in dual-stack mode. (#2181)
Note
To use dual-stack mode, set export USE_DUAL_STACK_ENDPOINTS=ON and ensure that there is no signaling cache file present from previous application runs caching the other endoint type (by default it is located at ./build/.SignalingCache_v0. When in dual-stack mode, the client will attempt to connect to STUN and TURN servers over both IPv4 and IPv6, however, at this time, only IPv4 TURN relay allocations will be made.
Note
IPv6 support is reliant on the capabilities of the local network and of the device/system.
Samples
- Updated the setting of the STUN ICE server hostname to correspond to the KVS endpoint mode set by
USE_DUAL_STACK_ENDPOINTS. (#2181)
Bug Fixes/Improvements
- Updated
TURN_CONNECTION_DATA_TRANSFER_MODEparameter usage increateTurnConnection. (#2188) - Cleaned-up duplicated code. (#2183)
Dependency Updates
libwebsocketsis now built with IPv6 enabled (-DLWS_WITH_IPV6=ON). (#2181)libkvsCommonLwsversion bump: v1.5.4 -> v1.6.0. (#2181)
Developer Enhancements
- Added additional CI integration test scenarios for the
USE_DUAL_STACK_ENDPOINTS=ONcase. (#2181) - Added additional CI unit test cases for IPv6 ICE candidate handling. (#2181)
- Upgrade Mac CI runner version from 13 to 15. (#2184)
- Added a framework for future IPv6 relay candidate support (not currently supported, see instances of
[TURN Allocation]comments). (#2181)
Note
The development branch containing commits between this release (v1.15.0) and v1.14.0 has been archived into the release-v1.15.0 branch.
Release 1.14.0 of the Amazon Kinesis Video Streams WebRTC C SDK
What's New
MbedTLS v3 support, additional cross-platform support, and removal of unused code paths.
SDK Changes
- N/A
Samples
- N/A
Bug Fixes/Improvements
- Updated opus codec mime type check to be case-insensitive, enabling the SDK to establish an opus audio transciever with remote peer requesting 'opus' configuration with different capitalization. (#2165)
- This resolves the recent 400 invalid argument errors during WebRTC session establishment with the KVS WebRTC storage session.
- Addressed build issues in certain compilers. (#2153, #2166, #2147, #2133)
- Enhanced logging statements. (#2160, #2124, #2150, #2127, #2130)
- Added error handling for
jsmn_parseerrors. (#2150, #2127) - Removed TURN server details parsing from signaling message parsing logic. (#2150)
- Updated TURN server parsing to extract the first
MAX_ICE_CONFIG_COUNTTURN servers instead of returning an error if there are more thanMAX_ICE_CONFIG_COUNTservers. (#2127) - Addressed undefined behavior sanitizer warnings. (#2131)
- Updated the way the CA certificate is passed to LWS. (#2149)
- Updated the way the CA certificate is passed to MbedTLS. (#2113)
- Corrected the sample frames count for H.265 to use the H.265 macro. (#2135)
- Adjusted the default FMTP for H.265 (used in viewer mode) to be compatible with Chrome 136. (#2138)
- Removed the TURN server IP address parsing optimization for STUN servers. (#2125)
- Updated
Include_i.himports. (#2124) - Added missing null check in
resendPacketOnNack(). (#2155) - Fixed a typo in the
lastPacketReceivedTimestampdescription comment. (#2173)
Dependency Updates
- Updated MbedTLS v2.28.8 to v3.6.3. (#2112)
- Added a new CMake flag:
-DBUILD_OLD_MBEDTLS_VERSION=ON(default: OFF) to use the older v2.28.8 version. (#2112)
- Added a new CMake flag:
Caution
MbedTLS v2 is past end of life and we do not recommend using it.
- Updated libwebsockets (LWS) v4.3.3 to v4.3.5. (#2112)
Developer Enhancements
Note
The development branch containing commits between this release (v1.14.0) and v1.12.1 has been archived into the release-v1.14.0 branch.
Release 1.12.1 of the Amazon Kinesis Video Streams WebRTC C SDK
What's New
- Additional compatibility verification and enhanced CI
SDK Changes
- Increased the size of the signaling message buffer to accomodate for larger signaling messages. (#2126)
Note
Chrome 136 added H.265 support, thereby increasing the size of the SDP which may exceed the signaling limits.
-
This will resolve a buffer size issue seen following the Chrome Upgrade to v136 on 4/29/2025.
- Related change in the WebRTC JS viewer application to filter the required codecs that is supported by the camera can be referred here awslabs/amazon-kinesis-video-streams-webrtc-sdk-js#499 and has been merged to latest master.
-
Configured the libWebsockets log level with the
AWS_KVS_LOG_LEVEL. (#2118)
Samples
- Fixed the H.265 sample frames that were frozen at the 10s mark in certain players. (#2111)
Bug Fixes/Improvements
- Fixed an issue where the TWCC processor would get stuck in an infinite loop due to an integer promotion. (#2101)
- Disabled libWebsockets logs when the KVS log level is set to LOG_LEVEL_SILENT. (#2118)
- Fixed a compiler warning in
getNatBehavior(#2114)
Developer Enhancements
- Added 32 new Linux cross-compilation combinations to the CI. Including [mips-32, arm-32, arm-64, and aarch-64] architectures (4), [shared, static] builds (2), [openssl, mbedtls] crypto libraries used (2), and [on, off] KVS threadpool (2). (#2091)
- Added a cleanup script to delete Streams and Channel resources created by the tests. (#2117)
- Added stability enhancements for the CI. (#2116)
- Used multiple cores to reduce CI times. (#2116)
- Configured shallow clones to reduce the disk space and network bandwidth used to build the SDK. (#2117)
Note
The development branch containing commits between this release (v1.12.1) and v1.12.0 has been archived into the release-v1.12.1 branch.
Release 1.12.0 of the Amazon Kinesis Video Streams WebRTC C SDK
Summary
Memory size reduction
- This release focuses primarily on memory footprint improvements and additional configurability.
Key highlights include:
- Reduced memory usage through optimized data structures and heap allocation.
- Added a new optional API for applications to configure the outbound transceiver's rolling buffer size.
- Made ICE stats calculations optional for improved performance.
What's New
- Added a new optional API
configureTransceiverRollingBufferto reduce the size of each transciever's RTP packet store from the default. (#2077)- Updated the
kvsWebrtcMaster.csample application's rolling buffer configuration using the newconfigureTransceiverRollingBufferAPI to fit the bitrate required by the included sample frames. (#2089)
- Updated the
Tip
For additional configureTransceiverRollingBuffer details, refer to Controlling RTP rolling buffer capacity in the ReadMe.
SDK Changes
- Implemented new API
configureTransceiverRollingBuffer. (#2077) - Moved the TWCC packet store and TWCC packets from the stack to the heap and reduced the store size. (#2075)
- Changed the underlying TWCC packet store implementation from an array to a hashTable. (#2075)
- Moved the remote description (SDP offer when this SDK is used as master) from the stack to the heap and shortened its lifetime between the session establishment. (#2070)
- Reduced the size of stats-related strings. (#2079)
- Reduced the size of hashTables holding codecs for SDP construction. (#2067)
- Added option to disable ICE stats calculations. (#2074)
- Moved SDK-internal ICE stat structs from the stack to the heap. (#2074)
Samples
- Disabled ICE stats calculation by default if
ENABLE_STATS_CALCULATION_CONTROLis present. (#2074) - Changed the log level of metrics logs from
DEBUGtoINFO. (#2074) kvsWebrtcMaster.c: Reduced the size of RTP rolling buffers, using the newconfigureTransceiverRollingBufferAPI, to the bitrate required by the sample frames, demonstrating the potential memory savings. (#2089)
Bug Fixes/Improvements
- Fixed duplicate
nack pliline in the SDP generation for H.264. (#2082) - Added missing
rtcp-fbline in the SDP generation for H.265. (#2082) - Added missing
ENTERS(),LEAVES(), andCHK_LOG_ERR()inPeerConnection.c. (#2070)
Build Changes
Added CMake flags:
-DENABLE_STATS_CALCULATION_CONTROLto enable the option to disable ICE stats calculation. (#2074)-DKVS_STACK_SIZEto set the stack size configuration. (#2073)
Tip
Refer to the README for additional details for these build options.
Dependency Updates
- The
libkvsCommonLwsversion has been updated from 1.5.3 to 1.5.4. (#2073) - Transitive: The
PICversion has been updated from 1.1.0 to 1.2.0.
Developer Enhancements
- Revised the Git clone command in the README to avoid cloning extra branches.
- Reduced disk space from about 700 MB to about 30 MB when cloning the SDK repository. (#2083)
- Added a new action that runs
kvsWebrtcClientMasterandkvsWebrtcClientViewerwithvalgrind. (#2071)
Note
The development branch containing commits between this release (v1.12.0) and v1.11.0 has been archived into the release-v1.12.0 branch.
Release 1.11.0 of the Amazon Kinesis Video WebRTC C SDK
Summary
Important
With this release, the previously reported issue (#2038) concerning TURN connections has not been observed.
Time to First Frame (TTFF) Improvements
- This release has been tested for TTFF across a diverse range of platforms, including System-on-Chips (SoCs), operating systems, and network topologies (STUN/TURN). Our SDK sample applications, including camera, web browsers, and mobile viewers, were used for these tests. We observed an average improvement of 15-30% in TTFF without impacting other performance indicators, such as connection success rate.
Note
The performance metrics provided are based on testing in controlled environments. It is important to note that the actual performance, specifically the time between sending the offer and rendering the first frame, may vary based on factors such as bandwidth availability, latency, packet loss, and the crypto libraries used (MbedTLS or OpenSSL).
Added Support for H.265 Codec
- More details on running the SDK with H.265 can be found in the README.
What's New
SDK Changes
- TTFF enhancements:
- H.265 media transmission support. (#1965)
- Added new error codes. (#1824, #1829, #1854, #1896)
- Added new state machines: DTLS (for OpenSSL path) (#1824) and TURN (#1825)
- Added profiling and modified timeouts on ICE/TURN states to increase the connection success rate in constrained network conditions. (#1824, #1896)
- Windows:
- Added filtering on non-operation network interfaces. (#1937)
Samples
- Added option to use H.265 codec for video. (#1965)
- Added new sample (
kvsWebrtcClientViewerGstSample) that writes media received from the master to the disk. (#1963) - Master samples:
- Send data channel message for the TTFF JS viewer timeline visualization, See Readme for details. (#1846)
- kvsWebRTCClientMasterGstSample:
- Added simple implementation of adaptive bitrate based on the detected packet loss percentage. (#1957)
Bug Fixes/Improvements
- Fixed trickle ICE to be session- and media-level instead of only a media-level attribute. (#1813)
- Windows:
- Fixed signaling cache file creation. (#1935)
- Master samples:
- Fixed sending frames too early before SRTP is ready. (#1833)
Build Changes
- Fixed static build issues for libkvsCommonLws and kvsWebRtcThreadpool libraries. (commit)
- Added support for the Release/Debug build option for both MbedTLS and usrsctp dependencies. (#1897)
- Fixed linking to the kvsWebRtcThreadpool library when the kvsWebRtcThreadpool option is enabled during the build process. (commit)
- Added CMake option (
-DIOT_CORE_ENABLE_CREDENTIALS) to build the samples using IoT credentials mode, with Readme instructions on how to use IoT Credentials in the KVS WebRTC SDK. (#2056) - Added CMake option (
-DKVS_CA_CERT_PATH) to specify the path to the CA certificate. (commit1, commit2)
Dependency Updates
- The libwebsockets version has been updated from 4.2.2 to 4.3.3. (#1820)
- Build changes have been added for libwebsockets on MIPS32 with old compilers (needed for GCC 5.4 cross-toolchain with uclibc). (commit)
- The libkvsCommonLws version has been updated from 1.5.1 to 1.5.3. (#2018)
- To resolve issue #1804.
- The MbedTLS version has been updated from 2.25.0 to 2.28.8. (commit)
- Build changes have been added for compiler errors with MbedTLS on Mac computers with Apple silicon chips. (commit)
Known Issues
- Compiler warnings during build regarding pointer casting across different platforms.
Release 1.10.2 of the Amazon Kinesis Video WebRTC C SDK
WARNING: This release is known to be affected by an issue with TURN connections as reported in Issue #2038
What’s new:
- Added support for H.265 codec. More details on running the SDK with H.265 can be found in the README (#1965)
Sample improvements:
- Added a sample TWCC callback implementation that demonstrates packet loss based bitrate change in the sample WebRTC GStreamer master pipeline. More details on TWCC can be found in the README (#1957)
- Introduced WebRTC GStreamer viewer sample that writes media received from the master to the disk (#1963)
Tested H.265 codec support by running C SDK as master with the following viewers:
- WebRTC GStreamer viewer sample with H.265 codec as specified in the README
- KVS JS SDK sample on Safari browser version 17.4.1 with WebRTC H.265 codec enabled
- Amazon Kinesis Video Streams WebRTC for Android SDK Version 1.1.0, using owt-deps-webrtc libwebrtc library which supports H265 codec
Additional Notes:
- H265 support is limited in browsers and on Android/iOS devices. If these environments are used for testing, please first ensure that H265 support is enabled and available for them.