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

Configurable media quality #249

Open
ara4n opened this issue Mar 5, 2022 · 11 comments
Open

Configurable media quality #249

ara4n opened this issue Mar 5, 2022 · 11 comments
Labels
A-Media-Quality Distortions or glitches in audio/video A-Screenshare O-Occasional Affects or can be seen by some users regularly or most users rarely T-Enhancement New features, changes in functionality, performance boosts, user-facing improvements

Comments

@ara4n
Copy link
Member

ara4n commented Mar 5, 2022

Currently our gUM constraints are hardcoded and very basic (640x360 video; no audio quality controls at all): https://github.com/matrix-org/matrix-js-sdk/blob/96ba061732bc3b5e748719072356d562e52097ba/src/webrtc/mediaHandler.ts#L296

We should let the user pick at least the video resolution & bitrate they want to send (presumably by some sensible defaults).

Could also be fun to let them try to select audio quality (e.g. stereo or not)

Also, leaving the bitrate entirely up to the browser feels risky in the extreme.

@w3bb
Copy link

w3bb commented Mar 7, 2022

Framerate is important for gamers, currently there isn't any alternatives to Discord that have framerates high enough to be worthwhile. An option for 30 and 60 FPS would be awesome.

@martininsulander
Copy link

Playing music with good quality over matrix would be awesome. I'm currently thinking of two scenarios.
Firstly I thought of play something for a friend, a group or even having a concert, focusing on good quality sound.
Secondly, if it would be possible to Jam together (would require very low latency).

@toniocat
Copy link

toniocat commented May 29, 2022

Currently our gUM constraints are hardcoded and very basic (640x360 video; no audio quality controls at all): https://github.com/matrix-org/matrix-js-sdk/blob/96ba061732bc3b5e748719072356d562e52097ba/src/webrtc/mediaHandler.ts#L296

If element-call is going to be available via Element Web with users not installing their own Synapse client, hard-coding limits are preferred. Perhaps we should have this ability enabled in only certain environments.

@terrytw
Copy link

terrytw commented Sep 7, 2022

I think it is sensible to at least make default resolution and bitrate configurable for homeservers.

@darkralts
Copy link

Framerate is important for gamers, currently there isn't any alternatives to Discord that have framerates high enough to be worthwhile. An option for 30 and 60 FPS would be awesome.

i agree, 60fps is very important for me too, i need to watch and screen share movies at 60fps, as lots of media i have is 60fps vs 30, looks choppy on the others end.

@robintown robintown added T-Enhancement New features, changes in functionality, performance boosts, user-facing improvements O-Occasional Affects or can be seen by some users regularly or most users rarely A-Media-Quality Distortions or glitches in audio/video A-Screenshare labels Nov 28, 2022
@robintown robintown moved this from Backlog to Triaged in Element Call issue triage Nov 28, 2022
@hazzuk
Copy link

hazzuk commented Feb 25, 2023

Wanted to express, I strongly agree with this issue. This is one of the few issues with Element Call I still have. Coming from Discord, the quality of the audio is subpar, and this is noticeable to myself and other users moving over to Matrix.

Additionally, we have no control over the resolution or framerate of share screen. We normally used Discord share screen for gameplay. Discord defaults to a solid 720p 30fps. Unfortunately Element Call is currently very choppy and unusable for this purpose.

Ideally controls for audio bitrate, any video resolution and video frame rate should be exposed to the user or homeserver owner. And once set should be remembered.

@unknowntrojan
Copy link

The low quality for both audio and video is holding Element back from having more Discord users switch over. I'm not experienced with browser development, but I tried to tinker around with the code and see if I can force the browser to use a higher bitrate and achieve something better than 2kbps dishwater HD. So far I've not managed, but I imagine it can't be that complex, and I'm just missing something. Of course it's not only about the bitrate, being able to choose resolution & framerate is also very important. I'll keep trying, I guess.

@a11cf0
Copy link

a11cf0 commented Jan 25, 2024

Are there any plans to implement this?

@Moresteck
Copy link

The low quality for both audio and video is holding Element back from having more Discord users switch over. I'm not experienced with browser development, but I tried to tinker around with the code and see if I can force the browser to use a higher bitrate and achieve something better than 2kbps dishwater HD. So far I've not managed, but I imagine it can't be that complex, and I'm just missing something. Of course it's not only about the bitrate, being able to choose resolution & framerate is also very important. I'll keep trying, I guess.

Hi, have you got anywhere with this?

@darkralts
Copy link

darkralts commented Oct 10, 2024 via email

@Pirosuki
Copy link

This seems to work for screen share. No idea how you would make it easily configurable however.

Resolution and framerate

diff --git a/src/room/InCallView.tsx b/src/room/InCallView.tsx
index d50be3c9..26515b3c 100644
--- a/src/room/InCallView.tsx
+++ b/src/room/InCallView.tsx
@@ -475,6 +475,11 @@ export const InCallView: FC<InCallViewProps> = ({
         selfBrowserSurface: "include",
         surfaceSwitching: "include",
         systemAudio: "include",
+        resolution: {
+          width: 1920,
+          height: 1080,
+          frameRate: 30,
+        },
       })
       .catch(logger.error);

Bitrate

diff --git a/src/livekit/options.ts b/src/livekit/options.ts
index f7fe03ff..c99ae98b 100644
--- a/src/livekit/options.ts
+++ b/src/livekit/options.ts
@@ -24,7 +24,10 @@ const defaultLiveKitPublishOptions: TrackPublishDefaults = {  
   forceStereo: false,
   simulcast: true,
   videoSimulcastLayers: [VideoPresets.h180, VideoPresets.h360] as VideoPreset[],
-  screenShareEncoding: ScreenSharePresets.h1080fps30.encoding,
+  screenShareEncoding: {
+    maxBitrate: 5_000_000,
+    maxFramerate: 30,
+  },
   stopMicTrackOnMute: false,
   videoCodec: "vp8",
   videoEncoding: VideoPresets.h720.encoding,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-Media-Quality Distortions or glitches in audio/video A-Screenshare O-Occasional Affects or can be seen by some users regularly or most users rarely T-Enhancement New features, changes in functionality, performance boosts, user-facing improvements
Projects
No open projects
Development

No branches or pull requests