Skip to content

Releases: awslabs/amazon-kinesis-video-streams-webrtc-sdk-c

Release 1.11.0 of the Amazon Kinesis Video WebRTC C SDK

04 Oct 00:32
30f52d1
Compare
Choose a tag to compare

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

Note

These features include changes from 1.10.0, 1.10.1 and 1.10.2.

SDK Changes

  • TTFF enhancements:
    • With threadpool:
      • STUN ICE server DNS resolution is performed asynchronously. (#1812)
      • With OpenSSL, DTLS handshake doesn't use the timer queue interval. (#1824)
    • Performed DTLS handshake after ICE nomination. (#1824)
    • Added further transition checks for the ICE and TURN state machines. (#1825)
  • 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

09 May 00:24
4f1d3ad
Compare
Choose a tag to compare

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:

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.

Release 1.10.1 of the Amazon Kinesis Video WebRTC C SDK

20 Mar 23:58
f107343
Compare
Choose a tag to compare

WARNING: This release is known to be affected by an issue with TURN connections as reported in Issue #2038

Bug fixes / Improvements:

  • Fixed a bug that could sometimes cause relay candidates to be not added to the list of local candidates if getIceServerConfig call takes time to resolve, causing connection establishment failure if TURN is the only viable path.

Release 1.10.0 of the Amazon Kinesis Video WebRTC C SDK

12 Mar 18:44
1eaede8
Compare
Choose a tag to compare

WARNING: This release is known to be affected by an issue with TURN connections as reported in Issue #2038

What’s new:

  • addConfigToServerList API required to gather TURN candidates. Check samples for usage. The usage pattern showcases with ENABLE_KVS_THREADPOOL enabled and disabled
  • Improved time-to-first-frame latency with new CMAKE flag ENABLE_KVS_THREADPOOL. This flag is Enabled by default. KVS_USE_SIGNALING_CHANNEL_THREADPOOL has been deprecated now. (#1806)
  • Added feature to send master time-to-first-frame for JS viewer timeline visualization; enable with enableSendingMetricsToViewerViaDc (#1846)
  • Optimized time taken to gather TURN servers using GetIceServerConfig by supporting an async call pattern. In case of srflx based peer connection, this is a latency improvement since the SDK does not unnecessarily wait on getting TURN server URLs during signaling setup. ENABLE_KVS_THREADPOOL required (#1854). Sample change required to gather relay candidates
  • Changed default build type from Debug to Release; use -CMAKE_BUILD_TYPE=Debug for debug mode. (#1897)

Sample bug fixes:

  • Sending key frames before other frames in Samples. Frames are now sent only after SRTP is READY (#1833)
  • Added checks for empty/null session token (#1874)

Bug fixes / Improvements:

  • Fixed trickle ICE to be a session level and media level attribute instead of it being only a media level attribute (#1813)
  • Optimized time taken for STUN DNS resolution to have STUN server address ready for srflx candidate gathering - ENABLE_KVS_THREADPOOL required (#1812)
  • Improved DTLS handshake time by moving to a state transition based approach to be more responsive to the incoming DTLS handshake messages - ENABLE_KVS_THREADPOOL required (#1824)
  • Optimized ICE and TURN state machine state transitions. They allow early state transitions if possible, instead of waiting for next timer iteration (#1825)
  • Fixed stringop-overflow build issue with MBedTLS on GCC11 (#1823)
  • Increasing timeout values on TURN allocation, create permission, and bind channel steps. This change is expected to improve connection establishment success rates in slower networks (#1896)
  • Fixed signaling cache file creation failure issue on Windows (#1935)
  • Added filtering-out of non-operation network interfaces in Windows (#1937)

Version bumps:

  • Updated LWS version from 4.2.2 to 4.3.3 (#1820)
  • Updated producer C version from 1.5.1 to 1.5.2 (v1.5.2)

Known issues:

  • MBedTLS build fails on Mac M1 with current version

Release 1.9.1 of the Amazon Kinesis Video WebRTC C SDK

08 Dec 22:36
bfa6667
Compare
Choose a tag to compare

Bug fixes

  • Fixes build error in release v1.9.0 when IOT_CORE_CREDENTIALS is enabled for samples. (Issue #1879)

Release 1.9.0 of the Amazon Kinesis Video WebRTC C SDK

07 Nov 21:35
0ae9ec6
Compare
Choose a tag to compare

What’s new:

  • New support for WebRTC Ingestion [https://docs.aws.amazon.com/kinesisvideostreams-webrtc-dg/latest/devguide/webrtc-ingestion.html]

Sample:

  • The Master samples have been updated to support WebRTC Ingestion

Bug fixes / Improvements:

  • Fixed a bug in signaling cache
  • Fix build on MacOS to no longer require setting of CPATH/LDFLAGS env vars when building with Clang
  • Bug fixes around properly isolating use of usrsctp library only when data channel is enabled

Release 1.8.1 of the Amazon Kinesis Video WebRTC C SDK

05 Sep 18:40
15e6019
Compare
Choose a tag to compare

Bug fixes:

  • Fixed timestamp precision in log lines to appropriately represent 3-digit places in millisecond portion

Release 1.8.0 of the Amazon Kinesis Video WebRTC C SDK

25 Aug 21:37
e9f3cab
Compare
Choose a tag to compare

What’s new:

  • New latency measurement metrics available to read the time taken by different steps in the WebRTC peer set up process - PeerConnectionMetrics and KvsIceAgentMetrics
  • Provision to use threadpool for thread management in signaling client to handle signaling messages. Control the size of the threadpool using SignalingClientInfo structure and enable usage by defining KVS_USE_SIGNALING_CHANNEL_THREADPOOL . Instructions are added to the README.md
  • Provision to profile code section using PROFILE_* macros
  • Added support for China (Beijing) region

Sample:

  • Fixed potential memory leak in sample tear down
  • Recreate signaling client if signaling client creation fails
  • Changed GOP size of sample video from 10s to 2s
  • Added RTSP source to gstreamer sample app
  • Multiple bug fixes in samples

Bug fixes / Improvements:

  • Fixed SDK build issues with libwebsockets on Windows
  • Fixed poll() call failure on Windows
  • Overwrite final entry in signaling cache if cache file reaches maximum entries
  • Answer’s m line is generated based on the offer’s m line in SDP to avoid m line mismatch error when running with web browsers as the peer
  • Build SCTP library only when ENABLE_DATA_CHANNEL flag is set
  • Added jitter buffer overflow check to prevent frames from getting dropped due to timestamp integer overflow
  • Fixed user agent string to be SDK and version specific
  • Fixed crash from race condition in ConnectionListener teardown
  • Improved latency in resolving TURN server URLs by directly parsing the IP from the getIceServerConfig response
  • Logging improvements

Version bumps:

  • OpenSSL updated from 1.1.1g to 1.1.1t

Release 1.7.3 of the Amazon Kinesis Video WebRTC C SDK

19 May 00:19
ced19d0
Compare
Choose a tag to compare

Release tagged at: ced19d0

Bug Fixes:

  • Fixed an issue in sample applications where LWS context would not be usable after loss of connectivity

Other

  • Added more logging for ICE and TURN both for error handling and debug cases.
  • Clang format v14.0 applied

Sample Code Changes

  • This release has changes in Common.c that apply to all samples. Particularly of note are the changes in sessionCleanupWait(). Please be sure to incorporate these changes into your applications.

Release 1.7.2 of the Amazon Kinesis Video WebRTC C SDK

21 Feb 21:19
2dff44f
Compare
Choose a tag to compare

Release tagged at : 2dff44f

Bug Fixes:

  • Fixed an issue where connected sockets were not sending pings

Details about Bug:

Between v3.x.x and v4.x.x the LWS changed the struct that managed the retry policy.
In LWS v4.2.0-.2 there is a bug in the create LWS context function. It checks only if ping is passed in, and then assigns both ping and hangup passed in values. Hangup can be undefined in this case

1045     context->default_retry.secs_since_valid_ping = 300;        //defaults
1046     context->default_retry.secs_since_valid_hangup = 310;
1047     
1048     if (info->retry_and_idle_policy &&
1049         info->retry_and_idle_policy->secs_since_valid_ping) {  //check for ping value to be non-zero.
1050         context->default_retry.secs_since_valid_ping =
1051                 info->retry_and_idle_policy->secs_since_valid_ping;
1052         context->default_retry.secs_since_valid_hangup =
1053                 info->retry_and_idle_policy->secs_since_valid_hangup;  //this is the passed in value of hangup, which could have been unassigned
1054     }

We need to pass in a hangup value greater than the ping value, or the pings will not occur.

Producer C version:

v1.2.X (unreleased at this time) - c7fce9e06021452ff3c42dc70c8360606b22ad53