Comments (10)
It was probably introduced in early 2022 with the multi-stream feature. The bug only triggers when multi-stream is enabled, and it was enabled by default in on June 28 (#1912). I think the thread you linked to has multiple confounding issues (some of them fixed back in 2020/2021), but it's possible some of the more recent reports are related.
from jitsi-videobridge.
@bgrozev this patch fixes the problem 🎉
from jitsi-videobridge.
I agree with your expectation, but wasn't able to reproduce the problem in a unit test (and I don't think it's easy to simulate with jitsi-meet either). It would be helpful if you can give a way to reproduce with jitsi-meet, or in a unit test. See my attempt here:
https://github.com/bgrozev/jitsi-videobridge/tree/audio-only-test
from jitsi-videobridge.
@bgrozev Ok I will try to reproduce it soon.
I would like to clarify the case: it reproduces only if endpoint C
joins with video track and mutes them later. If it joins in audio only mode - JVB works as expected
from jitsi-videobridge.
@bgrozev in your attempt you create audio only participany with empty array of MediaSourceDesc
.
I guess that in my case Endpoint
has muted MediaSourceDesc
in mediaSources list and getEffectiveContraints ignores this to determine which sources sould be forwarded
from jitsi-videobridge.
@bgrozev I found a way to reproduce the problem on meet.jit.si:
- Open 3 tabs with url: https://meet.jit.si/blablabla#config.#config.channelLastN=1. All tabs will ask JVB to receive lastN=1
- Join on all tabs with active cameras and muted mic
- Switch to tab 2, unmute mic and say something to set dominant speaker
- Tab 1 receive from JVB (meet.jit.si uses source signaling and messages are different, but it does not matter)
{"colibriClass":"ForwardedSources","forwardedSources":["%tab-B-source-name%"]}
Correct.
- Mute mic on tab 2, switch to tab 3, mute video and unmute mic (to set new dominant speaker).
- Tab 1 receives empty forwarded sources:
{"colibriClass":"ForwardedSources","forwardedSources":[]}
PS: I am using Chrome devtools to inspect JVB bridge channel messages
from jitsi-videobridge.
@bgrozev I found a way to reproduce the problem on meet.jit.si:
I can also reproduce on meet.jit.si. After testing a few versions I think I somehow accidentally fixed it in #1963. 🤦
Can you check if you see the problem on beta.meet.jit.si? Does the problem still occur in your application with jvb after #1963? Note that your app needs to notify jvb that a source was muted by sending something like this (like jitsi-meet does)
{"colibriClass":"SourceVideoTypeMessage","sourceName":"1d98d1eb-v0","videoType":"none"}
Edit: I think I see why it was broken: ConferenceSpeechActivity
used Endpoint.videoType
which was not updated when a source's video type changed.
from jitsi-videobridge.
@bgrozev I can confirm that problem not reproduces on beta.meet.jit.si and in 2.2-57-g1158321d
version. Thank you!
There is an understanding how long this problem exists? It may be part of long standing issue with inactive status, because JVB not forwarding video participants in priority of participants with muted video.
from jitsi-videobridge.
@bgrozev I found similar behaivour in JVB with enabled multistream mode. It occurs when one of videostreams of participant goes to muted state.
One of participants sends 2 streams (desktop + camera).. Remote participant ask 3 lastN
{
"colibriClass":"ReceiverVideoConstraints",
"lastN":3,
"defaultConstraints":{"maxHeight":180},
"constraints":
{
"55952e51-v1":{"maxHeight":2160},
"55952e51-v0":{"maxHeight":180}
},
"onStageSources":["55952e51-v1","55952e51-v0"],
"selectedEndpoints":[]
}
JVB asnwers correct and forward 3 last-n video streams
{
"colibriClass":"ForwardedSources",
"forwardedSources":["55952e51-v1","55952e51-v0","ad0f89aa-v0"]
}
If I mute 55952e51-v0
source, JVB start sending only 2 last-n streams, but conference has more participants with unmuted videos:
{
"colibriClass":"ForwardedSources",
"forwardedSources":["55952e51-v1","ad0f89aa-v0"]
}
from jitsi-videobridge.
Thanks for the details, I think I have a fix. The code which moves the disabled streams down the list (ConferenceSpeechActivity) works at the endpoint and since your endpoint hasVideoAvailable
it stays high in the list. We then just concatenate all endpoints' sources which leaves a disabled source high in the list.
Would you be able to test #1989?
from jitsi-videobridge.
Related Issues (20)
- Question on "Improving WebRTC Call Quality with Machine Learning"
- jvb: false Warning: [...] thread limit null (hard null). These values are too low [...]
- Jigasi is not working after Updating from jitsi-videobridge2=2.2-45* to jitsi-videobridge2_2.2-61* HOT 1
- Bug with Jitsi Videobridge and Jigasi still exists and is not fixed HOT 1
- AV1 support? HOT 17
- Potential bug causing ReceiverConstraintsMap's maxHeight not being updated HOT 1
- Connection Idle Timeout
- Late joiners not receiving remote tracks HOT 7
- Deploying multiple video bridges does not work properly HOT 3
- The Videbridge needs a long time to fix connection problems to the XMPP server. HOT 8
- What happened to COLIBRI documentation? HOT 1
- Collibri relay ws connection problem HOT 3
- jvb HeapDumpOnOutOfMemoryError HOT 1
- JVB drops service after one minute with Failed to run health check: singlePortHarvesters must not be null HOT 1
- How to monitor Video Bridge using Prometheus/ Blackbox exporter? HOT 3
- Does initial-last-n actually works? HOT 10
- Crashes on Browser (Tabs) when screensharing / "Colibri websocket error: null" shown on JVB when tcp websocket connection is unexpectedly aborted (client) HOT 5
- jitsi-video bridge starting error. HOT 6
- No audio in either direction HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jitsi-videobridge.