profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/ggarber/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Gustavo Garcia ggarber Spain https://twitter.com/anarchyco https://twitter.com/anarchyco https://rtcbits.blogspot.com https://kalimotxocoding.blogspot.com

fippo/rtcstats-server 31

Server for https://github.com/fippo/rtcstats

ggarber/cmake-bootstrap 4

CMake project template with C++11 and gtest support

ggarber/babybits 1

babybits

ggarber/backbone 1

Give your JS App some Backbone with Models, Views, Collections, and Events

ggarber/connfu-net 1

.net connfu client

ggarber/django-background-task 1

A database-backed work queue for Django

ggarber/egosfera 1

egosfera platform

ggarber/eventmachine-tail 1

Ruby EventMachine file tailing and friends. 'gem install eventmachine-tail' to install.

ggarber/adapter 0

Shim to insulate apps from spec changes and prefix differences. Latest adapter.js release:

push eventggarber/mediasoup

Gustavo Garcia

commit sha 25544b64545442f175fae70e83fc64bda7606173

Fix whitespaces

view details

push time in 6 days

PR opened versatica/mediasoup

Fixes for active speaker observer

Changes:

  • Fix the case of audio not received every 20 ms (f.e. if producer is paused, dtx is used or packetization time is more than 20ms). In that case we need to update multiple entries in the audio levels buffer. For example if we receive one packet every 100ms we update 5 slots. Otherwise the algorithm is extremely low on detecting changes in those cases.
  • The algorithm was developed by jitsi to use volume and not audio levels (volume = 127 - level). That's fixed in this PR and I think the results should be better now.
  • Optimize storage of audio levels to use a circular buffer and not have to do a memmove for every audio packet received.
  • All the buffers used (immediates, mediums, longs, scores, levels....) were not initialized to 0s and we had two steps (initialization + resize) instead of doing the resizing during the initialization.
+38 -33

0 comment

2 changed files

pr created time in 8 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha 95e752dd0a23c276bb4929a481b2d52fdf5d04fd

Fixes for active speaker observer

view details

push time in 8 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha a31c7b163c8df935159c24e36ead6f32232309c0

Fixes for active speaker observer

view details

push time in 8 days

create barnchggarber/mediasoup

branch : dominant_fixes

created branch time in 10 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha 92c11ffd6d53d7ea64884bfa484281a9c5584ae8

Add rust support

view details

push time in 12 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha ab6325d8d184aff8a76eb2999621700ffde71ce1

Fix lint

view details

push time in 12 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha a523408d59f9074d4fddb2740ce728d3aae5e26a

Fix comments about unused vars and use of deque

view details

push time in 13 days

Pull request review commentversatica/mediasoup

Add packetLoss stats to transport

 namespace RTC 	{ 		MS_TRACE(); +		// Update packet loss history+		size_t expected_packets = feedback->GetPacketStatusCount();+		size_t lost_packets = 0;+		for (const auto& result : feedback->GetPacketResults())+		{+			if (!result.received)+				lost_packets += 1;+		}+		this->UpdatePacketLoss(static_cast<double>(lost_packets) / expected_packets);+ 		this->rtpTransportControllerSend->OnTransportFeedback(*feedback); 	} +	void TransportCongestionControlClient::UpdatePacketLoss(double packetLoss)+	{+		// Add the score into the histogram.+		if (this->packetLossHistory.size() == PacketLossHistogramLength)+			this->packetLossHistory.erase(this->packetLossHistory.begin());

I used the same approach used for the scores history in RtpStream.hpp for consistency. std::vector<uint8_t> scores;

I will change it in this PR to use std::queue

ggarber

comment created time in 18 days

PullRequestReviewEvent

Pull request review commentversatica/mediasoup

Add packetLoss stats to transport

 namespace RTC 	{ 		MS_TRACE(); +		// Update packet loss history+		size_t expected_packets = feedback->GetPacketStatusCount();+		size_t lost_packets = 0;+		for (const auto& result : feedback->GetPacketResults())+		{+			if (!result.received)+				lost_packets += 1;+		}+		this->UpdatePacketLoss(static_cast<double>(lost_packets) / expected_packets);+ 		this->rtpTransportControllerSend->OnTransportFeedback(*feedback); 	} +	void TransportCongestionControlClient::UpdatePacketLoss(double packetLoss)+	{+		// Add the score into the histogram.+		if (this->packetLossHistory.size() == PacketLossHistogramLength)+			this->packetLossHistory.erase(this->packetLossHistory.begin());++		this->packetLossHistory.push_back(packetLoss);++		/*+		 * Scoring mechanism is a weighted average.+		 *+		 * The more recent the score is, the more weight it has.+		 * The oldest score has a weight of 1 and subsequent scores weight is+		 * increased by one sequentially.+		 *+		 * Ie:+		 * - scores: [1,2,3,4]+		 * - this->scores = ((1) + (2+2) + (3+3+3) + (4+4+4+4)) / 10 = 2.8 => 3+		 */++		size_t weight{ 0 };+		size_t samples{ 0 };+		double totalPacketLoss{ 0 };++		for (auto packetLossEntry : this->packetLossHistory)+		{+			weight++;+			samples += weight;+			totalPacketLoss += weight * packetLossEntry;+		}++		[[maybe_unused]] double previousPacketLoss = this->packetLoss;

It was used for a log that I ended up removing, I will remove the calculation. thx

ggarber

comment created time in 18 days

PullRequestReviewEvent

PR opened versatica/mediasoup

Add packetLoss stats to transport

One common requirement is to monitor the quality of the user's connections to notify the user and the rest of participants when their connections are not good enough so that they can understand any audio/video issue they can experience during conversations.

This is typically based on packetLoss and/or roundTripTime.

With existing APIs those stats are available per consumer and producer so the application could request all/some of them and aggregate the stats but that can be more efficient and simpler if some of those stats are exposed at transport level.

This PR adds packetLoss as a stat at transport level. The application can retrieve this metric every X seconds and notify the user when its uplink or downlink is bad and also notify rest of participants about it.

The implementation is based on transportCc feedback messages (comparing expected and received values and averaging last 24 of those measurements) so these new stats are only available when transportCC is enabled.

+121 -3

0 comment

5 changed files

pr created time in 19 days

push eventggarber/mediasoup

Gustavo Garcia

commit sha 81c482d8b89647444ef77d60b12141c0d1dd473d

Add packetLoss stats to transport

view details

push time in 19 days

create barnchggarber/mediasoup

branch : transport_pl_stats

created branch time in 19 days

push eventhopin-team/mediasoup-client

Gustavo Garcia

commit sha c2c27fcc108b3e1a79828cf0f7fc329aba27c6c5

Remove console logs and Chrome92 references used for testing

view details

push time in a month

PR opened versatica/mediasoup-client

PoC Add support for concurrent handler operations

Right now every time there is a change in the number of consumers or producers that requires an additional offer/answer renegotiation in the PeerConnection and those operations are serialized (executed sequentially) having to wait for the finish of the previous one to start the next one.

Because of that joining a room with many participants is a very slow process right now. For example joining a room with 80 participants (160 consumers) takes 30 seconds in my laptop. To make things worse it looks like renegotiations take longer the more consumers you have so having 100 participants can take more than 60 seconds some times.

Most (all?) those operations can be done in parallel adding multiple consumers/producers in a single offer/answer negotiation. With this change the same test joining a room with 80 participants takes 3 seconds instead of 30 seconds in my laptop.

This PR is only a PoC adding some support to add consumers concurrently in Chrome74 handler implementation. If this is a good feature to have and there is consensus on the high level design I can work on cleaning up the implementation and adding support to remove consumers concurrently and also for producers and data channels (although the most important case is probably the consumers because of the use case of joining a room with lot of participants).

The way it is implemented it doesn't need to be supported in all the handlers, old handlers can stay the way they are even if they are not as optimal as the new ones.

+149 -82

0 comment

3 changed files

pr created time in a month

create barnchhopin-team/mediasoup-client

branch : feat/concurrent

created branch time in a month

create barnchhopin-team/mediasoup-client

branch : concurrent

created branch time in a month

fork ggarber/mediasoup-client

mediasoup client side JavaScript library

https://mediasoup.org

fork in a month

push eventggarber/mediasoup

Steve McFarlin

commit sha 997cac3c305e0a63430acacd41bc0b04c377bb56

Fix formatting

view details

Gustavo Garcia

commit sha 211c555b72c71a19690db3b41ec21796ff245d42

Rust ActiveSpeakerObserver implementation Merge remote-tracking branch 'ggb/steve-v3-dominant-speaker' into v3-dominant-speaker

view details

SteveMcFarlin

commit sha b5400302a52eed56d63bb6098bca1a49a60468f9

Update worker/src/RTC/ActiveSpeakerObserver.cpp Co-authored-by: José Luis Millán <jmillan@aliax.net>

view details

Steve McFarlin

commit sha 7d63a6a70d97e11534f7e16cd13173a275e68093

Guard against producer that is not present in map.

view details

Steve McFarlin

commit sha feb39aeb75954422ea3e8775f8d3d123b4ad59d9

Remove unused temporary.

view details

Steve McFarlin

commit sha 1014cd0cd10cfadcf6bb442ebf3f65a0b6f0cdaf

Fix code

view details

Iñaki Baz Castillo

commit sha 94721774919ba1ad53102e8a768814e6a3d42192

Update src/ActiveSpeakerObserver.ts

view details

Iñaki Baz Castillo

commit sha e17eecfed7de2a106a4a173a8d6efd4dfc7bc5d1

Update src/ActiveSpeakerObserver.ts

view details

Iñaki Baz Castillo

commit sha 52b848cefa18627cdcef2eea1652f0df2929d42d

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 40a6ef95199089f4952179cf9bc5be77b820be6a

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 7feda354e8d39ba25c2cea71820dcac5a61d5041

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha bc9c12211cf8b2967e13a16f7a98d06c0c35414f

Apply suggestions from code review

view details

Iñaki Baz Castillo

commit sha d914a5d8d763b7dc84fa9e4d82cb2177ee076ac3

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 91a7ea40b478879fcde54dbb4498df792843de72

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 94cc4256331d30c6d75223a6bd725648395fffa2

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 18e5067ba650309b33dcd90025ac639696665d82

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha cac4bf4d991bd0aab15eb6e6f250e20b8638b1b3

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 771f74d9e7cfc673f29226cd83a4f5bb8ece05bd

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha c1897fde01d423bc83a8aa0684ff30afc4ca252f

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

Iñaki Baz Castillo

commit sha 9b1f1f171d82e68eeff606422cd01e47367e3466

Update worker/src/RTC/ActiveSpeakerObserver.cpp

view details

push time in 2 months

startedVolcomix/virtual-background

started time in 2 months

push eventggarber/mediasoup

Gustavo Garcia

commit sha 4c608ca515d12fcdbf3af4673ae7473b46f60b28

Add rust module support for active speaker observer

view details

push time in 2 months

push eventggarber/mediasoup

Gustavo Garcia

commit sha dd73a3820a796e8ae2ff8ad160b5b7ffeb0f374f

Add rust module support for active speaker observer

view details

push time in 2 months

create barnchggarber/mediasoup

branch : steve-v3-dominant-speaker

created branch time in 2 months

push eventggarber/mediasoup

Iñaki Baz Castillo

commit sha 4fb1400f376a900768a3ef25a663b82b676f8098

fuzzer: add corpora stuff (make @fippo happy)

view details

Iñaki Baz Castillo

commit sha 91b3fa4c13d09313a54377a36876dd074e01297a

worker/Makefile: s/fuzzer-exec/fuzzer-run/g

view details

Iñaki Baz Castillo

commit sha 3f7c7f195f518b5997b179a3765724d1585ad339

fuzzer: paying with fuzzer.cpp

view details

Iñaki Baz Castillo

commit sha 84dcd22aad2ce1bb1cc4fc5528e9be9efd605b91

fuzzer: This is a non stop

view details

Iñaki Baz Castillo

commit sha 38e2301970fe28a71880408d3daa7afc18620055

May fix #240

view details

Iñaki Baz Castillo

commit sha bdb59d489c13980a49e369029a73b9052a453a15

Add more fuzzer crash reports

view details

Iñaki Baz Castillo

commit sha ddeb66bcc5dfbb41e4e3d5517bce88496cb6d70d

More fuzzer crash reports

view details

Iñaki Baz Castillo

commit sha 86f353f35d1bfc7207d263d332c91c647e752a79

fuzzer: Don't forze `fuzzer/new-corpus` as first directory because it makes it impossible to pass a crash report file as single argument.

view details

Iñaki Baz Castillo

commit sha d052fd64a591654bf27a7add7ff48ec13c728955

fuzzer: simplify Docker stuff

view details

Iñaki Baz Castillo

commit sha de8f15b982e604e5f1baeebe1667a6a8f9f79fb7

Stun::Parse(): Fix wrong memory access (fix #244)

view details

Iñaki Baz Castillo

commit sha 81b728c35d8d9ff0346eb437a9c8d1046ab68a13

apply gulp format

view details

Iñaki Baz Castillo

commit sha 8bd36c471ff4e87aade87152f1b8ab50e3f8a8b0

Add fuzzer crash reports

view details

Iñaki Baz Castillo

commit sha 0cadf998f1c4ca934c81c3df56edf98f56ecafe4

fuzzer: Delete crash reports until we know who to reuse them

view details

Iñaki Baz Castillo

commit sha c84399c3efb7d16a8e707e48a0d116a6e81ffb0a

RTCP/FeedbackPsRemb: it seems to fix issue #246 but not 100% sure sue to #243

view details

Iñaki Baz Castillo

commit sha 37f20b2db300c07e73cfc205da2101be220bf8a5

Related to #246: verify that len in FeedbackPsRembPacket::Parse() matches the total REMB packet len

view details

Iñaki Baz Castillo

commit sha 5a5202840c48180ca294bcec4cb2aa097c930d25

fuzzer: run the Docker container with --cap-add SYS_PTRACE to make it possible to inspect memory leaks (related to #243)

view details

Iñaki Baz Castillo

commit sha 597029a44b293028c058914bc69f4acf83e7eba6

fuzzer: cosmetic

view details

Iñaki Baz Castillo

commit sha b9c4980f1d3cc39f50ac92eaffb0862fa03e6634

RTCP::ReceiverReportPacket::Parse(): Ensure there is space for the SSRC of the packet sender.

view details

Iñaki Baz Castillo

commit sha 2a14b5707e55e7885db71f3fcea300c0dc26996e

gyp stuff: cosmetic

view details

Iñaki Baz Castillo

commit sha c6caafb01e325e053162a8b061a1c8a9e7036d84

fuzzer: much more doc

view details

push time in 2 months

startedisaacs/async-cache

started time in 3 months