- Fix
IceServer
crash when client uses ICE renomination (PR #1182).
- Fix NPM "postinstall" task in Windows (PR #1187).
- CI: Use Node.js version 20 (PR #1177).
- Use given
PYTHON
environment variable (if given) when runningworker/scripts/getmake.py
(PR #1186).
- Bump up Meson from 1.1.0 to 1.2.1 (fixes Xcode 15 build issues) (PR #1163 by @arcinston).
- Support C++20 (PR #1150 by @o-u-p).
- Google Transport Feedback: Read Reference Time field as 24bits signed as per spec (PR #1145).
- Node: Rename
WebRtcTransport.webRtcServerClosed()
tolistenServerClosed()
(PR #1141 by @piranna).
- Fix RTCP SDES (PR #1139).
- Export
workerBin
absolute path (PR #1123).
SimulcastConsumer
: Fix lack of "layerschange" event when all streams in the producer die (PR #1122).
Worker
: AddTransport::Destroying()
protected method (PR #1114).RtpStreamRecv
: Fix jitter calculation (PR #1117, thanks to @penguinol).- Revert "Node: make types.ts only export types rather than the entire class/code" (PR #1109) because it requires
typescript
>= 5 in the apps that import mediasoup and we don't want to be that strict yet.
DataConsumer
: Fix removed 'bufferedamountlow' notification (PR #1113).
- Fix downloaded prebuilt binary check on Windows (PR #1105 by @woodfe).
Migrate npm-scripts.js
to npm-scripts.mjs
(ES Module) (PR #1093).
- CI: Use
ubuntu-20.04
to build mediasoup-worker prebuilt on Linux (PR #1092).
- mediasoup-worker prebuild: Fallback to local building if fetched binary doesn't run on current host (PR #1090).
- Automate and publish prebuilt
mediasoup-worker
binaries (PR #1087, thanks to @barlock for his work in (PR #1083).
Worker
: Fix NACK timer and avoid negative RTT (PR #1082, thanks to @o-u-p for his work in (PR #1076).
Worker
: Require C++17, Meson >= 1.1.0 and update subprojects (PR #1081).
SeqManager
: Fix performance regression (PR #1068, thanks to @vpalmisano for properly reporting).
- Node: Fix
appData
forTransport
andRtpObserver
parent classes (PR #1066).
RtpStreamRecv
: Only perform RTP inactivity check on simulcast streams (PR #1061).SeqManager
: Properly remove old dropped entries (PR #1054).- libwebrtc: Upgrade trendline estimator to improve low bandwidth conditions (PR #1055 by @ggarber).
- libwebrtc: Fix bandwidth probation dead state (PR #1031 by @vpalmisano).
- Fix check division by zero in transport congestion control (PR #1049 by @ggarber).
- Fix lost pending statuses in transport CC feedback (PR #1050 by @ggarber).
RtpStreamSend
: Reset RTP retransmission buffer upon RTP sequence number reset (PR #1041).RtpRetransmissionBuffer
: Handle corner case in which received packet has lower seq than newest packet in the buffer but higher timestamp (PR #1044).SeqManager
: Fix crash and add fuzzer (PR #1045).- Node: Make
appData
TS typed and writable (PR #1046, credits to @mango-martin).
SvcConsumer
: Properly handle VP9 K-SVC bandwidth allocation (PR #1036 by @vpalmisano).
RtpRetransmissionBuffer
: Consider the case of packet with newest timestamp but "old" seq number (PR #1039).
- Add
transport.setMinOutgoingBitrate()
method (PR #1038, credits to @ jcague). RTC::RetransmissionBuffer
: IncreaseRetransmissionBufferMaxItems
from 2500 to 5000.
- Fix
SeqManager
: Properly consider previous cycle dropped inputs (PR #1032). RtpRetransmissionBuffer
: Get rid of not necessarystartSeq
private member (PR #1029).- Node: Upgrade TypeScript to 5.0.2.
RtpRetransmissionBuffer
: Fix crash and add fuzzer (PR #1028).
- Refactor RTP retransmission buffer in a separate and testable
RTC::RetransmissionBuffer
class (PR #1023).
AudioLevelObserver
: Use multimap rather than map to avoid conflict if various Producers generate same audio level (PR #1021, issue reported by @buptlsp).
- Fix jitter calculation (PR #1019, credits to @alexciarlillo and @snnz).
- Add support for RTCP NACK in OPUS (PR #1015).
- Download and use MSYS/make locally for Windows postinstall (PR #792 by @snnz).
- Allow simulcast with a single encoding (and N temporal layers) (PR #1013).
- Update libsrtp to 2.5.0.
SimulcastConsumer::GetDesiredBitrate()
: Choose the highest bitrate among all Producer streams (PR #992).SimulcastConsumer
: Fix frozen video when syncing keyframe is discarded due to too high RTP timestamp extra offset needed (PR #999, thanks to @satoren for properly reporting the issue and helping with the solution).
- libwebrtc: Fix crash due to invalid
arrival_time
value (PR #985 by @ggarber). - libwebrtc: Replace
MS_ASSERT()
withMS_ERROR()
(PR #988).
- Fix wrong
PictureID
rolling over in VP9 and VP8 (PR #984 by @jcague).
- Require Node.js >= 16 (PR #973).
- Fix wrong
Consumer
bandwidth estimation underProducer
packet loss (PR #962 by @ggarber).
- Node: Migrate tests to TypeScript (PR #958).
- Node: Remove compiled JavaScript from repository and compile TypeScript code on NPM
prepare
script on demand when installed via git (PR #954). Worker
: AddRTC::Shared
singleton for RTC entities (PR #953).- Update OpenSSL to 3.0.7.
ChannelMessageHandlers
: MakeRegisterHandler()
not remove the existing handler if another one with sameid
is given (PR #952).
- Fix installation issue in Linux due to a bug in ninja latest version 1.11.1 (PR #948).
ActiveSpeakerObserver
: Revert 'dominantspeaker' event changes in PR #941 to avoid breaking changes (PR #947).
Transport
: Remove duplicate call to method (PR #931).- RTCP: Adjust maximum compound packet size (PR #934).
DataConsumer
: FixbufferedAmount
type to be a number again (PR #936).ActiveSpeakerObserver
: Fix 'dominantspeaker' event by having a singleProducer
as argument rather than an array with a singleProducer
into it (PR #941).ActiveSpeakerObserver
: Fix memory leak (PR #942).- Fix some libwebrtc issues (PR #944).
- Tests: Normalize hexadecimal data representation (PR #945).
SctpAssociation
: Fix memory violation (PR #943).
- Fix worker crash due to
std::out_of_range
exception (PR #933).
- RTCP: Fix trailing space needed by
srtp_protect_rtcp()
(PR #929).
- Fix the JSON serialization for the payload channel
rtp
event (PR #926 by @mhammo).
- RTCP enhancements (PR #914).
Consumer
: use a bitset instead of a set for supported payload types (PR #919).- RtpPacket: optimize UpdateMid() (PR #920).
- Little optimizations and modernization (PR #916).
- Fix SIGSEGV at
RTC::WebRtcTransport::OnIceServerTupleRemoved()
(PR #915, credits to @ybybwdwd). WebRtcServer
: Makeport
optional (if not given, a random available port from theWorker
port range is used) (PR #908 by @satoren).
- Forward
abs-capture-time
RTP extension also for audio packets (PR #911).
- Node: Define TypeScript types for
internal
anddata
objects (PR #891). Channel
andPayloadChannel
: Refactorinternal
with a singlehandlerId
(PR #889).Channel
andPayloadChannel
: Optimize message format and JSON generation (PR #893).- New C++
ChannelMessageHandlers
class (PR #894). - Fix Rust support after recent changes (PR #898).
- Modify
FeedbackRtpTransport
and tests to be compliant with latest libwebrtc code, make reference time to be unsigned (PR #899 by @penguinol and @sarumjanuch).
RtpStreamSend
: Do not store too old RTP packets (PR #885).- Log error details in channel socket. (PR #875 by @mstyura).
SimpleConsumer
: Fix. Only process Opus codec (PR #865).- TypeScript: Improve
WebRtcTransportOptions
type to not allowwebRtcServer
andlistenIps
options at the same time (PR #852).
- Fix release contents by including meson_options.txt (PR #863).
RtpStreamSend
: Memory optimizations (PR #840). Extracted from #675, by @nazar-pc.SimpleConsumer
: Opus DTX ignore capabilities (PR #846).- Update
libuv
to 1.44.1: Fixeslibuv
build (PR #857).
WebRtcServer
: A new class that brings toWebRtcTransports
the ability to listen on a single UDP/TCP port (PR #834).- More SRTP crypto suites (PR #837).
- Improve
EnhancedEventEmitter
(PR #836). TransportCongestionControlClient
: Allow setting max outgoing bitrate beforetccClient
is created (PR #833).- Update TypeScript version.
RateCalculator
: Fix old buffer items cleanup (PR #830 by @dsdolzhenko).- Update TypeScript version.
SimulcastConsumer
: Fix spatial layer switch with unordered packets (PR #823 by @jcague).- Update TypeScript version.
RateCalculator
: Revert Fix old buffer items cleanup (PR #819 by @dsdolzhenko).
NackGenerator
: Add a configurable delay before sending NACK (PR #827, credits to @penguinol).SimulcastConsumer
: Fix a race condition in SimulcastConsumer (PR #825 by @dsdolzhenko).- Add support for H264 SVC (#798 by @prtmD).
RtpStreamSend
: Support receive RTCP-XR RRT and send RTCP-XR DLRR (PR #781 by @aggresss).RateCalculator
: Fix old buffer items cleanup (PR #819 by @dsdolzhenko).DirectTransport
: Create a buffer to process RTP packets (PR #730 by @rtctt).- Node: Improve
appData
TypeScript syntax and initialization. - Allow setting max outgoing bitrate below the initial value (PR #826 by @ggarber).
- Update TypeScript version.
VP8
: Do not discardTL0PICIDX
from Temporal Layers higher than 0 (PR @817 by @jcague).- Update TypeScript version.
DtlsTransport
: Make DTLS negotiation run immediately (PR #815).- Update TypeScript version.
- Modify
SimulcastConsumer
to keep using layers without good scores (PR #804 by @ggarber).
- Update worker dependencies:
- OpenSSL 3.0.2.
- abseil-cpp 20211102.0.
- nlohmann_json 3.10.5.
- usrsctp snapshot 4e06feb01cadcd127d119486b98a4bd3d64aa1e7.
- wingetopt 1.00.
- Update TypeScript version.
- Fix RTP marker bit not being reseted after mangling in each
Consumer
(PR #811 by @ggarber).
- Optimize RTP header extension handling (PR #786).
RateCalculator
: Reset optimization (PR #785).- Fix frozen video due to double call to
Consumer::UserOnTransportDisconnected()
(PR #788, thanks to @ggarber for exposing this issue in PR #787).
- Fix VP9 kSVC forwarding logic to not forward lower unneded layers (PR #778 by @ggarber).
- Fix update bandwidth estimation configuration and available bitrate when updating max outgoing bitrate (PR #779 by @ggarber).
- Replace outdated
random-numbers
package by nativecrypto.randomInt()
(PR #776 by @piranna). - Update TypeScript version.
- Typing event emitters in mediasoup Node (PR #764 by @unao).
- TCC client optimizations for faster and more stable BWE (PR #712 by @ggarber).
- Added support for RTP abs-capture-time header (PR #761 by @oto313).
- ICE renomination support (PR #756).
- Update
libuv
to 1.43.0.
Worker
: Fix bad printing of error messages from Worker (PR #750 by @j1elo).
- Single H264/H265 codec configuration in
supportedRtpCapabilities
(PR #718). - Improve Windows support by not requiring MSVC configuration (PR #741).
pipeToRouter()
: Reuse samePipeTransport
when possible (PR #697).- Add
worker.died
boolean getter. - Update TypeScript version to 4.X.X and use
target: "esnext"
so transpilation of ECMAScript private fields (#xxxxx
) don't useWeakMaps
tricks but use standard syntax instead. - Use more than one core for compilation on Windows (PR #709).
Consumer
: Modification of bitrate allocation algorithm (PR #708).
- NixOS friendly build process (PR #683).
Worker
: Emit "died" event before observer "close" (PR #684).- Transport: Hide debug message for RTX RTCP-RR packets (PR #688).
- Update
libuv
to 1.42.0. - Improve Windows support (PR #692).
- Avoid build commands when MEDIASOUP_WORKER_BIN is set (PR #695).
- Replaces GYP build system with fully-functional Meson build system (PR #622).
- Worker communication optimization (aka removing netstring dependency) (PR #644).
- Move TypeScript and compiled JavaScript code to a new
node
folder. - Use ES6 private fields.
- Require Node.js version >= 12.
- OPUS multi-channel (Surround sound) support (PR #647).
- Add
packetLoss
stats to transport (PR #648 by @ggarber). - Fixes for active speaker observer (PR #655 by @ggarber).
- Fix big endian issues (PR #639).
- Fix wrong
size_t*
toint*
conversion in 64bit Big-Endian hosts (PR #637).
ActiveSpeakerObserver
: Fix crash due to anullptr
(PR #634).
SimulcastConsumer
: Fix RTP timestamp when switching layers (PR #626 by @penguinol).
- Update
libuv
to 1.42.0. - Use non-ASM OpenSSL on Windows (PR #614).
- Fix minor memory leak caused by non-virtual destructor (PR #625).
- Dominant Speaker Event (PR #603 by @SteveMcFarlin).
- Update
libuv
to 1.41.0. - C++:
- Support for optional fixed port on transports (PR #593 by @nazar-pc).
- Upgrade and optimize OpenSSL dependency (PR #598 by @vpalmisano):
- OpenSSL upgraded to version 1.1.1k.
- Enable the compilation of assembly extensions for OpenSSL.
- Optimize the worker build (
-O3
) and disable the debug flag (-g
).
- Introduce
PipeConsumerOptions
to avoid incorrect type information onPipeTransport.consume()
arguments. - Make
ConsumerOptions.rtpCapabilities
field required as it should have always been.
- Add
mid
option inConsumerOptions
to provide way to override MID (PR #586 by @mstyura).
kind
field ofRtpHeaderExtension
is no longer optional. It must be 'audio' or 'video'.- Refactor API inconsistency in internal RTP Observer communication with worker.
- Update
usrsctp
to include a "possible use after free bug" fix (commit here).
- Fix build on FreeBSD (PR #585 by @smortex).
mediasoup-worker
: Fix memory leaks on error exit (PR #581).
- Fix
DepUsrSCTP::Checker::timer
not being freed onWorker
close (PR #576). Thanks @nazar-pc for discovering this.
- Remove clang tools binaries from regular installation.
- Code clean up.
PayloadChannel
: Copy received messages into a separate buffer to avoid memory corruption if the message is later modified (PR #570 by @aggresss).
- Thread and memory safety fixes needed for mediasoup-rust (PR #562 by @nazar-pc).
- mediasoup-rust support on macOS (PR #567 by @nazar-pc).
- mediasoup-rust release 0.7.2.
Transport
: Implement newsetMaxOutgoingBitrate()
method (PR #555 by @t-mullen).SctpAssociation
: Don't warn if SCTP send buffer is full.- Rust: Update modules structure and other minor improvements for Rust version (PR #558).
mediasoup-worker
: Avoid duplicated basenames so that libmediasoup-worker is compilable on macOS (PR #557).
- SctpAssociation: provide 'sctpsendbufferfull' reason on send error (#552).
- Improve
RateCalculator
(PR #547 by @vpalmisano).
- Make worker M1 compilable.
RateCalculator
optimization (PR #538 by @vpalmisano).
SimulcastConsumer
: Fix miscalculation when increasing layer (PR #541 by @penguinol).- Rust version with thread-based worker (PR #540).
- Welcome to
mediasoup-rust
! Authored by @nazar-pc (PRs #518 and #533). - Update
usrsctp
.
- Fix crash if empty
fingerprints
array is given inwebrtcTransport.connect()
(issue #537).
Producer
: Add new stats field 'rtxPacketsDiscarded' (PR #536).
XxxxConsumer.hpp
: makeIsActive()
returntrue
(even ifProducer
's score is 0) when DTX is enabled (PR #534 due to issue #532).
- Fix crash (regression, issue #529).
- Add missing
delete cb
that otherwise would leak (PR #527 based on PR #526 by @vpalmisano). router.pipeToRouter()
: Fix possible inconsistency inpipeProducer.paused
status (as discussed in this thread in the mediasoup forum).- Update
nlohmann/json
to 3.9.1. - Update
usrsctp
. - Enhance Jitter calculation.
- Fix notifications from
mediasoup-worker
being processed before responses received before them (issue #501).
- Move
bufferedAmount
fromdataConsumer.dump()
todataConsumer.getStats()
.
- Add
pipe
option totransport.consume()
(PR #494).- So the receiver will get all streams from the
Producer
. - It works for any kind of transport (but
PipeTransport
which is always like this).
- So the receiver will get all streams from the
- Add
LICENSE
andPATENTS
files inlibwebrtc
dependency (issue #495). - Added
worker/src/Utils/README_BASE64_UTILS
(issue #497). - Update
usrsctp
.
- Fix wrong message about
rtcMinPort
andrtcMaxPort
. - Update deps.
- Improve
EnhancedEventEmitter.safeAsPromise()
(although not used).
- Fix replacement of
__MEDIASOUP_VERSION__
inlib/index.d.ts
(issue #483). worker/scripts/configure.py
: Handle 'mips64' (PR #485).
- Allow the
mediasoup-worker
process to inherit all environment variables (issue #480).
- BWE tweaks and debug logs.
- SCTP fixes (PR #479).
- Update
awaitqueue
dependency.
- Fix yet another memory leak in Node.js layer due to
PayloadChannel
event listener not being removed.
Transport.cpp
: Provide transport congestion client with RTCP Receiver Reports (#464).- Update
libuv
to 1.40.0. - Update Node deps.
SctpAssociation.cpp
: increasesctpBufferedAmount
before sending any data (#472).
- Fix memory leak in Node.js layer due to
PayloadChannel
event listener not being removed (related to #463).
- Remove
-fwrapv
when building mediasoup-worker inDebug
mode (issue #460). - Add
MEDIASOUP_MAX_CORES
to limitNUM_CORES
during mediasoup-worker build (PR #462).
- Update
usrsctp
dependency. - Update
typescript-eslint
deps. - Update Node deps.
- Fix
ortc.getConsumerRtpParameters()
RTX codec comparison issue (PR #453). - RtpObserver: expose
RtpObserverAddRemoveProducerOptions
foraddProducer()
andremoveProducer()
methods.
- Update
libuv
to 1.39.0. - Update Node deps.
- SimulcastConsumer: Prefer the highest spatial layer initially (PR #450).
- RtpStreamRecv: Set RtpDataCounter window size to 6 secs if DTX (#451)
SctpAssociation.cpp
: FixOnSctpAssociationBufferedAmount()
call.- Update deps.
- New API to send data from Node throught SCTP DataConsumer.
- Avoid SRTP leak by deleting invalid SSRCs after STRP decryption (issue #437, thanks to @penguinol for reporting).
- Update
usrsctp
dep. - DataConsumer 'bufferedAmount' implementation (PR #442).
-
Fix
usrsctp
vulnerability (PR #439). -
Fix issue #435 (thanks to @penguinol for reporting).
-
TransportCongestionControlClient.cpp
: Enable periodic ALR probing to recover faster from network issues. -
Update
nlohmann::json
C++ dep to 3.9.0.
- RTP on
DirectTransport
(issue #433, PR #434):- New API
producer.send(rtpPacket: Buffer)
. - New API
consumer.on('rtp', (rtpPacket: Buffer)
. - New API
directTransport.sendRtcp(rtcpPacket: Buffer)
. - New API
directTransport.on('rtcp', (rtpPacket: Buffer)
.
- New API
- Release script.
Transport
: renamemaxSctpSendBufferSize
tosctpSendBufferSize
.
Transport
: ImplementmaxSctpSendBufferSize
.- Update
libuv
to 1.38.1.
Transport::ReceiveRtpPacket()
: CallRecvStreamClosed(packet->GetSsrc())
if received RTP packet does not match anyProducer
.Transport::HandleRtcpPacket()
: EnsureConsumer
is found for received NACK Feedback packets.- Fix issue #408.
- Fix SRTP leak due to streams not being removed when a
Producer
orConsumer
is closed. - Update
nlohmann::json
C++ dep to 3.8.0. - C++: Enhance
const
correctness.
ConsumerScore
: AddproducerScores
, scores of all RTP streams in the producer ordered by encoding (just useful when the producer uses simulcast).- PR #421 (fixes issues #420).
- Hide worker executable console in Windows.
- PR #419 (credits to @BlueMagnificent).
RtpStream.cpp
: Fix wrongstd::round()
usage.- Issue #423.
- Update
usrsctp
library. - Update ESlint and TypeScript related dependencies.
- Set
score:0
whendtx:true
is set in anencoding
and there is no RTP for some seconds for that RTP stream.- Fixes #415.
gyp
: Fix CLT version detection in OSX Catalina when XCode app is not installed.- PR #413 (credits to @enimo).
- Modernize TypeScript.
- Fix crash in
Transport.ts
when closing aDataConsumer
created on aDirectTransport
.
- Export new
DirectTransport
intypes
. - Make
DataProducerOptions
optional (not needed when in aDirectTransport
).
- SCTP/DataChannel termination:
- PR #409
- Allow the Node application to directly send text/binary messages to mediasoup-worker C++ process so others can consume them using
DataConsumers
. - And vice-versa: allow the Node application to directly consume in Node messages send by
DataProducers
.
- Add
WorkerLogTag
TypeScript enum and also add a new 'message' tag into it.
- Simulcast and SVC: Better computation of desired bitrate based on
maxBitrate
field in theproducer.rtpParameters.encodings
.
- Update deps, specially
uuid
and@types/uuid
that had a TypeScript related bug. TransportCongestionClient.cpp
: Improve sender side bandwidth estimation by do not reportingthis->initialAvailableBitrate
as available bitrate due to strange behavior in the algorithm.
- Simplify
GetDesiredBitrate()
inSimulcastConsumer
andSvcConsumer
. - Update
libuv
to 1.38.0.
SeqManager.cpp
: Improve performance.- PR #398 (credits to @penguinol).
SeqManager.cpp
: Fix a bug and improve performance.- Fixes issue #395 via PR #396 (credits to @penguinol).
- Drop Node.js 8 support. Minimum supported Node.js version is now 10.
- Upgrade
eslint
andjest
major versions.
SimulcastConsumer.cpp
: FixIncreaseLayer()
method (fixes #394).- Udpate Node deps.
libwebrtc
: Apply patch by @sspanak and @Ivaka to avoid crash. Related issue: #357.PortManager.cpp
: Do not useUV_UDP_RECVMMSG
in Windows due to a bug inlibuv
1.37.0.- Update Node deps.
- Enable
UV_UDP_RECVMMSG
:- Upgrade
libuv
to 1.37.0. - Use
uv_udp_init_ex()
withUV_UDP_RECVMMSG
flag. - Add our own
uv.gyp
now thatlibuv
has removed support for GYP (fixes #384).
- Upgrade
- Fix crash in mediasoup-worker due to conversion from
uint64_t
toint64_t
(used withinlibwebrtc
code. Fixes #357. - Update
usrsctp
library. - Update Node deps.
SeqManager.cpp
: Fix video lag after a long time.- Fixes #372 (thanks @penguinol for reporting it and giving the solution).
UdpSocket.cpp
: Revertuv__udp_recvmmsg()
usage since it notifies about received UDP packets in reverse order. Feature on hold until fixed.
Transport.cpp
: Enable transport congestion client for the first video Consumer, no matter it's uses simulcast, SVC or a single stream.- Update
libuv
to 1.35.0. UdpSocket.cpp
: Ensure the new libuv'suv__udp_recvmmsg()
is used, which is more efficient.
PlainTransport
: RemovemultiSource
option. It was a hack nobody should use.
- Enable MID RTP extension in mediasoup to receivers direction (for consumers).
- This requires mediasoup-client 3.5.2 to work.
PlainTransport
: Fix event name: 'rtcpTuple' => 'rtcptuple'.
PipeTransport
: Add support for SRTP and RTP retransmission (RTX + NACK). Useful when connecting two mediasoup servers running in different hosts via pipe transports.PlainTransport
: Add support for SRTP.- Rename
PlainRtpTransport
toPlainTransport
everywhere (classes, methods, TypeScript types, etc). Keep previous names and mark them as DEPRECATED. - Fix vulnarability in IPv6 parser.
- Update
uuid
dep to 7.0.X (new API). - Fix crash due wrong array index in
PipeConsumer::FillJson()
.- Fixes #364
- TypeScript: generate
es2020
instead ofes6
. - Update
usrsctp
library.- Fixes #362 (thanks @chvarlam for reporting it).
IceServer.cpp
: Reject received STUN Binding request with 487 if remote peer indicates ICE-CONTROLLED into it.
ProducerOptions
: RenamekeyFrameWaitTime
option tokeyFrameRequestDelay
and make it work as expected.
- Add
Utils::Json::IsPositiveInteger()
to not rely onis_number_unsigned()
of json lib, which is unreliable due to its design. - Avoid ES6
export default
and always use namedexport
. router.pipeToRouter()
: Ensure a singlePipeTransport
pair is created betweenrouter1
androuter2
.- Since the operation is async, it may happen that two simultaneous calls to
router1.pipeToRouter({ producerId: xxx, router: router2 })
would end up generating two pairs ofPipeTranports
. To prevent that, let's use an async queue.
- Since the operation is async, it may happen that two simultaneous calls to
- Add
keyFrameWaitTime
option toProducerOptions
. - Update Node and C++ deps.
libsrtp.gyp
: Fix regression in mediasoup for Windows.libsrtp.gyp
: Modernize it based on the newBUILD.gn
in Chromium.libsrtp.gyp
: Don't include "test" and other targets.- Assume
HAVE_INTTYPES_H
,HAVE_INT8_T
, etc. in Windows. - Issue details: sctplab/usrsctp#353
gyp
dependency: Add support for Microsoft Visual Studio 2019.- Modify our own
gyp
sources to fix the issue. - CL uploaded to GYP project with the fix.
- Issue details: sctplab/usrsctp#347
- Modify our own
PortManager.cpp
: Do not limit the number of failedbind()
attempts to 20 since it does not work well in scenarios that launch tons ofWorkers
with same port range. Instead iterate all ports in the range given to the Worker.- Do not copy
catch.hpp
intotest/include/
but make the GYPmediasoup-worker-test
target include the corresponding folder indeps/catch
.
- Update libsrtp to 2.3.0.
- Update ESLint and TypeScript deps.
- Update deps.
- Fix text in
./github/Bug_Report.md
so it no longer references the deprecated mailing list.
Transport.cpp
: Ignore RTCP SDES packets (we don't do anything with them anyway).Producer
andConsumer
stats: Always showroundTripTime
(even if calculated value is 0) after aroundTripTime
> 0 has been seen.
Transport.cpp
: Fix RTCP FIR processing:- Instead of looking at the media ssrc in the common header, iterate FIR items and look for associated
Consumers
based on ssrcs in each FIR item. - Fixes #350 (thanks @j1elo for reporting and documenting the issue).
- Instead of looking at the media ssrc in the common header, iterate FIR items and look for associated
SctpAssociation.cpp
: Improve/fix logs.- Improve Node
EventEmitter
events inline documentation. test-node-sctp.js
: Wait for SCTP association to be open before sending data.
- Improve mediasoup-worker build system by using
sh
instead ofbash
and default to 4 cores (thanks @smoke, PR #349).
- Add
worker.getResourceUsage()
API. - Update OpenSSL to 1.1.1d.
- Update
libuv
to 1.34.0. - Update TypeScript version.
- Update usrsctp dependency (it fixes a potential wrong memory access).
- More details in the reported issue: sctplab/usrsctp#408
- Fix
version
getter.
SctpAssociation.cpp
: Initialize theusrsctp
socket in the class constructor. Fixes #348.
- Fix usage of a deallocated
RTC::TcpConnection
instance under heavy CPU usage due to mediasoup deleting the instance in the middle of a receiving iteration. Fixes #333.- More details in the commit: https://github.com/versatica/mediasoup/commit/49824baf102ab6d2b01e5bca565c29b8ac0fec22
- IPv6 fix: Use
INET6_ADDRSTRLEN
instead ofINET_ADDRSTRLEN
.
- Add
consumer.setPriority()
andconsumer.priority
API to prioritize how the estimated outgoing bitrate in a transport is distributed among all video consumers (in case there is not enough bitrate to satisfy them). - Make video
SimpleConsumers
play the BWE game by helping in probation generation and bitrate distribution. - Add
consumer.preferredLayers
getter. - Rename
enablePacketEvent()
and "packet" event toenableTraceEvent()
and "trace" event (sorry SEMVER). - Transport: Add a new "trace" event of type "bwe" with detailed information about bitrates.
- Improve "packet" event by not firing both "keyframe" and "rtp" types for the same RTP packet.
- Add type "keyframe" as a valid type for "packet" event in
Producers
andConsumers
.
- Add transport-cc bandwidth estimation and congestion control in sender and receiver side.
- Run in Windows.
- Rewrite to TypeScript.
- Tons of improvements.
- Fix TCP leak (#325).
PlainRtpTransport
: Fix comedia mode.
RateCalculator
: improve efficiency inGetRate()
method (#324).
RtpDataCounter
: use window size of 2500 ms instead of 1000 ms.- Fixes false "lack of RTP" detection in some screen sharing usages with simulcast.
- Fixes #312.
- Add RTCP Extended Reports for RTT calculation on receiver RTP stream (thanks @yangjinechofor for initial pull request #314).
- Make mediasoup-worker compile in Armbian Debian Buster (thanks @krishisola, fixes #321).
- Add DataChannel support via DataProducers and DataConsumers (#10).
- SRTP: Add support for AEAD GCM (#320).
PipeConsumer.cpp
: Fix RTCP generation (thanks @vpalmisano).
- VP8 and H264: Fix regression in 3.1.5 that produces lot of changes in current temporal layer detection.
- VP8 and H264: Allow packets without temporal layer information even if N temporal layers were announced.
- Add
-fPIC
incflags
to compile in x86-64. Fixes #315.
- Set the sender SSRC on PLI and FIR requests related thread.
- Workaround to detect H264 key frames when Chrome uses external encoder (related issue). Fixes #313.
- Improve
GetBitratePriority()
method inSimulcastConsumer
andSvcConsumer
by checking the total bitrate of all temporal layers in a given producer stream or spatial layer.
- Add SVC support. It includes VP9 full SVC and VP9 K-SVC as implemented by libwebrtc.
- Prefer Python 2 (if available) over Python 3. This is because there are yet pending issues with gyp + Python 3.
- Do not require Python 2 to compile mediasoup worker (#207). Both Python 2 and 3 can now be used.
- Codecs: Improve temporal layer switching in VP8 and H264.
- Skip worker compilation if
MEDIASOUP_WORKER_BIN
environment variable is given (#309). This makes it possible to install mediasoup in platforms in which, somehow, gcc > 4.8 is not available duringnpm install mediasoup
but it's available later. - Fix
RtpStreamRecv::TransmissionCounter::GetBitrate()
.
parseScalabilityMode()
: allow "S" as spatial layer (and not just "L"). "L" means "dependent spatial layer" while "S" means "independent spatial layer", which is used in K-SVC (VP9, AV1, etc).
RtpStreamSend::ReceiveRtcpReceiverReport()
: improvertt
calculation if no Sender Report info is reported in received Received Report.- Update
libuv
to version 1.29.1.
- VP8 & H264: Improve temporal layer switching.
- RTP frame-marking: Add some missing checks.
- Fix regression in proxied RTP header extensions.
- Add support for frame-marking RTP extensions and use it to enable temporal layers switching in H264 codec (#305).
- Improve RTP probation for simulcast/svc consumers by using proper RTP retransmission with increasing sequence number.
- Simulcast: Improve timestamps extra offset handling by having a map of extra offsets indexed by received timestamps. This helps in case of packet retransmission.
- Simulcast: proper RTP stream switching by rewriting packet timestamp with a new timestamp calculated from the SenderReports' NTP relationship.
- Fix crash in
SimulcastConsumer::IncreaseLayer()
with Safari and H264 (#300).
- v3 is here!
RtpStreamSend.cpp
: Fix a crash inStorePacket()
when it receives an old packet and there is no space left in the storage buffer (thanks to zkfun for reporting it and providing us with the solution).- Update deps.
- Fix usage of a deallocated
RTC::TcpConnection
instance under heavy CPU usage due to mediasoup deleting the instance in the middle of a receiving iteration.
- Improve build system by using all available CPU cores in parallel.
- Don't mandate server port range to be >= 99.
- Fix NACK retransmissions.
- Fix TCP leak (#325).
- Make mediasoup-worker compile in Armbian Debian Buster (thanks @krishisola, fixes #321).
- Update deps.
- Fix RTCP Receiver Report handling.
- Update deps.
- Simulcast: Increase profiles one by one unless explicitly forced (fixes #188).
PlainRtpTransport.js
: Add missing methods and events.
- Remove a potential crash if a single
encoding
is given in the ProducerrtpParameters
and it has aprofile
value.
- C++: Verify in libuv static callbacks that the associated C++ instance has not been deallocated (thanks @artushin and @mariat-atg for reporting and providing valuable help in #258).
- Fix wrong destruction of Transports in Router.cpp that generates 100% CPU usage in mediasoup-worker processes.
- Fix a port leak when a WebRtcTransport is remotely closed due to a DTLS close alert (thanks @artushin for reporting it in #259).
- RtpPacket: Fix Two-Byte header extensions parsing.
- Upgrade again to OpenSSL 1.1.0j (20 Nov 2018) after adding a workaround for issue #257.
- Downgrade OpenSSL to version 1.1.0h (27 Mar 2018) until issue #257 is fixed.
- C++: Remove all
Destroy()
class methods and no longer dodelete this
. - Update libuv to 1.24.1.
- Update OpenSSL to 1.1.0g.
- worker: Internal refactor and code cleanup.
- Remove announced support for certain RTCP feedback types that mediasoup does nothing with (and avoid forwarding them to the remote RTP sender).
- fuzzer: fix some wrong memory access in
RtpPacket::Dump()
andStunMessage::Dump()
(just used during development).
- Integrate libFuzzer into mediasoup (documentation in the
doc
folder). Extensive testing done. Several heap-buffer-overflow and memory leaks fixed.
Producer.cpp
: RemoveUpdateRtpParameters()
. It was broken since Consumers were not notified about profile removed and so on, so they may crash.Producer.cpp: Remove some maps and simplify streams handling by having a single
mapSsrcRtpStreamInfo. Just keep
mapActiveProfilesbecause
GetActiveProfiles()` method needs it.Producer::MayNeedNewStream()
: Ignore new media streams with new SSRC if its RID is already in use by other media stream (fixes #235).- Fix a bad memory access when using two byte RTP header extensions.
Server.js
: If a worker crashes make sure_latestWorkerIdx
becomes 0.
server.Room()
: Assign workers incrementally or explicitly via newworkerIdx
argument.- Add
server.numWorkers
getter.
- Don't announce
muxId
nor RTP MID extension support inConsumer
RTP parameters.
- Enable RTP MID extension again.
- Disable RTP MID extension until #230 is fixed.
- Add RTP MID extension support.
- Do not close
Transport
on ICE disconnected (as it would prevent ICE restart on "recv" TCP transports).
- Improve codec matching.
- Fix audio codec matching when
channels
parameter is not given.
- Make
PlainRtpTransport
not leak if port allocation fails (related issue #224).
- Fix a crash in when no more RTP ports were available (see related issue #222).
- Update dependencies.
- Allow non WebRTC peers to create plain RTP transports (no ICE/DTLS/SRTP but just plain RTP and RTCP) for sending and receiving media.
- Fix C++ syntax to avoid an error when building the worker with clang 8.0.0 (OSX 10.11.6).
Channel.js
: UpgradeREQUEST_TIMEOUT
to 20 seconds to avoid timeout errors when the Node or worker thread usage is too high (related to this issue).
- H264: Check if there is room for the indicated NAL unit size (thanks @ggarber).
- H264: Code cleanup.
- Add new "spy" feature. A "spy" peer cannot produce media and is invisible for other peers in the room.
- Fix H264 simulcast by properly detecting when the profile switching should be done.
- Fix a crash in
Consumer::GetStats()
(see related issue #196).
- Add H264 simulcast capability.
- Avoid calling deprecated (NOOP)
SSL_CTX_set_ecdh_auto()
function in OpenSSL >= 1.1.0.
- Fix #4: Avoid DTLS handshake fragmentation.
- Fix #196: Crash in
Consumer::getStats()
due to wrongtargetProfile
.
- Improve issue #209.
- Fix #209:
DtlsTransport
: don't crash when signaled fingerprint and DTLS fingerprint do not match (thanks @yangjinecho for reporting it).
- Update Node and C/C++ dependencies.
- Add
localIP
option forroom.createRtpStreamer()
andtransport.startMirroring()
[PR #199](versatica#199).
- Improve C++ usage (remove "warning: missing initializer for member" [-Wmissing-field-initializers]).
- Update Travis-CI settings.
- Make
PlainRtpTransport
also send RTCP SR/RR reports (thanks @artushin for reporting).
- Fix #193:
preferTcp
not honored (thanks @artushin).
- Avoid crash when no remote IP/port is given.
- Add
handled
andunhandled
events toConsumer
.
- Fix #185: Consumer: initialize effective profile to 'NONE' (thanks @artushin).
- Fix #186: NackGenerator code being executed after instance deletion (thanks @baiyufei).
- Fix #183: Always reset the effective
Consumer
profile when removed (thanks @thehappycoder).
- Make ICE+DTLS more flexible by allowing sending DTLS handshake when ICE is just connected.
- Disable stats periodic retrieval also on remote closure of
Producer
andWebRtcTransport
.
- Fix #180: Added missing include
cmath
so thatstd::round
can be used (thanks @jacobEAdamson).
- Fix #173: Avoid buffer overflow in
()
(thanks @lightmare). - Improve stream layers management in
Consumer
by using the newRtpMonitor
class.
- Fix #164: Sometimes video freezes forever (no RTP received in browser at all).
- Fix #160: Assert error in
RTC::Consumer::GetStats()
.
- Fix #159: Don’t rely on VP8 payload descriptor flags to assure the existence of data.
- Fix #160: Reset
targetProfile
when the corresponding profile is removed.
- worker: Fix crash when VP8 payload has no
PictureId
.
- worker: Remove wrong
assert
onProducer::DeactivateStreamProfiles()
.
- Update README file.
- New design based on
Producers
andConsumer
plus a mediasoup protocol and the mediasoup-client client side SDK.
- Fix a crash due to RTX packet processing while the associated
NackGenerator
is not yet created.
- Habemus RTX (RFC 4588) for proper RTP retransmission.
- Fix an issue in
buffer.toString()
that makes mediasoup fail in Node 8. - Update libuv to version 1.12.0.
- Add support for ICE renomination.
- Fix a SDP negotiation issue when the remote peer does not have compatible codecs.
- Add video codecs supported by Microsoft Edge.
RtpReceiver
: generate RTCP PLI when "rtpraw" or "rtpobject" event listener is set.
RtpReceiver
: fix an error producing packets when "rtpobject" event is set.
RtpSender
: allowdisable()
/enable()
without forcing SDP renegotiation (#114).
- Add
Room.on('audiolevels')
event.
- Set a maximum value of 1500 bytes for packet storage in
RtpStreamSend
.
- Avoid possible segfault if
RemoteBitrateEstimator
generates a bandwidth estimation with zero SSRCs.
- First stable release.