Comments (11)
chatting with emcho that's probably not a bug but a result of the rtcp termination strategy.
from jitsi-videobridge.
An audio RTP packet sent by Chrome contains the audio level of the samples carried by the RTP packet. Videobridge looks at the audio level upon the receipt of the RTP packet and, if the audio level indicates that the RTP packet was generated by a muted audio source, Videobridge drops the RTP packet in order to optimize the overall performance (e.g. the RTP packet is not even decrypted). In such a case the audio RTP packet does not even reach the RTP stack of Videobridge. Could that be the cause of the "packet loss"?
from jitsi-videobridge.
lyubomir: yes. I suppose the behaviour is ok for the default termination strategy even (and makes alot of sense in general. I'll see if I can document that somewhere (possibly in the rtcp termination strategy doc).
from jitsi-videobridge.
IMO this should not be reported as lost, it sounds more like a discarded. Since the audio is muted, it wouldn't matter to the congestion control. But it may result in a slow start when the RTP resumes and what interval the RTCP RR covers.
My other concern is that something in the bridge pipeline is doing DPI (or skipping ahead) and dropping a packet before it arrives into the RTP stack, ergo messing with the RTCP RR.
from jitsi-videobridge.
We drop silence packets before decryption so that they don't waste resources. I am not sure if we took care of bubbling up an empty packet when we do that but we should. We'll check this next week.
from jitsi-videobridge.
Another clarification (nothing to do with RTCP or indicated losses): why is the muted endpoint sending audio? isn't there VAD and Comfort Noise packets sent instead? Or is the bridge interpreting from client audio level that there is no speech?
from jitsi-videobridge.
As I said earlier in this issue, audio RTP packets marked by the sender as generated from a muted audio source are dropped and do NOT reach the RTP stack (in any form). Our RTP stack will discard 'empty' RTP packets as bad early in its processing anyway.
from jitsi-videobridge.
@lyubomir yes, that's also what I was saying. What I was referring to is that I think we would report the gap in sequence number as packet loss in the SRs/RRs that we send (right?). I think that ideally we should be:
a) not reporting these packets as lost because they aren't
b) potentially not reporting them as sent either but I am not sure if that can work well without seq num overwrites.
why is the muted endpoint sending audio?
The endpoint being Chrome you may want to ask the question on discuss-webrtc. Personally I don't see a strong case for not sending it. Muting is about sending silence by definition so I don't see a problem with this. But again, this is a Chrome matter and not a JVB one.Or is the bridge interpreting from client audio level that there is no speech?
Yes. We are heavily relying on RFC6464 ssrc-audio-level for that sort of stuff (as for dominant speaker detection, last n, adaptive last n and simulcast).
from jitsi-videobridge.
What does the JVB do to the associated video? Is the RTCP RR related to the video also reporting losses?
I am looking at this from a sender-driven congestion control perspective, i.e., what will the sender do in response to the losses reported in RTCP RR (of both audio and video).
from jitsi-videobridge.
What does the JVB do to the associated video?
Nothing. At least not as a direct consequence. However, when last N is enabled, silence on a specific audio stream may lead to the corresponding video stream not being re-sent to some participants
Is the RTCP RR related to the video also reporting losses?
Hm? No, why would it do that? The video stream is being received and processed.
I am looking at this from a sender-driven congestion control perspective, i.e., what will the sender
do in response to the losses reported in RTCP RR (of both audio and video).
It may try to adjust its audio sending bitrate ... obviously this wouldn't be a good thing so we should look at it at some point, but I don't believe it's too much of an issue right now. I don't think endpoints do this that much for audio.
... it may also trigger a circuit breaker ... but given how I generally consider them a bad idea, I am not particularly worried about any problems that we may cause with those. ;-)
from jitsi-videobridge.
All related issues have been fixed and if there's something left feel free to enter a new specific ticket indicating only the remaining problem.
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
- Temporarily failing bridge healthcheck permanently leaves Jitsi without any operational bridges 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.