# Unreleased # 0.23.1 * Guard SRTP/SRTCP and RTCP parsing against malformed input #1029 # 0.23.0 * Respond to RRTR with DLRR #1022 * Use a local SSRC as the originator of outgoing RRTR reports #1027 * Add `DirectApi::send_pli_feedback` to send a PLI with a chosen sender SSRC #1025 # 0.22.0 * Make audio and video RTCP report intervals configurable #1021 * Stop padding media packets, no crypto need it #1023 * Reset SCTP streams when closing data channels and safely reuse stream IDs #1010 * Fix small padding invisible to the pacer #1020 * Fix H.264 negotiation: accept a negotiable (downgradable) level and recognize the Constrained High profile #1016 * Expose the latest send queue information on `StreamTx` #1005 * Expose locally calculated interarrival jitter on `MediaIngressStats` #997 * Fix VP9 non-flexible SS advertising a bogus R=0 GOF for single-layer streams #999 * Fix AV1 depacketizer overflow on unsized OBU aggregation #1002 * Support G722 audio codec (16 kHz codec with 8 kHz RTP clock per RFC 3551) #992 * Support RFC 3389 Comfort Noise payloads #1013 * Apply reliability parameters to a DCEP-receiving in-band channel #1004 * Normalize `Rtc` shutdown and drain RTCP, SCTP, and DTLS close output consistently #1000 * Fix an infinite loop when DTLS timeout handling fails #1017 # 0.21.0 * Upgrade to dimpl 0.7.0 (breaking) * Handle SctpAssociation as Event::Closed #986 * Reject SDP payload types > 127 instead of panicking when claiming PTs #983 * Add RTCP PSFB FMT=15 (AppSpecificFeedback) send/receive via Direct API #981 * Add H266/VVC RTP packetizer and depacketizer #971 * Negotiate SCTP max message size for data channels #852 * Expose the negotiated DTLS protocol version #979 * Make MTU size configurable #967 * Add optional `drv` feature for using public identity types as `drv::Input` #974 #975 * Send DTLS `close_notify` on `Rtc::close()` #956 * Fix `Simulcast::add_recv_layer` to push to recv instead of send #968 * Accept any non-empty SDP session name (`s=`), not just `s=-` #969 # 0.20.0 * Update dimpl to 0.6.2 and sctp-proto to 0.9.1 * Fix repeated rx lookup cleanup bug #965 * Fix permissive vp8 depacketizer for invalid `l=1,t=0` cases (breaking) #963 * Add VP8 descriptor parsing and `vp8_patch()` to `RtpWrite` #963 * `write_rtp()` now takes a `RtpWrite` builder (breaking) #963 * Add `abs-capture-time` writer support and fixed receiver-side (breaking) #964 * Add stereo to opus format params #955 * Use `Arc<[u8]>` as input/output of media data (breaking) #959 # is-0.9.1 * Expose ICE candidate pair RTT in CandidatePairStats #962 # 0.19.0 * Expose H265 some already referenced profile structs #948 * Update to dimpl 0.6.1 * Update openssl to 0.10.78 # is-0.9.0 * IceCandidate expose str0m/is-unique local property #951 * Implement ICE role conflict resolution #950 # 0.18.1 * dtls: fix to resends during handshake #943 * Add `SdpApi::stop_media()` to stop an existing m-line #941 * Update chat example to use `SdpApi::stop_media()` when clients are removed #941 * Accept recycled m-line indexes when the previous m-line was stopped #941 * Always use ActPass when sending an SDP offer (RFC 8842 Section 5.2/5.5) #893 * Fix frame drops in Firefox due missing RTX SSRC #940 * Drop stale depacketizer state on stream pause and restore paused timestamp repair #929 * Reduce bounds checks in STUN encode/decode #931 # 0.18.0 * Disable server cookie for all dimpl crypto impl #923 * Implement SNAP and sctp-init #811 * Implement wincrypto-dimpl feature #920 * Implement openssl-dimpl feature #919 * Update to dimpl 0.5.0 #916 * Refactor out new crate "is" (ice agent) #912 * Expose CSRC property in RTP Header #910 * Fix jitter calculation in ReceiverReports #907 * Preserve nomination on redundant pair replacement #908 # 0.17.0 * Update to dimpl 0.4.3 #902 * Update ~dimpl to 0.4.2~ (see 902) and sctp-proto to 0.8.1 #892 * Update ~dimpl to 0.3.0~ (see 902) #874 * MSRV 1.85, Edition 2024 and bump deps #891 * Reduce allocations in AV1 packetizer/depacketizer #889 * Workaround DCEP panics due to reuse race condition #883 * sprop-max-don-diff SDP parameter #885 * Reduce number of RTP header extensions sent on every packet #880 * Add RTP-level keyframe detection for VP8, VP9, AV1, H264 and H265 #869 * VP9 switch packetizer to non-flexible mode (F=0) #868 * Fix H265 SDP negotiation level handling #872 * Avoid sending VLA on every packet #866 * Add `abs-capture-time` RTP header extension #864 * Adjust `IceAgent::ice_timeout` to return timeout of successful pair #875 * Fix infinite loop on in-band data channel stream conflict #873 * Add `Hash`, `PartialOrd` and `Ord` traits to `TransId` #905 * Fix m-line ordering when using sdp `merge()` #887 # 0.16.2 * Fix hot timeout loop with null pacer #863 * H265 to use is_irap() for keyframe detection #859 * Fix probe estimator panic when probes accumulate #857 * Improve H265 test coverage and organization #853 * Add `DirectApi::invalidate_candidate()` #858 # 0.16.1 * Fix two AV1 packetizer panics #854 * Fix ICE disconnections with Chrome v144+ when not using ICE Lite #846 * Downgrade noisy BWE logs #847 * Fix H265 PACI depacketizer panic on short payload #849 # 0.16.0 * Constant stream timeout check #845 * H265 Packetizer/Depacketizer #822 * Cap amount SCTP (data channels) buffer #831 * Fix incorrectly purged ice-lite pairs #832 * Provide start Instant in constructor (breaking) #843 * Fix bug in dimpl resend logic (dimple 0.2.4) #842 * Fix bug in dimpl HelloVerifyRequests (dimpl 0.2.3) #841 * Stable RNG for tests with dimpl (dimpl 0.2.3) #841 * BWE remove current_bitrate param (breaking) #838 * BWE V2 (Probe clusters) #823 # 0.15.0 * MediaData::is_keyframe() helper #805 * Handle tcptype ICE candidates #797 * New API for building ICE Candidates (breaking) #797 * AV1 Packetizer/Depacketizer #819 * Surface Sender Info as Event (breaking) #820 * Improve performance on apple crypto #818 #821 * Crypto compliance tests #817 * Fix HMAC P_hash implementation for Apple Crypto #824 * Update Apple Crypto crate to use CryptoKit #813 # 0.14.3 * Bump dimpl 0.2.1 for SChannel compat #801 * Reduce allocating in `str0m-aws-lc-rs` encrypt/decrypt #804 # 0.14.2 * Fix order of DTLS pending packet poll #796 * Defer panic on missing crypto provider until Rtc init #792 # 0.14.1 * Configure sctp to not give up INIT/data retransmissions #791 * update sctp-proto to 0.6.0 #791 * wincrypto: queue data until handshake completes #787 * openssl: queue data until handshake completes #787 # 0.14.0 * RTT as Duration #756 * Revise Simulcast layer API #784 * Fix max-bundle bug introduced in 0.13 #786 * Reduce reallocation when depacketizing #782 * Network emulation for tests #774 * Handle SSRC 0 BWE probe #769 * Apple Crypto backend #763 * Move all crypto backends out of main crate #768 * h264 profile/level matching comply with RFC 6184 #758 * Constant time HMAC equality #753 # 0.13.0 * Simulcast send attributes RFC 8851 #780 * Handle rejected m-lines (set port 0 etc) #772 * Expose Opus packetizer #770 * Handle incoming SSRC 0 BWE probe #769 * New CryptoProvider API #760 * Update H.264 profile and level matching logic #758 * Use constant time equality in some key places #753 * Fix off-by-one nack reports #748 # 0.12.0 * Bump str0m-wincrypto to 0.2.1 * str0m-wincrypto crate: fix double-free #751 * Represent NTP as SystemTime in SenderReports #735 * Fix bug in PT remapping to unlocked PTs #734 * Fix PT conflict when using Firefox #730 * Rename Sample level API -> Frame level API #732 * Add new non-openssl DTLS under `dimpl` feature #708 * Expose packetizers under `unversioned` feature #718 * Fix bug when TWCC sequence starts above 32768 #717 # 0.11.1 * stun: stricter string parsing #712 * Tweak DirectAPI fingerprint() calls (breaking) #711 * Restore disabling RtcConfig.fingerprint_verification #711 * Fix panic width incorrect STUN packet #709 # 0.11.0 * Bump str0m-wincrypto to 0.2.0 * Remove str0m/wincrypto use of thiserror #704 #706 * Channel::config() to get data channel config #702 * fix `Vp9Depacketizer` failing on high scalability modes #701 * srtp: support (and prefer) AES_256_GCM #697 * bwe: fix panic on history monotonicity assert in `TrendlineEstimator` #700 * ice: fix panic on STUN Binding Indication #690 # 0.10.0 * Channel::buffered_amount/set_buffered_amount #688 * Support PCMu/PCMa #685 * Make STUN timers configurable on RtcConfig #674 * ice: stricter srflx candidate checks #672 * ice: Dont report Disconnected when no local candidates #670 * ice: expose remote ICE credentials #675 * ice: transition from `Disconnected -> Checking` on new candidates #676 * Make ICE agent local preference pluggable #668 * Simplified serde of SDP #664 * SR/RR stats in Ingress/EgressStats #661 #662 # 0.9.0 * Wincrypto fail on drop #660 * All logging on DEBUG and lower #658 * Redact PII (ip addresses) in logs #656 * Document behavior of MediaAdded #655 * Fix growing feedback bug before ICE #654 * Fix vp8 depacketize for small packets #653 * Bust cache on config change #649 * RTT in PeerStats #648 * Fix off-by-one SDES size calculation #647 * Increase ufrag size to 16 #646 * `add_local_candidate` return candidate on success #650 # 0.8.0 * Add start of talkspurt for sample writer #645 * Avoid overwriting acked SCTP association #643 * Fix bug misparsing SDES #641 * Prefer relayed candidates with matching IP versions #640 * Add stats for the selected candidate pair #638 * Optional integrity on STUN messages #632 * Support for most of TURN's messages in STUN #631 * Reset cached nack flag #629 * Only reset deplayloader if SSRC did change #628 * SSRC changes reset StreamRx state #627 * Direct API reset_stream_tx() call #626 * Handle very long media pauses #625 # 0.7.0 * Spoof raddr in srflx relay candidate #621 * Support AV1-specific media format parameters #619 * Support negative time deltas in BWE #615 * Remove restriction on EC to use on ECDH exchange #616 * Don't retain Receiver Report loss info when stats are disabled #614 * Fix RIDs bug on updating non-simulcast media #612 * Support writing VLA #603 * Ensure BWE calculation exactly follows libWebRTC #608 * Add EC-DSA custom certificate common names #607 * Fix multiple bugs in TWCC #605 #606 #601 * Support sending simulcast (breaking) #603 * Wincrypto support #589 # 0.6.3 * Add warning log when exceeding max number of pairs #587 * Add fuzz to Nightly CI #585 * Add new loss based BWE controlled #579 #582 #583 * Add new `vendored` feature flag affecting openssl #580 * Make use of sha1 crate an optional feature #577 * Dedupe remote ICE candidates #576 #578 * Correctly handle per m-line Absolute Send Time #575 * Correctly handle per m-line TWCC #573 * Configure RTX ratio cap via `StreamTx::set_rtx_cache` #570 * Match remote candidate of stun request by priority #569 * Improve timeouts during DTLS handshake #565 * Do not decrypt already received packets #554 * Test for SRTP replay attack #555 * refactor(ice): always use latest timing config #568 * Fix RTX stops working after packet loss spike #566 * Add Sub trait impl (back) to MediaTime #560 * Make start of talkspurt information available for frame api #559 * Do not disconnect whilst we still check new candidates #489 * Ensure lexical ordering of SDP-formatted candidates follows priority #557 * Limit TWCC iteration with packet status count #606 * Dedupe acked packets from `TwccSendRegister::apply_report()` #601, #605 * Align BWE ArrivalGroup calculation with libwebrtc implementation #608, #615 * Support AV1-specific media format parameters #619 # 0.6.2 * Fix edge case breaking DTLS #531 * Bump sctp-proto to be compatible with libdatachannel #558 * Ensure not risk of ROC on initial sequence number #553 * API for getting stream_id/track_id from a=msid #550 * Use a=extmap-allow-mixed SDP attribute #551 * Change the unix_time function to return libc::time_t (32-bit compat) #533 * Fix bug using unreliable channels by default #548 * New add_channel_with_config() for configured data channels #548 # 0.6.1 * Force openssl to be >=0.10.66 #545 * Fix bug when replacing redundant ice candidates #544 * Add playout_delay builder function #543 # 0.6.0 * Doc updates * IceAgent make timeout values configurable #537 * Log more details when failing to decrypt SRTP #536 * Remember max SeqNo per SSRC for reuse ROC #535 * Only update NACK/TWCC registers after succesful SRTP decrypt #528 * Fix bug when changing StreamRx SSRC #522 * Simplify StreamRx lookup state cache #522 * Fix bug in TWCC time delta #524 * Make MediaTime nominator unsigned (breaking) #521 * Provide reason for timeout #520 * Reject ice-lite - ice-lite scenario #519 * Fix bug in ice agent roles for ice-lite #519 * DLTS cert serial number as random instead of sequential #518 * IceAgent make timing advance (TA) configurable #515 * Use sha1 crate instead of the deprecated sha-1 #512 * Bump sctp-proto to 0.2.2 #511 * Adjust logging levels to be less noisy #510 * Fix crash when using VLA (or other) optional RTP exts with SDP #509 * Re-add manually invalidated IceAgent candidates #508 * New API to reset BWE state #506 * Change parameter in BWE algo to match libwebrtc #506 # 0.5.1 * Expose STUN packet split_username() fn #505 * IceAgent fix to not invalidate unrelated remote candidates #504 * Expose ice credentials as configuration option #502 * Bug fix in lazy NACK handling #501 * Net structs Transmit/Receive serde Serializable #500 * Payload matching for VP9 #499 * IceAgent allow invalidating remote candidates #498 * Avoid panic on too early DTLS traffic #495 * `IceAgent::handle_packet` return false if packet not accepted #493 * Don't panic on STUN requests for unknown NICs #493 * Improve IceAgent `accepts_message` to avoid panic in some situations #488 # 0.5.0 * Opus DTX support #492 * RtcConfig does not generate the ICE creds #491 * Accept all good remote address candidates, not just the nominated #487 * Improve performance by only calling `init_time` once #479 * Fix SCTP channel ID allocation bug when reusing channels #470 * Fix bug causing nomination of ICE candidate pair that isn't better #463 * Lower STUN_TIMEOUT for quicker connection checking #462 * Fix bug making SCTP fail under packet loss #482 * Add `base` parameter to `Candidate::server_reflexive` (breaking) #455 * Refactor all OpenSSL (and other crypto code) to mod crypto #449 * Fix bugs in RTX PT selection for BWE padding #454 * Don't enable NACK timers unless there are stream to nack * Fix bug in BWE trendline estimator * Fix (unlikely) nack overflow error * Speed up twcc register updates using max_seq() * Parse `StunMessage` without allocations (and huge STUN parsing cleanup) * Introduce top-level `ice` module having `ice::IceAgent` for standalone usage * Remove `StunError::Other` because it was unused * Optional parser for VLA (Video Layers Allocation) RTP header extension * Chat example send PLI on RTC sequence interruption * VP9 contiguity checks in depacketizer * Improved VP9 support with parsing layer metadata * Fix race in chat example on client disconnect * MediaTime improve safety with Frequency newtype (breaking) * Header extension abs_send_time is now an Instant * Handle more optional a=candidate parameters * Support REMB (receiver estimated maximum bitrate) feedback packets (breaking) # 0.4.1 * Generated DTLS certificates set issuer/subject for compat with OBS/libdatachannel # 0.4.0 * Allow SDP RID with `~` prefix (to indicate paused state) * Fix problem with using RTX for audio * Make IceCandidate serializable to SDP form (to/from_sdp_string) * UserExtensionValues set_arc/get_arc to avoid cloning * Provide correct Rid for repaired RTP headers * Support 2-byte header extensions * Remove a statistics performance bottleneck * New ICE Candidate types `server_reflexive` and `relayed` # 0.3.0 * Fix bad bug causing SCTP packets to not send * Improve performance by reducing Event enum size * SdpPendingOffer mergable into new OFFER * Improved VP8 temporal layer handling * Fix bug in discovering RTX channels due to NACK not being enabled * Improve NACK sending with multiple fixes to receive register * Fix bug where RTX channel would be allocated for audio m-lines * Delay creation of DtlsCert to avoid unnecessary start-up time * Writer take Into> to make it possible to avoid extra allocation (breaking) * Refactor internal time handling (unix epoch translation) * Fix bug in signaling media discontinuity * User RTP header extensions # 0.2.0 * Possible to disable DTLS fingerprint verification * Manually set local ice credentials * enable_raw_packets for debugging RTP/RTCP * ICE restart * SRTP: Implement AEAD_AES_128_GCM and use it by default * Better FMTP matching of VP8 and H264 * Fix incorrect handling of header extensions * Fix incorrect handling of PT-codec assignment * Dynamic SSRC via MID-only RTP headers * Fix various undeflow and padding bugs * VP8: parse out metata * Clean separation of RtxCache from PacketizingBuffer. * Major refactor of Media/Stream handling (we call it "kaboom") * RTP Mode (directly using RTP packets) * Bandwidth Estimation (BWE) * Direct API for SDP-free control * SDP Api to formalize SDP handling # 0.1.0 * First published version