Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Codec issues: H264 vs VP8 #981

Closed
cedricroijakkers opened this issue Mar 11, 2021 · 24 comments
Closed

Codec issues: H264 vs VP8 #981

cedricroijakkers opened this issue Mar 11, 2021 · 24 comments

Comments

@cedricroijakkers
Copy link
Contributor

I've noticed some interesting behaviour. Lately, I've been experimenting with the codec settings in the deployment, notably the following three environment variables:

ENABLE_CODEC_VP8
ENABLE_CODEC_VP9
ENABLE_CODEC_H264

Right now, I have it set to the following:

ENABLE_CODEC_VP8="false"
ENABLE_CODEC_VP9="false"
ENABLE_CODEC_H264="true"

The reason here being that we use Jitsi mostly for voice and screen sharing, and the occasional video. I've noticed that the H264 coding yields the sharpest screen share image without flickering.

Using VP8 only:

  • Screen sharing is pixelated. It gets sharp after about 10 seconds, but returns to pixels when the screen is scrolled.
  • Camera video is very sharp.

Using H264 only:

  • Screen sharing is very sharp, and even when scrolling the screen share remains very sharp.
  • Camera video is very pixelated. Even though my Jitsi says I'm uploading 1280x720 at 30 frames per seconds, everybody else sees video that looks like 640x360 or even less sharp.

Using VP9 only:
For some reason, this falls back to VP8.

Enabling all three codecs:
This also falls back to VP8.

Since we need to have sharp screen sharing and camera video is just for the occasional lulz, the codec is set to H264, and VP8 and VP9 are off.

Now, this is where it gets interesting: this is all using the Jitsi Meet Electron desktop app. Also when using a Chrome-based browser, the behaviour is like this. But when I switch to Firefox, even when using H264 the video is crystal clear in 720p and also the screen sharing is crisp. So it seems like Firefox is compressing the video differently? But using the Electron app is much more convenient, so Firefox rarely gets used.

So I have some questions:

  • Why is H264 so much better than VP8 for screen sharing and horrible for video (in Chrome and Electron)?
  • Why is VP8 so much better for video and horrible for screen sharing (in Chrome and Electron)?
  • Is it possible to have a different codec when using the camera as opposed to when sharing the computer screen (to use the best of both worlds)?
  • Why is H264 video in Firefox so much better than H264 video in Chrome (and Electron)?
@saghul
Copy link
Member

saghul commented Mar 11, 2021

What Electron app / Chrome versions did you test and on what operating system? Depending on the platform HW acceleration may kick in for H264.

@cedricroijakkers
Copy link
Contributor Author

I'm running Manjaro Linux here, so pretty much the latest versions of everything:

  • Electron app 2.6.1
  • Chrome/Chromium: 89.0.4389.82
  • Firefox: 86.0

I'm not sure that hardware acceleration works on Linux, I do have a rather high powered GPU, and it is working, but I know Chrome has some limitations. But on the other hand, my CPU has more than enough power to produce quality H264, so I don't see a reason why the image should be so bad.

@cedricroijakkers
Copy link
Contributor Author

cedricroijakkers commented Apr 9, 2021

In the mean time, I have checked some extra things. You triggered me with your remark on hardware acceleration. Since I'm working on Linux, this is a bit of an issue in all things related Chromium.

So I've installed some extra packages, checked my drivers, and set some Chromium flags. Right now I've got full hardware acceleration working in all my Chromium-based browsers (tested in Chrome, Chromium and Brave):

My brave://gpu/ and chrome://gpu/ now says:

Graphics Feature Status
Canvas: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Enabled
Out-of-process Rasterization: Hardware accelerated
OpenGL: Enabled
Rasterization: Hardware accelerated
Skia Renderer: Enabled
Video Decode: Hardware accelerated
Vulkan: Enabled
WebGL: Hardware accelerated
WebGL2: Hardware accelerated

Yet, when I start h264 video using any of these browsers, I get a very pixelated video. Even though Jitsi Meet itself reports that I'm uploading at around 3000 kbits/second. Using Firefox, I get the same bitrate, and a crystal clear image, even on full screen.

Interestingly enough, if I share screen in Chromium, I get a crystal clear image at around 300 kbits/second.

Using the Jitsi Meet Desktop app, which is for all intents and purposes a Chromium browser, I get the exact same behaviour as Chrome/Chromium/Brave.

What is Firefox doing so much better here? What am I missing?

Update: Just did one more check. I can see that Firefox is uploading video in 1280x720 (which is my laptop camera resolution) all the time, while Chromium always picks 320x180, no matter what the bandwidth is. Except when sharing screen, then in Chromium the resolution goes up to 1668x938 instantly (higher than what my camera can deliver!), resulting in a nice readable screen.

@saghul
Copy link
Member

saghul commented Apr 9, 2021

Chromium always picks 320x180

That suggests your bridge channel is not working. So the resolution doesn't ramp up. Can you see error messages regarding the bridge channel not being open?

@cedricroijakkers
Copy link
Contributor Author

When joining the room, I get the following logging when I search for bridge:

2021-04-09T11:15:40.795Z [modules/RTC/TraceablePeerConnection.js] <A.setSenderVideoDegradationPreference>:  Setting video sender degradation preference on TPC[1,p2p:false] to maintain-framerate
Logger.js:154 2021-04-09T11:15:40.798Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:19:11.941Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 2160
Logger.js:154 2021-04-09T11:19:11.943Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=2160px
Logger.js:154 2021-04-09T11:19:12.007Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:19:13.772Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T11:19:13.774Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T11:19:13.869Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:20:39.546Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 2160
Logger.js:154 2021-04-09T11:20:39.548Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=2160px
Logger.js:154 2021-04-09T11:20:39.642Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:20:39.647Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":30,"preferredHeight":360}
Logger.js:154 2021-04-09T11:20:41.216Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T11:20:41.217Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T11:20:41.261Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":30,"preferredHeight":360}
Logger.js:154 2021-04-09T11:20:41.848Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}

As I interpret it, the connection to the bridge is fine, but it gets the max resolution of 180px from the server. After some time, I get the following logging:

2021-04-09T11:15:40.795Z [modules/RTC/TraceablePeerConnection.js] <A.setSenderVideoDegradationPreference>:  Setting video sender degradation preference on TPC[1,p2p:false] to maintain-framerate
Logger.js:154 2021-04-09T11:15:40.798Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:19:11.941Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 2160
Logger.js:154 2021-04-09T11:19:11.943Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=2160px
Logger.js:154 2021-04-09T11:19:12.007Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:19:13.772Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T11:19:13.774Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T11:19:13.869Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:20:39.546Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 2160
Logger.js:154 2021-04-09T11:20:39.548Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=2160px
Logger.js:154 2021-04-09T11:20:39.642Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":-1,"preferredHeight":-1}
Logger.js:154 2021-04-09T11:20:39.647Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":1080,"preferredFps":30,"preferredHeight":360}
Logger.js:154 2021-04-09T11:20:41.216Z [modules/xmpp/JingleSessionPC.js] <w.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=f1r0hbntnht3k] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T11:20:41.217Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T11:20:41.261Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":30,"preferredHeight":360}
Logger.js:154 2021-04-09T11:20:41.848Z [modules/RTC/RTC.js] <A._senderVideoConstraintsChanged>:  Remote max frame height received on bridge channel:  {"idealHeight":360,"preferredFps":-1,"preferredHeight":-1}

So it should be able to raise the resolution if I'm reading this right? Yet, it doesn't.

@saghul
Copy link
Member

saghul commented Apr 9, 2021

Logger.js:154 2021-04-09T11:20:41.217Z [modules/RTC/BridgeChannel.js] <l.sendReceiverVideoConstraintMessage>: Sending ReceiverVideoConstraint with maxFrameHeight=180px

You are requesting the bridge to send you 180p. Is this Jitsi Meet or your own client? Can you try to build unstable images? Lots of work has happened in that area recently.

@cedricroijakkers
Copy link
Contributor Author

cedricroijakkers commented Apr 9, 2021

I've built a set of images, and deployed them (slick looking new interface btw).

With two people in the call, the quality starts as SD but quickly ramps up to HD. But as soon as a third person joins (i.e. no more p2p connection) the quality instantly drops to LD.

When connecting the third client:

2021-04-09T12:37:13.275Z [modules/RTC/BridgeChannel.js] <WebSocket.e.onopen>:  websocket channel opened
Logger.js:154 2021-04-09T12:37:13.277Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T12:37:13.278Z [modules/RTC/BridgeChannel.js] <p.sendSelectedEndpointsMessage>:  Sending selected endpoints: 9b0461ad,9e4d4c67,fc2c34cc.
Logger.js:154 2021-04-09T12:37:13.278Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T12:37:13.284Z [modules/RTC/BridgeChannel.js] <WebSocket.e.onmessage>:  Received ServerHello, version=undefined.
Logger.js:154 2021-04-09T12:37:13.337Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px

And after a bit:

2021-04-09T12:37:12.953Z [features/video-quality] <Object.D.d.register.deepEquals [as listener]>:  Video quality level for thumbnail height: 160, is: 180, override: false, max full res N: 2
Logger.js:154 2021-04-09T12:37:13.276Z [modules/xmpp/JingleSessionPC.js] <C.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=81t00pd5t7je] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T12:37:13.277Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T12:37:13.278Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T12:37:13.337Z [modules/xmpp/JingleSessionPC.js] <C.setReceiverVideoConstraint>:  JingleSessionPC[p2p=false,initiator=false,sid=81t00pd5t7je] setReceiverVideoConstraint - max frame height: 180
Logger.js:154 2021-04-09T12:37:13.337Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=180px
Logger.js:154 2021-04-09T12:37:13.340Z [modules/RTC/TraceablePeerConnection.js] <A.setSenderVideoConstraint>:  TPC[1,p2p:false] senderVideoMaxHeight: 2160

The quality remains at 180p all the time however.

@saghul
Copy link
Member

saghul commented Apr 9, 2021

How large is your viewport? When it tile view mode (the default for > 2 participants) we use the tile size as the hint for the bridge.

@cedricroijakkers
Copy link
Contributor Author

All my browsers are full screen, 1920x1080.

@saghul
Copy link
Member

saghul commented Apr 9, 2021

Paging @jallamsetty1

@jallamsetty1
Copy link
Member

2021-04-09T12:37:12.953Z [features/video-quality] <Object.D.d.register.deepEquals [as listener]>: Video quality level for thumbnail height: 160, is: 180, override: false, max full res N: 2

The thumbnail height is 160px and therefore client is requesting 180p from the bridge.

@cedricroijakkers
Copy link
Contributor Author

Don't mind me looking extremely serious, but here are some screenshots. With two participants:

image

And immediately after the third participant joins, same screen, same browser (the third one joined in another browser window):

image

@jallamsetty1
Copy link
Member

Hi @cedricroijakkers, can you please capture all the bridge channel logs from the moment the 3rd participant joins ? By default the view should change to tile view and you switch back to stage view or are you using the disableTileView config setting ? Also is this happening with H264 codec only ?

@cedricroijakkers
Copy link
Contributor Author

Hey @jallamsetty1, I have tested the scenarios out. Attached are the logs for all situations.
logs.zip

I have tested it with ENABLE_CODEC_VP8 to true and all the rest to false, these are the vp8_* scenarios. Also tested with ENABLE_CODEC_H264 to true and all the rest to false, these are the h264_* scenarios.

For each, you will find the browser logs for participant 1, 2, and 3. And the JVB logs when participant 3 joins.

I've indeed noticed that as soon as participant 3 joins, the view switches to tile, and then the videos go to lower resolution. This is indeed fine. Then I click on the participant with video, the video goes full screen, and this is where h264 and VP8 behave differently: VP8 switches to HD video in about half a second, while h264 stays on LD video no matter how much I switch participants and views.

The reason we're forcing h264, is because the quality of screen sharing is so much better in h264 when compared to VP9. Notably when scrolling the screen takes a good 10-20 seconds to become readable again when using VP9, when using h264 the screen is always crystal clear. Since we use screen sharing much more than video, h264 is the better codec for us. Ideally, we'd use h264 for screen sharing and VP9 for camera video, but I don't know if this is possible.

@jallamsetty1
Copy link
Member

jallamsetty1 commented Apr 12, 2021

Hey @jallamsetty1, I have tested the scenarios out. Attached are the logs for all situations.
logs.zip

I have tested it with ENABLE_CODEC_VP8 to true and all the rest to false, these are the vp8_* scenarios. Also tested with ENABLE_CODEC_H264 to true and all the rest to false, these are the h264_* scenarios.

For each, you will find the browser logs for participant 1, 2, and 3. And the JVB logs when participant 3 joins.

I've indeed noticed that as soon as participant 3 joins, the view switches to tile, and then the videos go to lower resolution. This is indeed fine. Then I click on the participant with video, the video goes full screen, and this is where h264 and VP8 behave differently: VP8 switches to HD video in about half a second, while h264 stays on LD video no matter how much I switch participants and views.

The reason we're forcing h264, is because the quality of screen sharing is so much better in h264 when compared to VP9. Notably when scrolling the screen takes a good 10-20 seconds to become readable again when using VP9, when using h264 the screen is always crystal clear. Since we use screen sharing much more than video, h264 is the better codec for us. Ideally, we'd use h264 for screen sharing and VP9 for camera video, but I don't know if this is possible.

Oh I see that simulcast hasn't been disabled on your client for H.264. The JVB doesn't support simulcast for H.264 so even though correct resolution is requested, the bridge always sends LD.

Logger.js:154 2021-04-12T14:40:50.624Z [modules/RTC/BridgeChannel.js] <p.sendReceiverVideoConstraintMessage>:  Sending ReceiverVideoConstraint with maxFrameHeight=2160px
Logger.js:154 2021-04-12T14:40:50.625Z [features/video-quality] <Fr>:  setReceiverVideoConstraint: 2160
Logger.js:154 2021-04-12T14:40:50.631Z [modules/RTC/BridgeChannel.js] <p.sendSelectedEndpointsMessage>:  Sending selected endpoints: fa77b291.

You will need to disable simulcast on the client. preferH264 or preferredCodec: 'H264' under videoQuality in config.js should fix this.

@cedricroijakkers
Copy link
Contributor Author

That sounds like something that should be fixed in the docker configuration file templates. I will see if I can make a pull request for this. Many thanks for the investigation!

@saghul
Copy link
Member

saghul commented Apr 15, 2021

Oh I see that simulcast hasn't been disabled on your client for H.264. The JVB doesn't support simulcast for H.264 so even though correct resolution is requested, the bridge always sends LD.

@jallamsetty1 Can't we fix that in LJM instead? It's very counter intuitive.

@jallamsetty1
Copy link
Member

Oh I see that simulcast hasn't been disabled on your client for H.264. The JVB doesn't support simulcast for H.264 so even though correct resolution is requested, the bridge always sends LD.

@jallamsetty1 Can't we fix that in LJM instead? It's very counter intuitive.

The codec selection mechanism is driven by client preferences expressed in config.js whereas in this specific use case it is being enforced by disabling all but one of the codecs that Jicofo offers. The decision to enable/disable simulcast needs to made before the offer from Jicofo is received otherwise it would add extra processing on every renegotiation cycle which is not very desirable.

@saghul
Copy link
Member

saghul commented Apr 15, 2021

Ack.

@saghul saghul closed this as completed Apr 16, 2021
@netFLOw95
Copy link

@cedricroijakkers I am currently also experimenting to get the best screen sharing resolution, because we also mostly use Jitsi for voice and screen sharing, and occasional video. Which configuration currently gives you the best results?

@cedricroijakkers
Copy link
Contributor Author

@netFLOw95 We're currently running with these environment variables, which works nicely for us. Most of the time we use screen share, which is fast and clear, but video also works very nicely with these settings:

  DESKTOP_SHARING_FRAMERATE_AUTO: "1"
  DESKTOP_SHARING_FRAMERATE_MIN: "5"
  DESKTOP_SHARING_FRAMERATE_MAX: "30"
  ENABLE_CODEC_VP8: "true"
  ENABLE_CODEC_VP9: "true"
  ENABLE_CODEC_H264: "true"
  ENABLE_CODEC_OPUS_RED: "true"
  ENABLE_CODEC_AV1: "true"
  ENABLE_SIMULCAST: "false"

@netFLOw95
Copy link

@cedricroijakkers Thank´s for the quick reply!
Some questions on that:

  • Does the min/max framerate settings still have an effect when also setting DESKTOP_SHARING_FRAMERATE_AUTO: "1"?
  • With which codec do you see the results? Because the configuration doesn´t show the preffered codec?
  • I assume you don´t see issues with disabling simulcast (because it often not recommended from the Jitsi team)?

@cedricroijakkers
Copy link
Contributor Author

  • Does the min/max framerate settings still have an effect when also setting DESKTOP_SHARING_FRAMERATE_AUTO: "1"?

No indeed they don't, but they're still in there from when the DESKTOP_SHARING_FRAMERATE_AUTO: 1 did not exist, so I was too lazy to clean them up :)

  • With which codec do you see the results? Because the configuration doesn´t show the preffered codec?

That's depending on the browser capabilities. In my case, the Jitsi desktop app in Linux seems to use VP9 for video, which works nicely and quickly scales up to a higher resolution after starting the video. But I've previously seen good quality with h264 too.

  • I assume you don´t see issues with disabling simulcast (because it often not recommended from the Jitsi team)?

No, in my experience having simulcast disabled works better than having it enabled, but this could also be client (browser) related. Not all browsers work nicely with simulcast. But again, we mostly use it to share screen, camera is used from time to time, but not that important for our workflow.

@netFLOw95
Copy link

Alright. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants