versatica / mediasoup

Cutting Edge WebRTC Video Conferencing
https://mediasoup.org
ISC License
6.18k stars 1.12k forks source link

OpenSSL send buffer growing without bounds in DtlsTransport (worker memory leak) #1340

Closed gkrol-katmai closed 7 months ago

gkrol-katmai commented 7 months ago

Bug Report

We discovered a problem with the memory usage of Mediasoup Workers growing over time. The memory would go down only when clients disconnected. We reproduced the problem by using clients using msc-node/werift that create only a data producer and then send a lot of messages (3000/s). The problem also occurs when sending at a slower rate. Note that you do not need any consumers for the problem to occur.

Cause

I've tracked the problem down to the following. When data is being sent over the WebRTC channel from the client to the server the server will send ACK messages back. These are sent to OpenSSL to be encrypted. Recently, in 3.13.0, changes were introduced (in the ‘flatbuffers’ change), that include changes to the way the OpenSSL data is handled. These changes cause a buffer (DtlsTransport.sslBioToNetwork, aa BIO_s_mem) for the data coming out of OpenSSL to keep growing.

It looks like this bug was introduced due to a misunderstanding on how BIO_set_callback_ex operates. As far as I can see from the documentation this "can be used for debugging purposes to trace operations on a BIO or to modify its operation." The way it is currently used in Mediasoup is to spy on the 'write' operations OpenSSL does to the outgoing buffer (DtlsTransport.sslBioToNetwork). The data is then sent out over the network. However, it does not remove the data from the buffer, resulting in the leak.

Workaround

A workaround is to to go back to version 3.12.16, which does not experience the problem. We'll be doing this for now.

Fix?

I don't know anything about OpenSSL, but I could get the problem to go away by placing (void)BIO_reset(this->sslBioToNetwork); at the end of DtlsTransport::SendDtlsData. However, I do have some doubts on what is going on with the callback, as the documentation says it's called twice for every operation, and perhaps we're sending the data twice now? That would have to be investigated.

If there's no OpenSSL experts around, I can try doing a PR. However, it will have to be reviewed and tested well as I'd be mostly programming in the dark. And that's dangerous when encryption and networking is involved.

More Info

The PR that introduced the problem (3.13.0): Worker: Make DTLS fragment stay within MTU size range (https://github.com/versatica/mediasoup/pull/1156, based on https://github.com/versatica/mediasoup/pull/1143 by @vpnts-se).

Note that this is not a 'true' memory leak, as the memory is freed when the client disconnects.

ibc commented 7 months ago

Do you know how to check the byte size of the BIO_s_mem?

ibc commented 7 months ago

BtW thanks for the report. Don't hesitate to write that PR and we will investigate, or perhaps we'll just revert the offending PR if we have no idea of how it works.

gkrol-katmai commented 7 months ago

I tested with Valgrind / Massif, and I could see that it was OpenSSL memory that was growing. I did not manage to get a sensible number of the mem BIO size from the worker itself, but I hacked a printf into the OpenSSL code directly and I could see the buffer growing and growing.

This is what I put in bss_mem.c:mem_write, after blen = bbm->readp->length;

if (blen > 0) printf("[mem_write] %p blen: %d + %d\n", b, blen, inl);

I then verified that the pointer I was seeing corresponded to sslBioToNetwork

The Mediasoup worker build process is really nice btw, and also easy to use the built worker.

pnts-se commented 7 months ago

I apologise! I got the openssl documentation wrong. @ibc let me know if you want me to do a PR reverting to the old behaviour.

ibc commented 7 months ago

@pnts-se don't worry, I'm doing it. Thanks a lot.

ibc commented 7 months ago

PR done: https://github.com/versatica/mediasoup/pull/1342

ibc commented 7 months ago

PR https://github.com/versatica/mediasoup/pull/1342 merged. Thanks a lot.

gkrol-katmai commented 7 months ago

Thanks for responding to this so quickly!

ibc commented 7 months ago

@pnts-se @gkrol-katmai, I'm investigating the DTLS MTU issue and I have some questions or doubts (not sure). Could you please participate if you wish? I'm commenting in the original issue:

https://github.com/versatica/mediasoup/issues/1100#issuecomment-1959002237

ibc commented 7 months ago

Wow, I have a working PR but I cannot beliete it!

@pnts-se @gkrol-katmai @ggarber can you please take a look to it? https://github.com/versatica/mediasoup/pull/1343

ibc commented 7 months ago

but I hacked a printf into the OpenSSL code directly and I could see the buffer growing and growing.

This is what I put in bss_mem.c:mem_write, after blen = bbm->readp->length;

if (blen > 0) printf("[mem_write] %p blen: %d + %d\n", b, blen, inl);

I then verified that the pointer I was seeing corresponded to sslBioToNetwork

I've done this (in the reverted PR that caused the leak) and I only gets those prints at the beginning during the DTLS handshake , then no more despite I send and receive DataChannel messages. Do I miss something?

I don't know anything about OpenSSL, but I could get the problem to go away by placing (void)BIO_reset(this->sslBioToNetwork); at the end of DtlsTransport::SendDtlsData. However, I do have some doubts on what is going on with the callback, as the documentation says it's called twice for every operation, and perhaps we're sending the data twice now?

Here is very clear and I've verified that, during a write operation, the callback is first called with oper == BIO_CB_WRITE (there we call dtlsTransport->SendDtlsData(), and after it the same callback is called with oper == (BIO_CB_RETURN | BIO_CB_WRITE) so we don't enter the condition and don't send any duplicate data. This was ok.

gkrol-katmai commented 7 months ago

@ibc if you remove the if do you get the messages with a zero blen for the sslBioToNetwork BIO?

If the problem doesn't occur for you, I'd be very curious where in this case that buffer is emptied. I could not find any location in either the OpenSSL or the Mediasoup code that would do that. I believe you either need to do a real read or you need to reset.

Good to know that this wasn't sending data twice!

ibc commented 7 months ago

if you remove the if do you get the messages with a zero blen for the sslBioToNetwork BIO?

Nope.

This is "full" logs with some extra logs I've added in DtlsTransport. Scenario is that I run mediasoup (immediately some of your logs are shown), then a client joins a room, so there are more of your logs, then I send a DataChannel message (@bot laskdjklajdkas) via the mediasoup-demo chat input, so it's sent to the server and then sent back to same client. Your logs don't show up in that case:

mediasoup:Channel [pid:41404] mediasoup-worker::mediasoup_worker_run() | starting mediasoup-worker process [version:3.13.22] +274ms mediasoup:Channel [pid:41404] mediasoup-worker::mediasoup_worker_run() | little-endian CPU detected +0ms mediasoup:Channel [pid:41404] mediasoup-worker::mediasoup_worker_run() | 64 bits architecture detected +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | +1ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | logLevel: debug +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | logTags: info,ice +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | rtcMinPort: 40000 +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | rtcMaxPort: 49999 +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | dtlsCertificateFile: /Users/ibc/src/v3-mediasoup-demo/server/certs/large-fullchain.pem +1ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | dtlsPrivateKeyFile: /Users/ibc/src/v3-mediasoup-demo/server/certs/large-privkey.pem +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | libwebrtcFieldTrials: WebRTC-Bwe-AlrLimitedBackoff/Enabled/ +0ms mediasoup:Channel [pid:41404] Settings::PrintConfiguration() | +0ms mediasoup:Channel [pid:41404] DepLibUV::PrintVersion() | libuv version: "1.47.0" +0ms mediasoup:Channel [pid:41404] DepOpenSSL::operator()() | openssl version: "OpenSSL 3.0.8 7 Feb 2023" +0ms mediasoup:Channel [pid:41404] DepOpenSSL::operator()() | openssl CPU info: "CPUINFO: OPENSSL_ia32cap=0x7ffaf3ffffebffff:0x40000000029c67af" +0ms mediasoup:Channel [pid:41404] DepLibSRTP::ClassInit() | libsrtp version: "libsrtp2 3.0.0" +1ms mediasoup:Channel [pid:41404] DepUsrSCTP::ClassInit() | usrsctp +2ms mediasoup:Channel [pid:41404] DepLibWebRTC::ClassInit() | libwebrtc field trials: "WebRTC-Bwe-AlrLimitedBackoff/Enabled/" +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 0 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 65 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 130 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 195 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 260 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 325 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 390 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 455 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 520 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 585 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 650 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 715 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 780 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 845 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 910 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 975 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1040 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1105 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1170 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1235 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1300 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1365 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1430 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1495 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1560 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1625 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1690 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1755 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1820 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1885 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 1950 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2015 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2080 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2145 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2210 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2275 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2340 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2405 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2470 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2535 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2600 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2665 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2730 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2795 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2860 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2925 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 2990 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3055 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3120 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3185 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3250 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3315 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3380 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3445 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3510 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3575 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3640 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3705 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3770 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3835 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3900 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 3965 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4030 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4095 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4160 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4225 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4290 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4355 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4420 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4485 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4550 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4615 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4680 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4745 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4810 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4875 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 4940 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5005 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5070 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5135 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5200 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5265 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5330 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5395 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5460 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5525 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5590 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5655 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5720 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5785 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5850 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5915 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 5980 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 6045 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c090 blen: 6110 + 25 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 0 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 65 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 130 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 195 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 260 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 325 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 390 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 455 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 520 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 585 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 650 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 715 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 780 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 845 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 910 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 975 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1040 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1105 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1170 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1235 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1300 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1365 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1430 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1495 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1560 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1625 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1690 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1755 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1820 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1885 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 1950 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2015 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2080 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2145 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2210 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2275 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2340 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2405 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2470 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2535 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2600 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2665 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2730 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2795 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2860 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2925 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 2990 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3055 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3120 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3185 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3250 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3315 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3380 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3445 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3510 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3575 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3640 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3705 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3770 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3835 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3900 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 3965 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4030 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4095 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4160 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4225 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4290 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4355 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4420 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4485 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4550 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4615 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4680 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4745 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4810 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 4875 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600 +0ms mediasoup:Worker worker process running [pid:41404] +288ms mediasoup:Worker createWebRtcServer() +2ms mediasoup:Channel request() [method:WORKER_CREATE_WEBRTCSERVER] +8ms mediasoup:Channel [pid:41404] RTC::WebRtcServer::WebRtcServer() | UDP socket send buffer size: 2000000, recv buffer size: 2000000 +2ms mediasoup:Channel [pid:41404] RTC::WebRtcServer::WebRtcServer() | TCP server send buffer size: 2000000, recv buffer size: 2000000 +0ms mediasoup:Channel request succeeded [method:WORKER_CREATE_WEBRTCSERVER, id:1] +0ms mediasoup:WebRtcServer constructor() +0ms // Here the user joins so a mediasoup Router + Transports + (Data)Producers/Consumers // are created and so on: cmd> cmd> cmd> cmd> cmd> cmd> cmd> cmd> cmd> mediasoup:Worker createRouter() +2s mediasoup:Channel request() [method:WORKER_CREATE_ROUTER] +2s mediasoup:Channel request succeeded [method:WORKER_CREATE_ROUTER, id:2] +1ms mediasoup:Router constructor() +0ms mediasoup:Router createAudioLevelObserver() +0ms mediasoup:Channel request() [method:ROUTER_CREATE_AUDIOLEVELOBSERVER] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_AUDIOLEVELOBSERVER, id:3] +0ms mediasoup:RtpObserver constructor() +0ms mediasoup:Router createActiveSpeakerObserver() +1ms mediasoup:Channel request() [method:ROUTER_CREATE_ACTIVESPEAKEROBSERVER] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_ACTIVESPEAKEROBSERVER, id:4] +0ms mediasoup:RtpObserver constructor() +1ms mediasoup:Router createDirectTransport() +1ms mediasoup:Channel request() [method:ROUTER_CREATE_DIRECTTRANSPORT] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_DIRECTTRANSPORT, id:5] +0ms mediasoup:Transport constructor() +0ms mediasoup:DirectTransport constructor() +0ms mediasoup:Transport produceData() +1ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:6] +0ms mediasoup:DataProducer constructor() +0ms mediasoup:Router createWebRtcTransport() +33ms mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER] +31ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER, id:7] +0ms mediasoup:Transport constructor() +32ms mediasoup:WebRtcTransport constructor() +0ms mediasoup:Transport enableTraceEvent() +1ms mediasoup:Channel request() [method:TRANSPORT_ENABLE_TRACE_EVENT] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_ENABLE_TRACE_EVENT, id:8] +0ms mediasoup:Router createWebRtcTransport() +6ms mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER] +3ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER, id:9] +0ms mediasoup:Transport constructor() +4ms mediasoup:WebRtcTransport constructor() +5ms mediasoup:Transport enableTraceEvent() +0ms mediasoup:Channel request() [method:TRANSPORT_ENABLE_TRACE_EVENT] +1ms mediasoup:Channel request succeeded [method:TRANSPORT_ENABLE_TRACE_EVENT, id:10] +0ms mediasoup:Transport consumeData() +3ms mediasoup:Channel request() [method:TRANSPORT_CONSUME_DATA] +4ms mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME_DATA, id:11] +0ms mediasoup:DataConsumer constructor() +0ms mediasoup:WebRtcTransport connect() +34ms mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +31ms mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:12] +1ms mediasoup:WebRtcTransport connect() +6ms mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +4ms mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:13] +0ms mediasoup:Channel [pid:41404] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' [hasUseCandidate:false, hasNomination:false, nomination:0] +1ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +3ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Transport produce() +45ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE] +7ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +246ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 242 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:41404] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' [hasUseCandidate:false, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms mediasoup:Channel [pid:41404] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' [hasUseCandidate:true, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:14] +0ms mediasoup:Producer constructor() +0ms mediasoup:RtpObserver addProducer() +339ms mediasoup:Channel request() [method:RTPOBSERVER_ADD_PRODUCER] +1ms mediasoup:RtpObserver addProducer() +0ms mediasoup:Channel request() [method:RTPOBSERVER_ADD_PRODUCER] +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 67 bytes of DTLS data ready to be sent +2ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 129 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +241ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 242 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 385 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel request succeeded [method:RTPOBSERVER_ADD_PRODUCER, id:15] +0ms mediasoup:Channel request succeeded [method:RTPOBSERVER_ADD_PRODUCER, id:16] +0ms mediasoup:Worker (stdout) 000e2c240 blen: 4940 + 65 +3s mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5005 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5070 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5135 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5200 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5265 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5330 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5395 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5460 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5525 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5590 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5655 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5720 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5785 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5850 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5915 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 5980 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6045 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6110 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6175 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6240 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6305 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6370 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6435 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6500 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6565 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6630 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6695 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6760 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6825 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6890 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 6955 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7020 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7085 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7150 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7215 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7280 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7345 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7410 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7475 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7540 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7605 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7670 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7735 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7800 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7865 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7930 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 7995 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8060 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8125 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8190 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8255 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8320 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8385 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8450 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8515 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8580 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8645 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8710 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8775 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8840 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8905 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 8970 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9035 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9100 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9165 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9230 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9295 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9360 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9425 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9490 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9555 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9620 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9685 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9750 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9815 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9880 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 9945 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10010 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10075 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10140 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10205 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10270 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10335 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10400 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10465 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10530 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10595 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10660 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10725 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10790 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10855 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10920 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 10985 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11050 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11115 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11180 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11245 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11310 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11375 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11440 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11505 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11570 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11635 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11700 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11765 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11830 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11895 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 11960 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12025 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12090 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12155 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12220 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12285 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12350 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12415 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12480 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e2c240 blen: 12545 + 29 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e201b0 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 0 + 144 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 144 + 78 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 222 + 1245 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 1467 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 1349 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 2791 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 2698 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 4115 + 654 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 4769 + 657 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 4047 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 5426 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 5396 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 6750 + 119 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 6869 + 60 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 6929 + 12 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 6745 + 242 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e201b0 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e201b0 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e201b0 blen: 0 + 537 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 6941 + 300 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e34090 blen: 7241 + 45 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 6987 + 67 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 0 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 11 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 22 + 6 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 28 + 325 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 353 + 57 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 410 + 9 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 419 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e306c0 blen: 430 + 6 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e20240 blen: 7054 + 129 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e281b0 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 0 + 144 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 144 + 78 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 222 + 1245 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 1467 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 1349 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 2791 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 2698 + 1349 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 4115 + 654 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 4769 + 657 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 4047 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 5426 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 5396 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 6750 + 119 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 6869 + 60 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e202d0 blen: 6929 + 12 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e28240 blen: 6745 + 242 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000e201b0 blen: 0 + 73 +0ms mediasoup:Worker (stdout) **** [mem_ +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 67 bytes of DTLS data ready to be sent +10ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 129 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 45 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 385 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +1ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 45 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Transport produceData() +509ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +0ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:17] +1ms mediasoup:DataProducer constructor() +595ms mediasoup:Transport produceData() +3ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:18] +0ms mediasoup:DataProducer constructor() +2ms mediasoup:Transport consumeData() +0ms mediasoup:Channel request() [method:TRANSPORT_CONSUME_DATA] +0ms mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME_DATA, id:19] +0ms mediasoup:DataConsumer constructor() +557ms mediasoup:Channel [pid:41404] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' [hasUseCandidate:true, hasNomination:false, nomination:0] +852ms mediasoup:Channel [pid:41404] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms // Here I send a DataChannel message and is sent back to the client: cmd> cmd> cmd> cmd> cmd> mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +6s mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel notify() [event:DATAPRODUCER_SEND] +1ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 57 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 81 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms cmd> cmd> RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +24s RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +1ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +6s mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 57 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +24s mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 57 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +514ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:41404] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +117ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:41404] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:41404] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms

And those are same logs if I call BIO_reset(this->sslBioToNetwork) at the end of DtlsTransport::SendDtlsData() method:

mediasoup:Channel [pid:42553] mediasoup-worker::mediasoup_worker_run() | starting mediasoup-worker process [version:3.13.22] +475ms mediasoup:Channel [pid:42553] mediasoup-worker::mediasoup_worker_run() | little-endian CPU detected +0ms mediasoup:Channel [pid:42553] mediasoup-worker::mediasoup_worker_run() | 64 bits architecture detected +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | logLevel: debug +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | logTags: info,ice +1ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | rtcMinPort: 40000 +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | rtcMaxPort: 49999 +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | dtlsCertificateFile: /Users/ibc/src/v3-mediasoup-demo/server/certs/large-fullchain.pem +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | dtlsPrivateKeyFile: /Users/ibc/src/v3-mediasoup-demo/server/certs/large-privkey.pem +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | libwebrtcFieldTrials: WebRTC-Bwe-AlrLimitedBackoff/Enabled/ +0ms mediasoup:Channel [pid:42553] Settings::PrintConfiguration() | +0ms mediasoup:Channel [pid:42553] DepLibUV::PrintVersion() | libuv version: "1.47.0" +0ms mediasoup:Channel [pid:42553] DepOpenSSL::operator()() | openssl version: "OpenSSL 3.0.8 7 Feb 2023" +0ms mediasoup:Channel [pid:42553] DepOpenSSL::operator()() | openssl CPU info: "CPUINFO: OPENSSL_ia32cap=0x7ffaf3ffffebffff:0x40000000029c67af" +0ms mediasoup:Channel [pid:42553] DepLibSRTP::ClassInit() | libsrtp version: "libsrtp2 3.0.0" +1ms mediasoup:Channel [pid:42553] DepUsrSCTP::ClassInit() | usrsctp +2ms mediasoup:Channel [pid:42553] DepLibWebRTC::ClassInit() | libwebrtc field trials: "WebRTC-Bwe-AlrLimitedBackoff/Enabled/" +2ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 0 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 65 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 130 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 195 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 260 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 325 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 390 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 455 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 520 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 585 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 650 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 715 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 780 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 845 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 910 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 975 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1040 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1105 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1170 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1235 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1300 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1365 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1430 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1495 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1560 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1625 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1690 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1755 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1820 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1885 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 1950 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2015 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2080 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2145 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2210 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2275 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2340 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2405 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2470 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2535 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2600 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2665 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2730 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2795 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2860 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2925 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 2990 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3055 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3120 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3185 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3250 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3315 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3380 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3445 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3510 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3575 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3640 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3705 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3770 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3835 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3900 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 3965 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4030 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4095 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4160 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4225 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4290 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4355 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4420 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4485 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4550 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4615 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4680 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4745 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4810 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4875 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 4940 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5005 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5070 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5135 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5200 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5265 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5330 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5395 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5460 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5525 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5590 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5655 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5720 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5785 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5850 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5915 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 5980 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 6045 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90090 blen: 6110 + 25 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 0 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 65 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 130 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 195 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 260 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 325 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 390 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 455 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 520 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 585 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 650 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 715 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 780 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 845 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 910 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 975 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1040 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1105 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1170 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1235 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1300 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1365 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1430 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1495 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1560 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1625 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1690 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1755 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1820 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1885 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 1950 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2015 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2080 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2145 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2210 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2275 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2340 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2405 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2470 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2535 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2600 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2665 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2730 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2795 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2860 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2925 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 2990 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3055 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3120 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3185 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3250 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3315 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3380 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3445 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3510 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3575 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3640 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3705 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3770 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3835 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3900 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 3965 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4030 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4095 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4160 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4225 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4290 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4355 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4420 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4485 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4550 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4615 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4680 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4745 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4810 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 4875 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600 +0ms mediasoup:Worker worker process running [pid:42553] +492ms mediasoup:Worker createWebRtcServer() +2ms mediasoup:Channel request() [method:WORKER_CREATE_WEBRTCSERVER] +9ms mediasoup:Channel [pid:42553] RTC::WebRtcServer::WebRtcServer() | UDP socket send buffer size: 2000000, recv buffer size: 2000000 +1ms mediasoup:Channel [pid:42553] RTC::WebRtcServer::WebRtcServer() | TCP server send buffer size: 2000000, recv buffer size: 2000000 +0ms mediasoup:Channel request succeeded [method:WORKER_CREATE_WEBRTCSERVER, id:1] +0ms mediasoup:WebRtcServer constructor() +0ms // Here the user joins so a mediasoup Router + Transports + (Data)Producers/Consumers / are created and so on: cmd> cmd> cmd> cmd> cmd> cmd> cmd> mediasoup:Worker createRouter() +995ms mediasoup:Channel request() [method:WORKER_CREATE_ROUTER] +995ms mediasoup:Channel request succeeded [method:WORKER_CREATE_ROUTER, id:2] +0ms mediasoup:Router constructor() +0ms mediasoup:Router createAudioLevelObserver() +1ms mediasoup:Channel request() [method:ROUTER_CREATE_AUDIOLEVELOBSERVER] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_AUDIOLEVELOBSERVER, id:3] +0ms mediasoup:RtpObserver constructor() +0ms mediasoup:Router createActiveSpeakerObserver() +1ms mediasoup:Channel request() [method:ROUTER_CREATE_ACTIVESPEAKEROBSERVER] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_ACTIVESPEAKEROBSERVER, id:4] +0ms mediasoup:RtpObserver constructor() +1ms mediasoup:Router createDirectTransport() +1ms mediasoup:Channel request() [method:ROUTER_CREATE_DIRECTTRANSPORT] +1ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_DIRECTTRANSPORT, id:5] +1ms mediasoup:Transport constructor() +0ms mediasoup:DirectTransport constructor() +0ms mediasoup:Transport produceData() +0ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:6] +0ms mediasoup:DataProducer constructor() +0ms mediasoup:Router createWebRtcTransport() +54ms mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER] +52ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER, id:7] +1ms mediasoup:Transport constructor() +55ms mediasoup:WebRtcTransport constructor() +0ms mediasoup:Transport enableTraceEvent() +1ms mediasoup:Channel request() [method:TRANSPORT_ENABLE_TRACE_EVENT] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_ENABLE_TRACE_EVENT, id:8] +0ms mediasoup:Router createWebRtcTransport() +20ms mediasoup:Channel request() [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER] +17ms mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER, id:9] +0ms mediasoup:Transport constructor() +17ms mediasoup:WebRtcTransport constructor() +18ms mediasoup:Transport enableTraceEvent() +0ms mediasoup:Channel request() [method:TRANSPORT_ENABLE_TRACE_EVENT] +1ms mediasoup:Channel request succeeded [method:TRANSPORT_ENABLE_TRACE_EVENT, id:10] +0ms mediasoup:Transport consumeData() +4ms mediasoup:Channel request() [method:TRANSPORT_CONSUME_DATA] +3ms mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME_DATA, id:11] +1ms mediasoup:DataConsumer constructor() +0ms mediasoup:WebRtcTransport connect() +32ms mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +27ms mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:12] +1ms mediasoup:Channel [pid:42553] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' [hasUseCandidate:false, hasNomination:false, nomination:0] +3ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +2ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:WebRtcTransport connect() +101ms mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +95ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +143ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 242 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:42553] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' [hasUseCandidate:true, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:13] +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 67 bytes of DTLS data ready to be sent +3ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 129 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +1ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 385 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +1ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 45 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' [hasUseCandidate:false, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +0ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +1ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Transport produce() +282ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE] +5ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +211ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 242 bytes of DTLS data ready to be sent +0ms mediasoup:Worker (stdout) 000a90240 blen: 4940 + 65 +2s mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5005 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5070 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5135 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5200 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5265 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5330 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5395 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5460 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5525 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5590 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5655 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5720 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5785 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5850 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5915 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 5980 + 65 +2ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6045 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6110 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6175 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6240 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6305 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6370 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6435 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6500 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6565 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6630 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6695 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6760 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6825 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6890 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 6955 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7020 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7085 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7150 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7215 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7280 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7345 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7410 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7475 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7540 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7605 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7670 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7735 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7800 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7865 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7930 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 7995 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8060 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8125 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8190 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8255 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8320 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8385 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8450 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8515 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8580 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8645 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8710 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8775 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8840 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8905 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 8970 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9035 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9100 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9165 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9230 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9295 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9360 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9425 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9490 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9555 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9620 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9685 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9750 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9815 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9880 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 9945 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10010 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10075 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10140 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10205 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10270 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10335 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10400 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10465 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10530 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10595 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10660 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10725 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10790 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10855 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10920 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 10985 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11050 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11115 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11180 + 65 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11245 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11310 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11375 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11440 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11505 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11570 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11635 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11700 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11765 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11830 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11895 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 11960 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12025 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12090 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12155 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12220 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12285 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12350 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12415 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12480 + 65 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90240 blen: 12545 + 29 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 0 + 144 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 144 + 78 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 222 + 1245 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 1467 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 2791 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 4115 + 654 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 4769 + 657 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 5426 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 6750 + 119 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 6869 + 60 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 6929 + 12 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 242 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 538 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 6941 + 299 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a80000 blen: 7240 + 45 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 67 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 0 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 11 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 22 + 6 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 28 + 325 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 353 + 57 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 410 + 9 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 419 + 11 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a99170 blen: 430 + 6 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 129 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 73 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 385 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 117 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 85 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 297 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a903f0 blen: 0 + 45 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a90360 blen: 0 + 45 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a88000 blen: 0 + 157 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 0 + 144 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 144 + 78 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 222 + 1245 +1ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a88090 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 1467 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a88090 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 2791 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a88090 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 4115 + 654 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 4769 + 657 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a88090 blen: 0 + 1349 +0ms mediasoup:Worker (stdout) **** [mem_write] 0x600000a881b0 blen: 5426 + 1324 +0ms mediasoup:Worker (stdout) **** [mem_w +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +7ms mediasoup:Channel [pid:42553] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' [hasUseCandidate:true, hasNomination:false, nomination:0] +0ms mediasoup:Channel [pid:42553] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE, id:14] +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 67 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 129 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms mediasoup:Producer constructor() +0ms mediasoup:RtpObserver addProducer() +586ms mediasoup:Channel request() [method:RTPOBSERVER_ADD_PRODUCER] +2ms mediasoup:RtpObserver addProducer() +1ms mediasoup:Channel request() [method:RTPOBSERVER_ADD_PRODUCER] +1ms mediasoup:Channel request succeeded [method:RTPOBSERVER_ADD_PRODUCER, id:15] +0ms mediasoup:Channel request succeeded [method:RTPOBSERVER_ADD_PRODUCER, id:16] +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +6ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 385 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 45 bytes of DTLS data ready to be sent +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Transport produceData() +233ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +2ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:17] +1ms mediasoup:DataProducer constructor() +592ms mediasoup:Transport produceData() +8ms mediasoup:Channel request() [method:TRANSPORT_PRODUCE_DATA] +8ms mediasoup:Channel request succeeded [method:TRANSPORT_PRODUCE_DATA, id:18] +0ms mediasoup:DataProducer constructor() +8ms mediasoup:Transport consumeData() +1ms mediasoup:Channel request() [method:TRANSPORT_CONSUME_DATA] +0ms mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME_DATA, id:19] +0ms mediasoup:DataConsumer constructor() +523ms // Here I send a DataChannel message and is sent back to the client: cmd> cmd> cmd> cmd> cmd> mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +8s mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 57 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel notify() [event:DATAPRODUCER_SEND] +0ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE mediasoup:Channel [pid:42553] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +1ms RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE) mediasoup:Channel [pid:42553] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms mediasoup:Channel [pid:42553] RTC::DtlsTransport::OnTimer() | handshake is done so return +1ms

In next comment I will only show your [mem_write] logs affecting sslBioToNetwork.

ibc commented 7 months ago

mem_write logs with point this->sslBioToNetwork without calling BIO_reset(this->sslBioToNetwork):

**** [mem_write] 0x60000035c240 blen: 0 + 1349 +0ms
**** [mem_write] 0x60000035c240 blen: 1349 + 1349 +0ms
**** [mem_write] 0x60000035c240 blen: 2698 + 1349 +0ms
**** [mem_write] 0x60000035c240 blen: 4047 + 1349 +0ms
**** [mem_write] 0x60000035c240 blen: 5396 + 1349 +0ms
**** [mem_write] 0x60000035c240 blen: 6745 + 242 +0ms

mem_write logs with point this->sslBioToNetwork calling BIO_reset(this->sslBioToNetwork):

...

And I couldn't get those logs because... Honestly I don't know what I'm doing. I don't see those mem_write logs always. In fact they do NOT happen in most of cases. Here for example I've restarted the browser tab running mediasoup-demo so previous mediasoup Router is closed and a new one is created, new WebRtcTransport, etc. And I do NOT see those mem_write logs:

RTC::DtlsTransport::DtlsTransport() | ------- this->sslBioToNetwork address: 0x600000330240
  mediasoup:Channel request succeeded [method:ROUTER_CREATE_WEBRTCTRANSPORT_WITH_SERVER, id:7] +0ms
  mediasoup:Transport constructor() +65ms
  mediasoup:WebRtcTransport constructor() +0ms
  mediasoup:Transport enableTraceEvent() +0ms
  mediasoup:Channel request() [method:TRANSPORT_ENABLE_TRACE_EVENT] +3ms
  mediasoup:Channel request succeeded [method:TRANSPORT_ENABLE_TRACE_EVENT, id:8] +0ms
  mediasoup:Transport consumeData() +4ms
  mediasoup:Channel request() [method:TRANSPORT_CONSUME_DATA] +4ms
  mediasoup:Channel request succeeded [method:TRANSPORT_CONSUME_DATA, id:9] +1ms
  mediasoup:DataConsumer constructor() +0ms
  mediasoup:WebRtcTransport connect() +16ms
  mediasoup:Channel request() [method:WEBRTCTRANSPORT_CONNECT] +11ms
  mediasoup:Channel request succeeded [method:WEBRTCTRANSPORT_CONNECT, id:10] +0ms
  mediasoup:Channel [pid:45028] RTC::IceServer::HandleTuple() | transition from state 'new' to 'connected' [hasUseCandidate:false, hasNomination:false, nomination:0] +4ms
  mediasoup:Channel [pid:45028] RTC::WebRtcTransport::OnIceServerSelectedTuple() | ICE selected tuple +1ms
  mediasoup:Channel [pid:45028] RTC::WebRtcTransport::OnIceServerConnected() | ICE connected +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +1ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)

cmd> RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +235ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 1349 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 242 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms
  mediasoup:Channel [pid:45028] RTC::IceServer::HandleTuple() | transition from state 'connected' to 'completed' [hasUseCandidate:true, hasNomination:false, nomination:0] +0ms
  mediasoup:Channel [pid:45028] RTC::WebRtcTransport::OnIceServerCompleted() | ICE completed +1ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | DTLS timer set in 99ms +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 67 bytes of DTLS data ready to be sent +2ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 129 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +1ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 385 bytes of DTLS data ready to be sent +1ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 85 bytes of DTLS data ready to be sent +1ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == BIO_CB_WRITE
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SendDtlsData() | 45 bytes of DTLS data ready to be sent +0ms
RTC::DtlsTransport::onSslBioOut() | ----- operationType == (BIO_CB_RETURN | BIO_CB_WRITE)
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::SetTimeout() | timeout is 0, calling OnTimer() callback directly +0ms
  mediasoup:Channel [pid:45028] RTC::DtlsTransport::OnTimer() | handshake is done so return +0ms
ibc commented 7 months ago

I've also added this at the top of DtlsTransport::SendDtlsData():

long bioRead;
char* bioData{ nullptr };
bioRead = BIO_get_mem_data(this->sslBioToNetwork, &bioData);
MS_DUMP("---- BIO_get_mem_data(this->sslBioToNetwork): %ld", bioRead);

And it absolutely always returns 1:

RTC::DtlsTransport::SendDtlsData() | ---- BIO_get_mem_data(this->sslBioToNetwork): 1

So honestly I don't understand absolutely anything.

Docs:

`BIO_get_mem_data() returns the total number of bytes available on success, 0 if b is NULL, or a negative value in case of other errors.

ibc commented 7 months ago

If the problem doesn't occur for you, I'd be very curious where in this case that buffer is emptied

To be very clear about this, it's not that the issue doesn't occur for me. It's that I have no idea how to know if it is happening because the log you added in OpenSSL prints at completely unexpected times or doesn't not print at all (not even if 0 because I removed the if condition).

gkrol-katmai commented 7 months ago

Fascinating problem!

If you don't see the writes after removing the if when sending normal messages, it's possible that this is a completely different code path. Could it be that control messages, like the certificate and ACK packets are sent over a different channel from the actual data?

For me, BIO_get_mem_data(this->sslBioToNetwork) has also always returned 1, confusingly enough. And that also didn't make sense to me, so that's why I added that printf into the openssl code. That's the only place where I could actually see the length of the buffer increase.

Any plans to switch to a different SSL library by any chance? I'm not very impressed by the OpenSSL API and the code quality. And they've got a bad reputation with a lot of security problems.

I don't think I've got time today, but I may look into this some more next week. I'm very curious about what's going on!

ibc commented 7 months ago

If you don't see the writes after removing the if when sending normal messages, it's possible that this is a completely different code path. Could it be that control messages, like the certificate and ACK packets are sent over a different channel from the actual data?

Maybe.

Any plans to switch to a different SSL library by any chance? I'm not very impressed by the OpenSSL API and the code quality. And they've got a bad reputation with a lot of security problems.

Honestly not in the short term. In the past I did some research and couldn't find anything that could be used for proper DTLS+WebRTC (missing features such as SRTP keys negotiation over DTLS or DTLS timeout capabilities), so I gave up.

I don't think I've got time today, but I may look into this some more next week. I'm very curious about what's going on!

I'd appreciate if we could have a proper way to verify the leak so, having that, we can validate possible fixes. Right now I have a local branch which implements the PR that was reverted plus the BIO_reset(this->sslBioToNetwork) at the end of SendDtlsData(), but if we don't really know whether that fixes the problem or not then it's not good.

ibc commented 7 months ago

@gkrol-katmai, add fflush(stdout); after your printf in bss_mem.c and it will always print when expected.

ibc commented 7 months ago

Ok, so I can confirm that by calling BIO_reset(this->sslBioToNetwork) at the end of DtlsTransport::SendDtlsData() (in the code of this PR https://github.com/versatica/mediasoup/pull/1156), the leak goes away.

However I'm not confident. Are we completely sure that we must clear/free/release all the content in this->sslBioToNetwork BIO mem after DtlsTransport::SendDtlsData() has been called triggered by the OpenSSL onSslBioOut callback with BIO_CB_WRITE operation?

I mean, imagine that OpenSSL wants to send 2 DTLS messages (or 2 DTLS message fragments), first one is 1500 bytes long, second one is 500 bytes longs. Somehow OpenSSL writes both together in the BIO mem, however it invokes the onSslBioOut with BIO_CB_WRITE twice sequentially, one with len: 1500 and another one with len: 500.

If we follow the logic above and call BIO_reset(this->sslBioToNetwork) at the end of DtlsTransport::SendDtlsData(), then we are releasing 1500+500 bytes from the BIO mem rather than just the 1500 bytes that we have already sent to the endpoint. How can we know if that can happen or not?

ibc commented 7 months ago

I mean, imagine that OpenSSL wants to send 2 DTLS messages (or 2 DTLS message fragments), first one is 1500 bytes long, second one is 500 bytes longs. Somehow OpenSSL writes both together in the BIO mem, however it invokes the onSslBioOut with BIO_CB_WRITE twice sequentially, one with len: 1500 and another one with len: 500.

If we follow the logic above and call BIO_reset(this->sslBioToNetwork) at the end of DtlsTransport::SendDtlsData(), then we are releasing 1500+500 bytes from the BIO mem rather than just the 1500 bytes that we have already sent to the endpoint. How can we know if that can happen or not?

Ok, I'm adding proper logs and it looks safe. Indeed OpenSSL invokes the onSslBioOut with ALL the bytes that it has written into the BIO mem, so it's safe to call BIO_reset(this->sslBioToNetwork) after sending them to the endpoint:

RTC::DtlsTransport::DtlsTransport() | ------- this->sslBioToNetwork address: 0x6000028a0240 +350ms

RTC::DtlsTransport::SendDtlsData() | >>> 1349 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 1349 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 1349 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 1349 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 1349 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 1349 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 1349 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 1349 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 1349 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 1349 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 242 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 242 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 67 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 67 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 129 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 129 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 385 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 385 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 45 bytes of DTLS data ready to be sent +0ms
**** [mem_write] 0x6000028a0240 blen: 0 + 45 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 57 bytes of DTLS data ready to be sent +1ms
**** [mem_write] 0x6000028a0240 blen: 0 + 57 +0ms

RTC::DtlsTransport::SendDtlsData() | >>> 85 bytes of DTLS data ready to be sent +848ms
**** [mem_write] 0x6000028a0240 blen: 0 + 85 +1ms
ibc commented 7 months ago

So here we are: PR https://github.com/versatica/mediasoup/pull/1345

@gkrol-katmai @pnts-se would you like to take a look to it, please?