Skip to content

v1.5.0

Compare
Choose a tag to compare
@maxsharabayko maxsharabayko released this 15 Jun 09:45
· 342 commits to master since this release
060c0d1

Release Notes

API / ABI / Integration Changes

API/ABI version: 1.5.

  • PR #2316: Renamed ENABLE_EXPERIMENTAL_BONDING build option to ENABLE_BONDING. With the Connection Bonding feature disabled, bonding API functions are present, but return an error.

  • PR #2081: Added the SRTO_GROUPMINSTABLETIMEO socket option which defines the minimum stability timeout for all the active member sockets in a Main/Backup group.

  • PR #2312: Deprecated srt_rejectreason_msg[]. The API function srt_rejectreason_str() should be used instead.

  • PR #2271: Fixed missing extern "C" for the srt_rejectreason_str() API function.

  • PR #2152: Use SOCKET type for any WIN32 environment.

  • PR #2176: Fixed handshake cookie validation by the listener for rendezvous connections.

New Features and Improvements

1. Connection Bonding is no Longer Experimental

While this feature remains disabled by default, you can use the ENABLE_BONDING=ON build option to activate it.

Similar to SMPTE-2022-7 over managed networks, Connection Bonding adds seamless stream protection and hitless failover to the SRT protocol. This technology relies on more than one IP network path to prevent disruption to live video streams in the event of network congestion or outages, maintaining continuity of service.

This is accomplished using the socket groups introduced in the current release. The general concept of socket groups means having a group that contains multiple sockets, where one operation for sending one data signal is applied to the group. Single sockets inside the group will take over this operation and do what is necessary to deliver the signal to the receiver.

Two modes are supported:

  • Broadcast - In Broadcast mode, data is sent redundantly over all the member links in a group. If one of the links fails or experiences network jitter and/or packet loss, the missing data will be received over another link in the group. Redundant packets are simply discarded at the receiver side.

  • Main/Backup - In Main/Backup mode, only one (main) link at a time is used for data transmission while other (backup) connections are on standby to ensure the transmission will continue if the main link fails. The goal of Main/Backup mode is to identify a potential link break before it happens, thus providing a time window within which to seamlessly switch to one of the backup links.

Improvements and bug fixes since v1.4.4:

  • PR #2260: Use the latest available input rate estimate from the main link for the newly activated backup link when the main one breaks (Main/Backup mode). This improvement is applied when maximum bandwidth is configured to operate in INPUTBW_ESTIMATED mode.

  • PR #2316: Added the SRTO_GROUPCONNECT socket option. When set on a listener socket, the socket is allowed to accept incoming group connections.

  • PR #2316: Added the SRTO_GROUPTYPE read-only socket option which returns the group type declared in the incoming connection.

  • PR #2081: Added the SRTO_GROUPMINSTABLETIMEO socket option which defines the minimum stability timeout for all active member sockets in a Main/Backup group.

  • PR #2257: Fixed the loss of initial packets by a group in Message mode with a message consisting of several packets.

  • PR #2258: Fixed packet sequence number tracking in group sender (Broadcast mode).

  • PR #2245: Improved group read-readiness update on sending an acknowledgment packet.

2. New Implementation of the Receiver Buffer with Behavior and Code Improvements

  • PR #1964: Enabled by default with theENABLE_NEW_RCVBUFFER=ON build option. Note that while it is still possible to fall back to the old receiver buffer implementation, eventually the new implementation will be the only one available.

    • Improved memory management to better work with shared objects and fixed const-correctness violations to avoid unnecessary object state changes.

    • It is now possible to read packets from the receiver buffer without waiting for them to be acknowledged. The SRT latency can now be less than the interval of sending acknowledgments of 10 ms. See #1429.

    • Better handling of sender’s drop requests. The current implementation will mark packets as “dropped by sender”, and when the time comes those packets will be dropped by the TSBPD mechanism at the receiver side.

    • Out-of-order reading is now supported for the file transmission use case.

    • In the case of file transmission in message mode, the notification about the readiness of reading a message consisting of several packets is now sent once all the packets forming this message are received and ready to be read.

3. Packet Pacing and Live Congestion Control Improvements

  • PR #2185: Operate with either the time when the packets are submitted to the SRT library (on the sender), or the source time, not both. If provided, source time is preferred over submitted time. Previously, submitted time was used by the Too-Late Packet Drop mechanism when dropping a message by TTL and calculating sender buffer timespan statistics (msSndBuf). If provided, source time was used as a data packet timestamp.

  • PR #2180: Prioritize sending original packets over retransmissions in live streaming configuration. For file transmission configuration, the order of sending remains the same: retransmitted over original packets.

  • PR #2232: Fixed issue #713 where the Too-Late Packet Drop mechanism may violate the configured maximum bandwidth, which limits the bandwidth usage by SRT.

  • PR #2230: Use sender buffer delay (tsNow - tsOldestPacket) in Too-Late Packet Drop mechanism instead of timespan between the latest submitted packet and the oldest one present at the sender buffer (tsLatestPacket - tsOldestPacket).

  • PR #2068: Drop a message based on Time to Live (TTL) even if it hasn’t been sent. A TTL value, in milliseconds, can be provided when submitting a message to SRT via the srt_sendmsg2(..., msgctrl.msgttl) function. If the TTL since a message has been submitted to SRT for sending is expired, this message will be discarded even if it hasn’t been sent yet. Previously, a message was always sent (at least once) and TTL affected further retransmissions only.

  • PR #2229: The code related to forming an original data packet for sending has been moved to a separate function (packUniqueData(..)).

4. Other Improvements

  • PRs #2324, #2125, #2301: Resolved symbol name leakage related issues. Placed sender and receiver buffer implementations, CEpoll, CEPollDesc, CIPAddress, CInfoBlock, CMD5 and other functions under the srt namespace.

  • PRs #2241, #2208, #2210: Improved the condition for smoothed RTT recalculation in the case of bidirectional transmission. Fixed the issue introduced in RTT estimation when adding atomic types in PR #1863 (affected version: v1.4.4).

Important Bug Fixes

  • PR #2159: Use Mersenne Twister engine with C++11 instead of std::random_device. Fixed the probability calculation of getting the maximum value for the default (C++03) rand().

  • PR #1913: Replaced the global CUDTUnited object with static local one.

  • PR #2277: Check if CryptoControl exists in craftKmResponse(). Fixes crash #2231.

  • PRs #2291, #2292: Fixed volatile keyword usage. Prefer the usage of std::atomic where possible.

  • PR #2223: Fixed missing m_RcvBufferLock in processCtrlDropReq().

  • PR #2195: Fixed consistency of packet sequence numbers inserted in CRcvLossList.

  • PR #2196: Fixed the issue with CRcvLossList::m_iTail not being reset to -1.

  • PR #2197: Fixed deadlock introduced by CUDTGroup::setOpt().

  • PR #2162: A fix for UDP RCVBUF and SNDBUF socket options on Solaris.

  • PR #2168: Changed the locking order in bstats() API functions to access statistics.

  • PR #1950: Fixed the issue with m_GCStopLock being set up multiple times and never being released.

Build

  • PR #2148: Support for Android NDK r23 with OpenSSL v3.

  • PRs #2319, #2325: Fixed building sendfile and recvfile examples as they do not require C++11 support.

Documentation

  • PR #2311: Added information about SRT versioning in the Developer’s Guide.
  • PR #2247: Improved the SRT Build Options document. It now has a summary table with the list of build options and their descriptions.
  • PR #2357: Improved the SRT project main README. Added "Features", "Getting Started", "Sample Applications and Tools", "Contributing", and other sections. Moved build instructions in separate documents under docs/build.

Acknowledgements

Kudos to Guangqing Chen and Zhili Zhao for their valuable contributions to this release.

Changelog

Click to expand/collapse

API

49fb18e Fixed ABI compatibility issue with bonding enabled and disabled.
e208d9f SRT_SOCKGROUPDATA typedef closer to the place it is needed in.
64d7f69 SRT version raised to 1.5.0.
c6b95f5 Removed unused srt_group_configure API function.
f82b131 Dummy bonding API version if ENABLE_BONDING is disabled.
78b4d65 Drop EXPERIMENTAL from ENABLE_EXPERIMENTAL_BONDING
042df34 Removed balancing and multicast group types (#2323)
94ff168 Removed unused srt_include(..) and srt_exclude(..) API functions for unimplemented externally managed groups.
1c6e1ce Deprecated srt_rejectreason_msg[]. (#2312)
2fb3c9a Use the SOCKET type for any WIN32 environment (#2152)

Core Functionality

8d1643e Fixed warning on SRT_ATTR_REQUIRES. SAL supports only one argument, added SRT_ATTR_REQUIRES2.
5247d91 Fixed CUDT::packUniqueData return value. Truncation from 'int' to 'bool'.
64846cc Fixed build with the old receiver buffer.
7bfdba0 Fixed setting group type on a socket accepted w/o listener callback.
116c554 Have SRT_SocketOptionObject even if bonding is disabled.
990b75a Moved bonding API to the end of srt.h
8901838 Moved CWindow inside the srt namespace.
9761063 Moved sockaddr_any inside the srt namespace.
909c8fb Moved CCache inside the srt namespace.
3fbb917 Placed CHandshake inside the srt namespace.
9ba7e64 Moved CEpoll, CUDTException, etc. into the srt namespace
681b363 Placed CSndLossList and CRcvLossList inside the srt namespace.
e926653 Fixed minor compiler warnings in RCV buffer
9b3e3c1 Fixed ENABLE_HAICRYPT_LOGGING (#2315).
477530f Drop packets in the new RCV buffer by group RCV base (#2207)
69284ce Fixed updating new RCV buffer on ISN change. (#2309)
c76f43d fix CRcvBufferNew::m_iStartSeqNo was not sync in group
48d1364 Added explicit to the Scoped and UniqueLock constructors
992d816 Check if CryptoControl exists in craftKmResponse. Fixes crash #2231.
591e320 Clean up the CUDT processConnectRequest(..) function. Update listener write-ready only after the new connection. Was changed in #1650, but must not be done at all (see #1831).
911de75 Fix name conflict with md5 functions (#2301)
c0da44e FixedArray: use a function to throw an exception.
29d56be Define an iterator for the srt::FixedArray.
1cd39b9 Show RCV buffer timespan instead of TSBPD ready span.
cc62e98 Fixed CRcvBufferNew::strFullnessState(..). Possible null pointer object call after if (m_entries[iLastPos].pUnit). Show the first valid packet instead of the very first position in the buffer.
6c8f0f1 fix volatile in group.h
1f8c1e9 prefer to use std::atomic if available
fec9a40 fix m_iLastSchedSeqNo
8f22c96 CSndUList use notify_one() instead of notify_all()
af6ff16 Downgrade ACKACK reorder log to Note
1dacc2a Remove declaration srt_logger_config again
4c08c3d Move srt_rejectreason_str implementation to srt_c_api
a68683a haicrypt_log.cpp include its header file
f1ec270 Remove duplicated includes
5bf0cc1 Remove redundant ';' after '}'
8d1a722 Applied clang-format on api.h and api.cpp.
ebbac9a fix CRcvBufferNew::m_bPeerRexmitFlag.
024e9c0 Fix extraction seq with scheduling seq in group. (#2258)
3975428 fix unrecoverable initial packets lose in group message mode
fe5debb Source rate estimate: ignore old samples
589d36e Backup group: derive source rate estimate from an active link on idle member activation
daf94c4 Moved source rate estimation logic to CRateEstimator from CSndBuffer
a60d98a Protect RCV buffer access from socket stats
4b70a63 Group option SRTO_GROUPMINSTABLETIMEO (#2081)
f15d300 Fix build for FreeBSD kernel (#2255)
7d77d41 SND Drop Request: ignore if TLPktDrop and TSBPD are enabled to reduce false drops when a packet can still arrive later. It will be dropped anyway as too late.
5adc2db RCV don't drop packets on SND drop request if they already exist in the buffer and can be read (full message is available).
81a31da Fix RCV drop count when dropping on SND DROP REQ. Extended RCVBUF trace logging.
0c5bf7a Decreased SND drop request log level to Debug
c885ed1 Group::updateReadState() support out-of-order messages
650dbe6 Fixed rcvDropTooLateUpTo calls. Broken after merging #2218
8f68f61 refactor Group::recv() base on new rcv buffer to support message mode
ac854f2 Fixed setting the peer rexmit flag on the RCV buffer
409d363 Improved the condition for smoothed_rtt recalculation, bidirectional transmission
08e6482 SND prioritize original packets in live configuration
ef11d26 SND pacing: amendment on probing packets
912463b Fix MaxBW limitation. Don't reschedule sending (keep pacing) on - SND drop, - NAK received - retransmission timeout.
308cd30 Added missing lock to CSndBuffer::readData
5773901 Use SND buffer delay for TL Packet Drop instead of the timespan between the first and the last packet in the buffer.
a31e618 Refactoring: added packUniqueData(..) func
8518558 fixed missing m_RcvBufferLock in processCtrlDropReq()
8c05c70 Fix CRcvBufferNew::dropMessage() (#2222)
24bf666 CRcvBufferNew::dropUpTo() able to drop non-empty units (#2221)
31de8aa Add CRcvBufferNew::dropUnitInPos(..) (#2226)
8afcdbe fix m_iMaxPosInc was not updated in releaseNextFillerEntries()
258167d replace ++ with incPos() in getTimespan_ms()
3d26644 Fixed build with the old RCV buffer
1111cbd Fixed RCV TL drop of packets dropped by SND (#2214)
5f7bc23 Refactored the core stats structure (#2212).
3558cd0 Fix GC stop handling (#1950)
26678fe Fixed the issue with RTT in case of bidirectional transmission introduced when adding atomic types
ae787bf Fix rtt estimate in bidirectional mode
c8cb38f Fix m_GroupOf->updateReadState() in message mode (#2204)
1d808c1 fix recv_WaitForReadReady() return empty
c9a8db7 Fix consistency of packet seqno in CRcvLossList (#2195)
244d2f4 Fix deadlock introduced by CUDTGroup::setOpt()
8b68157 fix CRcvLossList::m_iTail not reset to -1
e5a1179 Fix UDP RCVBUF and SNDBUF on Solaris (#2162).
6ae42c6 Drop msg by TTL even if hasn't ever been sent (#2068)
b99e41c SND buffer: operate either origin or source time, not both.
33c8e49 checkNeedDrop returns the congestion state
5f3cd06 Fixed std::runtime_error usage (use C++03 version instead of C++11) (#2184)
e4a1d2b Fixed read-ready epoll event in stream (file) mode. Only the new RCV buffer (PR #1964) is affected.
ec571a0 Fixed new RCV buffer in stream mode (reading fractional packets)
3c3824f Removed unused SRT_DEBUG_TSBPD_DRIFT
f11b026 fix listener's cookie check (#2176).
276a841 New receiver buffer implementation
3f2945c Reduced nesting of checkBrokenSockets()
c1fdb61 Changed lock order in bstats (#2168)
489c5fc Use Mersenne Twister engine with C++11 instead of the std::random_device. Fixed max value probability for the default (C++03) rand().
86d1eb2 Added CUDT::isRcvReady() with mutex lock. Added CUDT::getAvailRcvBufferSize() function with and without mutex lock.
2031b2c Do not set peerAddress in connectIn(..). CUDT::startConnect(..) sets it itself.
790b783 Small refax of CUDTUnited::channelSettingsMatch(..)
5b0811c Replaced global CUDTUnited with static local variable (#1913)
0c604c1 Moved SND and RCV buffers into the 'srt' namespace

Unit Tests

b8e788a Replace volatile with atomic
f372356 Use std::random_device in Transmission.FileUpload
e0aaa44 Minor improvement of the TestSocketOptions
01ef57a Added unit tests for RCV buffer in stream mode
427cece Receiver buffer tests
8f2d318 Refactored RCV buffer unit tests (#2170)
6e89639 Fixed async launch TestConnection.Multiple
8bcf30b More RCV buffer unit tests
fa1c373 Added check for a minimal value of the uniform distribution.
ac6ec62 Improved the TestConnection.Multiple test. Using std::array. Try to bind SRT directly instead of UDP.
4f7f999 Remove duplicated includes

Build Scripts (CMake, etc.)

060c0d1 Fix OpenSSL static linking error (#2369).
ccb47af Fixed building with deprecated ENABLE_EXPERIMENTAL_BONDING
dfb9c39 Do not install examples and testing apps
73e2623 Synchronized changes in configure script with CMake (#2353)
4f863ea Added mbedTLS build to Travis CI (#2326)
ea6448f Added ENABLE_BONDING status message in cmake output.
886843e Sendfile and recvfile examples don't need C++11.
0b47e6f Sendfile and recvfile examples don't need logsupport.
c8726ac Fixed building examples with C++11 disabled (#2319)
1ddeaec build openssl share library without version extesion for android.
277fa58 Travis MinGW job now uses OpenSSL 1.1.1g
2aa90bb CMake: fix system library names for MinGW (#2219)
d9b7988 Add ShowProjectConfig CMake Module. (#2161)
a5b61db Fixed missing ws2_32 lib in Windows installer (#2169)
2da63dc Add Android build action to GitHub CI (#2149)
15f33d4 Fix build with default configuration for GCC <4.7 (#2160)
6886bfa Add enable-experimental-bonding opt in configure
73b49fe Support NDK r23, OpenSSL v3 (#2148)

Sample Applications

031603f Removed calls to non-existing srt_group_configure() function.
d618c30 Clean up sendfile and recvfile examples.
a77b3ae Replace volatile with atomic
fb494e4 Remove redundant ';' after '}'
40b5129 Added support for adapter parameter in caller mode (#2202)
ce2742b Split off stats writer from apputil.cpp (#2130)
1a2aa05 Print SRT version and clock type

Documentation

e8b713e Added Connection Bonding Quick Start documentation
04b7c00 Improved SRT project README
fba72ac Minor improvements to Connection Bonding documentation
30bd827 Fixed SRTO_LINGER default values.
63026dc Improved the access control document. (#2358)
f189601 Improved build and socket options description for v1.5.0 (#2355)
0bbc62d srt_bind_acquire requires a not connected UDP socket (#2342)
a58af53 Fixed retransmitalgo naming plus added the link for Medium article.
66692ff Added an example for srt_getsockname API function.
06cfb79 Changed the name from RFC to Internet Draft plus updated the links
9f17bd6 Fixed wrong weight type in SRT_SOCKGROUPCONFIG.
48ead24 Fixed a typo in anchor link (#2329)
45acb74 Updated bonding API functions doc on return errors.
7b2311f Added note on versioning (#2311)
f1a6415 Fixed srt_bstats return type description
badf401 Fixed SRT version in srt-live-transmit.md
9b95ffc Reworked the build options document. (#2247)
5b7ac45 srt-live-transmit.md: add ffplay, ffprobe examples (#2242)
cf34d69 Updated options description for srt-live-transmit (#2209)
545700f Added and updated description of useful test applications (#2191)