steep-balloon-41261
08/29/2023, 9:08 AMbest-parrot-43500
08/29/2023, 9:08 AMbest-parrot-43500
08/29/2023, 9:10 AMfancy-wire-61616
08/29/2023, 10:38 AMTrackStreamStateChanged here, but that is a binary thing and does not indicate if the layer has been changed due to bandwidth limitation.jolly-daybreak-70827
08/29/2023, 12:10 PMqualtityLimitationReason is bandwidth). However, in the production environment within Citrix, I never see an entry for the FHD stream.jolly-daybreak-70827
08/29/2023, 1:35 PMAug 28 14:19:11 a303-9011-0707 dwilivekit: 2023-08-28T14:19:11.939+0200#011DEBUG#011livekit#011sfu/streamtrackermanager.go:133#011StreamTrackerManager OnStatusChanged#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "layer": 1, "status": "stopped"}
Aug 28 14:19:11 a303-9011-0707 dwilivekit: 2023-08-28T14:19:11.941+0200#011INFO#011livekit#011sfu/streamtrackermanager.go:426#011available layers changed - layer gone#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "removed": 1, "availableLayers": [0]}
Aug 28 14:19:21 a303-9011-0707 dwilivekit: 2023-08-28T14:19:21.939+0200#011DEBUG#011livekit#011sfu/streamtrackermanager.go:133#011StreamTrackerManager OnStatusChanged#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "layer": 1, "status": "active"}
Aug 28 14:19:21 a303-9011-0707 dwilivekit: 2023-08-28T14:19:21.940+0200#011INFO#011livekit#011sfu/streamtrackermanager.go:393#011available layers changed - layer seen#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "added": 1, "availableLayers": [0, 1]}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.533+0200#011DEBUG#011livekit#011sfu/streamtrackermanager.go:133#011StreamTrackerManager OnStatusChanged#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "NR33yLhLQ-i6_gn-okXgMA", "pID": "PA_fKAfdUyz3iVu", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "mime": "video/vp8", "layer": 1, "status": "stopped"}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.533+0200#011INFO#011livekit#011sfu/streamtrackermanager.go:426#011available layers changed - layer gone#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "NR33yLhLQ-i6_gn-okXgMA", "pID": "PA_fKAfdUyz3iVu", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "mime": "video/vp8", "removed": 1, "availableLayers": [0]}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.533+0200#011INFO#011livekit#011sfu/forwarder.go:1209#011stream allocation: optimal#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "allocation": "VideoAllocation{pause: NONE, def: false, bw: 142381, del: -17086, rates: [[59657 87885 142381 0] [0 0 0 0] [0 0 0 0]], target: VideoLayer{s: 0, t: 3}, req: 0, max: VideoLayer{s: 1, t: 3}, dist: 0}"}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.533+0200#011DEBUG#011livekit#011sfu/downtrack.go:459#011sending PLI for layer lock#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "generation": 11, "layer": 0}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.533+0200#011DEBUG#011livekit#011buffer/buffer.go:354#011send pli#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "NR33yLhLQ-i6_gn-okXgMA", "pID": "PA_fKAfdUyz3iVu", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "mime": "video/vp8", "layer": 0, "ssrc": 3753353732, "force": false}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.734+0200#011DEBUG#011livekit#011sfu/downtrack.go:459#011sending PLI for layer lock#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "generation": 11, "layer": 0}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.775+0200#011INFO#011livekit#011sfu/forwarder.go:1461#011downgrading layer#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "current": "VideoLayer{s: 1, t: 3}", "target": "VideoLayer{s: 0, t: 3}", "max": "VideoLayer{s: 1, t: 3}", "layer": 0, "req": 0, "maxPublished": 1, "feed": 3753353732}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.775+0200#011DEBUG#011livekit#011sfu/forwarder.go:1370#011switching feed#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "from": 1219075716, "to": 3753353732}
Aug 28 14:19:36 a303-9011-0707 dwilivekit: 2023-08-28T14:19:36.775+0200#011DEBUG#011livekit#011sfu/downtrack.go:555#011forwarding key frame#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCRLR5EpcZ5UiK", "relayed": false, "layer": 0}
Aug 28 14:19:37 a303-9011-0707 dwilivekit: 2023-08-28T14:19:37.439+0200#011DEBUG#011livekit#011sfu/streamtrackermanager.go:133#011StreamTrackerManager OnStatusChanged#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "layer": 1, "status": "stopped"}
Aug 28 14:19:37 a303-9011-0707 dwilivekit: 2023-08-28T14:19:37.439+0200#011INFO#011livekit#011sfu/streamtrackermanager.go:426#011available layers changed - layer gone#011{"room": "ad97dc4d-f897-4cf5-b414-78d19f5010cf", "roomID": "RM_dyoqiEFb39Lh", "participant": "CRUIBmJqQFGGuV_-2C0QPg", "pID": "PA_jaRuGeYEeVKS", "remote": false, "trackID": "TR_VCQvrB6ikXDwuR", "relayed": false, "mime": "video/vp8", "removed": 1, "availableLayers": [0]}fancy-wire-61616
08/29/2023, 1:41 PM<chrome://webrtc-internas> . Like you mentioned, whether it is sending packets or not is determined by browser client doing bandwidth estimation and congestion control.
Maybe, in your production, the stream is not even started. I do not know exactly when the browser client decides to start a stream. It usually starts up all streams almost immediately at start up as far as I have seen.
The logs above is server doing tracking. As browser clients do not have any indication when it will stop/resume a simulcast layer (there are some proposals to indicate that, but not all clients are going to implement it uniformly at least for a while), server determines that looking for stoppages in packet flow.jolly-daybreak-70827
08/29/2023, 2:10 PMqualityLimitationReason field. However, in our prod system when it drops down a layer, the reason shows None (vs. the word Bandwidth in my simulated case)fancy-wire-61616
08/29/2023, 2:52 PMbest-parrot-43500
08/30/2023, 6:08 AMbest-parrot-43500
09/01/2023, 8:39 AMUpstream congestion control is done by browser/client.@fancy-wire-61616 could you help me clarify this. Is the congestion control done by the livekit client js or is it done into the baked in WebRTC stack of the browser?
fancy-wire-61616
09/01/2023, 8:40 AMbest-parrot-43500
09/01/2023, 8:40 AM