Hyprland icon indicating copy to clipboard operation
Hyprland copied to clipboard

Major stuttering while recording games in OBS.

Open EnderMaster77 opened this issue 1 year ago • 2 comments

Regression?

No

System Info and Version

System/Version info
Hyprland, built from branch  at commit 9a09eac79b85c846e3a865a9078a3f8ff65a9259  (props: bump version to 0.42.0).
Date: Wed Aug 7 19:17:10 2024
Tag: v0.42.0, commits: 5069

flags: (if any)


System Information:
System name: Linux
Node name: archgdv2
Release: 6.10.6-zen1-1-zen
Version: #1 ZEN SMP PREEMPT_DYNAMIC Mon, 19 Aug 2024 17:02:05 +0000


GPU information:
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208B [GeForce GT 710] [10de:128b] (rev a1) (prog-if 00 [VGA controller])
2b:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU116 [GeForce GTX 1650 SUPER] [10de:2187] (rev a1) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64  560.35.03  Release Build  (archlinux-builder@)


os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo


plugins:

❯ hyprctl systeminfo -c
Hyprland, built from branch  at commit 9a09eac79b85c846e3a865a9078a3f8ff65a9259  (props: bump version to 0.42.0).
Date: Wed Aug 7 19:17:10 2024
Tag: v0.42.0, commits: 5069

flags: (if any)


System Information:
System name: Linux
Node name: archgdv2
Release: 6.10.6-zen1-1-zen
Version: #1 ZEN SMP PREEMPT_DYNAMIC Mon, 19 Aug 2024 17:02:05 +0000


GPU information:
04:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK208B [GeForce GT 710] [10de:128b] (rev a1) (prog-if 00 [VGA controller])
2b:00.0 VGA compatible controller [0300]: NVIDIA Corporation TU116 [GeForce GTX 1650 SUPER] [10de:2187] (rev a1) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64  560.35.03  Release Build  (archlinux-builder@)


os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo


plugins:

======Config-Start======


Config File: /home/ender/.config/hypr/hyprland.conf: Read Succeeded
# Setup monitors
# See https://wiki.hyprland.org/Configuring/Monitors/
#monitor=,preferred,auto,auto
monitor=HDMI-A-1,[email protected], 1x0, 1
monitor=DP-1,[email protected],1921x0,1
#monitor=DVI-D-1,[email protected],0x-2160,1
#monitor=DVI-D-1,[email protected],0x0,2
# Dual monitor example on G15 Strix
# eDP-1 is the built in monitor while DP-1 is external
# Both monitors here are at 1440 and 165Hz
# DP-1 is on the left and  eDP-1 is on the right
#monitor=DP-1,2560x1440@165,0x0,1
#monitor=eDP-1,2560x1440@165,2560x0,1

# See https://wiki.hyprland.org/Configuring/Keywords/ for more





# Execute your favorite apps at launch
exec-once = xrandr --output HDMI-A-1 --primary
exec-once = ~/.config/hypr/xdg-portal-hyprland
exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP
exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
exec-once = swww-daemon
exec-once = waybar
exec-once = mako
exec-once = keepassxc
exec = virsh net-start default
exec = /usr/bin/kdeconnectd
exec-once = wl-gammarelay-rs
exec-once = openrgb --startminimized

exec = swww img ~/.config/HyprV/backgrounds/v1-background-dark.jpg
exec-once = blueman-applet
exec-once = nm-applet --indicator
exec-once = wl-paste --watch cliphist store
exec = gsettings set org.gnome.desktop.interface icon-theme "Dracula"
exec = gsettings set org.gnome.desktop.interface gtk-theme "Dracula"
env = LIBVA_DRIVER_NAME,nvidia
env = XDG_SESSION_TYPE,wayland
env = GBM_BACKEND,nvidia-drm
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
env = WLR_NO_HARDWARE_CURSORS,1
env = XCURSOR_SIZE=24
env = _JAVA_AWT_WM_NONREPARENTING=1
env = QT_QPA_PLATFORM=wayland
env = QT_QPA_PLATFORMTHEME=qt6ct
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
input {
    kb_layout = us
    kb_variant =
    kb_model =
    kb_options =
    kb_rules =

    follow_mouse = 1

    touchpad {
        natural_scroll = no
    }

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
}

general {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more

    gaps_in = 5
    gaps_out = 10
    border_size = 2
    #col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
    col.active_border=rgb(cdd6f4)
    col.inactive_border = rgba(595959aa)

    layout = dwindle
}

misc {
    disable_hyprland_logo = yes
}

decoration {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    #active_opacity = 0.80
    #inactive_opacity = 0.75
    rounding = 5

    blur {
        enabled = true
        size = 7
        passes = 4
        new_optimizations = true
    }

    blurls = lockscreen

    drop_shadow = yes
    shadow_range = 4
    shadow_render_power = 3
    col.shadow = rgba(1a1a1aee)
}

animations {
    enabled = yes

    # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
    bezier = myBezier, 0.10, 0.9, 0.1, 1.05

    animation = windows, 1, 7, myBezier, slide
    animation = windowsOut, 1, 7, myBezier, slide
    animation = border, 1, 10, default
    animation = fade, 1, 7, default
    animation = workspaces, 1, 6, default
}

dwindle {
    # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
    pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainModENTER + P in the keybinds section below
    preserve_split = yes # you probably want this
}

master {
    # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
    #new_is_master = true
}

gestures {
    # See https://wiki.hyprland.org/Configuring/Variables/ for more
    workspace_swipe = off
}

render{
# Enables explicit sync support.
 explicit_sync = 1
}
render:explicit_sync = 1

# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
#device:epic mouse V1 {
#    sensitivity = -0.5
#}

# Example windowrule v1
#windowrule = float, ^(alacritty)$
#
# Example windowrule v2
# windowrulev2 = float,class:^(alacritty)$,title:^(kitty)$
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# rules below would make the specific app transparent
#windowrulev2 = active_opacity 1.0 override 1.0,class:^(aseprite)$
#windowrulev2 = active_opacity 1.0 override 1.0,class:^(libresprite)$
#active_opacity = 0.80
#inactive_opacity = 0.75
#windowrulev2 = opacity 0.75 0.8, class:^()$

windowrulev2 = opacity 0.80 0.75, class:()
windowrulev2 = opacity 0.85 0.75, class:(Alacritty)
windowrulev2 = opacity 0.85 0.75, class:(Zed)
windowrulev2=opacity 1.0 1.0,class:(Aseprite)
windowrulev2=tile,class:(Aseprite)
windowrulev2=opacity 1.0 1.0,class:(LibreWolf),title:YouTube
windowrulev2 = animation popin,class:^(alacritty)$,title:^(update-sys)$
windowrulev2 = animation popin,class:^(thunar)$
windowrulev2 = opacity 0.8 0.8,class:^(thunar)$
windowrulev2 = opacity 0.8 0.8,class:^(VSCodium)$
windowrulev2 = animation popin,class:^(chromium)$
windowrulev2 = move cursor -3% -105%,class:^(wofi)$
windowrulev2 = noanim,class:^(wofi)$
windowrulev2 = opacity 0.8 0.6,class:^(wofi)$







# See https://wiki.hyprland.org/Configuring/Keywords/ for more
$mainMod = SUPER
 bind= ALT,Up,exec,busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n -500

bind= ALT,Down,exec,busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n +500
bind = $mainMod, K, exec, ~/Scripts/hidewindow.sh
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = $mainMod, RETURN, exec, alacritty  #open the terminal
bind = $mainMod SHIFT, C, killactive, # close the active window
bind = $mainMod, L, exec, swaylock # Lock the screen
bind = $mainMod, M, exec, wlogout --protocol layer-shell # show the logout window
bind = $mainMod SHIFT, Q, exit, # Exit Hyprland all together no (force quit Hyprland)
bind = $mainMod, E, exec, thunar # Show the graphical file browser
bind = $mainMod, V, togglefloating, # Allow a window to float
bind = $mainMod, P, exec, wofi # Show the graphical app launcher
#bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
bind = $mainMod, S, exec, grim -g "$(slurp)" - | swappy -f - # take a screenshot
bind = ALT, V, exec, cliphist list | wofi -dmenu | cliphist decode | wl-copy # open clipboard manager
#bind = $mainMod, T, exec, ~/.config/HyprV/hyprv_util vswitch # switch HyprV version
bind=$mainMod,F,fullscreen
# Move focus with mainMod + arrow keys
bind = $mainMod, left, movefocus, l
bind = $mainMod, right, movefocus, r
bind = $mainMod, up, movefocus, u
bind = $mainMod, down, movefocus, d

# Switch workspaces with mainMod + [0-9]
bind = $mainMod, 1, workspace, 11
bind = $mainMod, 2, workspace, 12
bind = $mainMod, 3, workspace, 13
bind = $mainMod, 4, workspace, 14
bind = $mainMod, 5, workspace, 15
bind = $mainMod, 6, workspace, 16
bind = $mainMod, 7, workspace, 17
bind = $mainMod, 8, workspace, 18
bind = $mainMod, 9, workspace, 19
bind = $mainMod, 0, workspace, 110

bind = ALT, 1, workspace, 21
bind = ALT, 2, workspace, 22
bind = ALT, 3, workspace, 23
bind = ALT, 4, workspace, 24
bind = ALT, 5, workspace, 25
bind = ALT, 6, workspace, 26
bind = ALT, 7, workspace, 27
bind = ALT, 8, workspace, 28
bind = ALT, 9, workspace, 29
bind = ALT, 0, workspace, 210

bind = CTRL, 1, workspace, 31
bind = CTRL, 2, workspace, 32
bind = CTRL, 3, workspace, 33
bind = CTRL, 4, workspace, 34
bind = CTRL, 5, workspace, 35
bind = CTRL, 6, workspace, 36
bind = CTRL, 7, workspace, 37
bind = CTRL, 8, workspace, 38
bind = CTRL, 9, workspace, 39
bind = CTRL, 0, workspace, 310

bind = $mainMod SHIFT, H, workspace, 21

# Primary monitor workspaces
workspace= name:11, monitor:HDMI-A-1,default:true
workspace= name:12, monitor:HDMI-A-1
workspace= name:13, monitor:HDMI-A-1
workspace= name:14, monitor:HDMI-A-1
workspace= name:15, monitor:HDMI-A-1
workspace= name:16, monitor:HDMI-A-1
workspace= name:17, monitor:HDMI-A-1
workspace= name:18, monitor:HDMI-A-1
workspace= name:19, monitor:HDMI-A-1
workspace= name:110, monitor:HDMI-A-1

# Secondary Monitor workspaces
workspace= name:21, monitor:DP-1,default:true
workspace= name:22, monitor:DP-1
workspace= name:23, monitor:DP-1
workspace= name:24, monitor:DP-1
workspace= name:25, monitor:DP-1
workspace= name:26, monitor:DP-1
workspace= name:27, monitor:DP-1
workspace= name:28, monitor:DP-1
workspace= name:29, monitor:DP-1
workspace= name:210, monitor:DP-1

# TV Monitor workspaces
workspace= name:31, monitor:DVI-D-1,default:true
workspace= name:32, monitor:DVI-D-1
workspace= name:33, monitor:DVI-D-1
workspace= name:34, monitor:DVI-D-1
workspace= name:35, monitor:DVI-D-1
workspace= name:36, monitor:DVI-D-1
workspace= name:37, monitor:DVI-D-1
workspace= name:38, monitor:DVI-D-1
workspace= name:39, monitor:DVI-D-1
workspace= name:310, monitor:DVI-D-1




# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = $mainMod SHIFT, 1, movetoworkspace, 11
bind = $mainMod SHIFT, 2, movetoworkspace, 12
bind = $mainMod SHIFT, 3, movetoworkspace, 13
bind = $mainMod SHIFT, 4, movetoworkspace, 14
bind = $mainMod SHIFT, 5, movetoworkspace, 15
bind = $mainMod SHIFT, 6, movetoworkspace, 16
bind = $mainMod SHIFT, 7, movetoworkspace, 17
bind = $mainMod SHIFT, 8, movetoworkspace, 18
bind = $mainMod SHIFT, 9, movetoworkspace, 19
bind = $mainMod SHIFT, 0, movetoworkspace, 110

bind = ALT SHIFT, 1, movetoworkspace, 21
bind = ALT SHIFT, 2, movetoworkspace, 22
bind = ALT SHIFT, 3, movetoworkspace, 23
bind = ALT SHIFT, 4, movetoworkspace, 24
bind = ALT SHIFT, 5, movetoworkspace, 25
bind = ALT SHIFT, 6, movetoworkspace, 26
bind = ALT SHIFT, 7, movetoworkspace, 27
bind = ALT SHIFT, 8, movetoworkspace, 28
bind = ALT SHIFT, 9, movetoworkspace, 29
bind = ALT SHIFT, 0, movetoworkspace, 210

bind = CTRL SHIFT, 1, movetoworkspace, 31
bind = CTRL SHIFT, 2, movetoworkspace, 32
bind = CTRL SHIFT, 3, movetoworkspace, 33
bind = CTRL SHIFT, 4, movetoworkspace, 34
bind = CTRL SHIFT, 5, movetoworkspace, 35
bind = CTRL SHIFT, 6, movetoworkspace, 36
bind = CTRL SHIFT, 7, movetoworkspace, 37
bind = CTRL SHIFT, 8, movetoworkspace, 38
bind = CTRL SHIFT, 9, movetoworkspace, 39
bind = CTRL SHIFT, 0, movetoworkspace, 310
# Scroll through existing workspaces with mainMod + scroll
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1

# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = $mainMod, mouse:272, movewindow
bindm = $mainMod, mouse:273, resizewindow

# Global Keybinds for apps
bind = , F12, pass, ^(com\.obsproject\.Studio)$


# Source a file (multi-file configs)
source = ~/.config/hypr/media-binds.conf
source = ~/.config/hypr/env_var.conf

exec-once=dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP


Config File: /home/ender/.config/hypr/media-binds.conf: Read Succeeded
$SCRIPT = ~/.config/HyprV/waybar/scripts

bind = , xf86audioraisevolume, exec, $SCRIPT/volume --inc
bind = , xf86audiolowervolume, exec, $SCRIPT/volume --dec
bind = , xf86AudioMicMute, exec, $SCRIPT/volume --toggle-mic
bind = , xf86audioMute, exec, $SCRIPT/volume --toggle

bind = , xf86KbdBrightnessDown, exec, $SCRIPT/kb-brightness --dec
bind = , xf86KbdBrightnessUp, exec, $SCRIPT/kb-brightness --inc

bind = , xf86MonBrightnessDown, exec, $SCRIPT/brightness --dec
bind = , xf86MonBrightnessUp, exec, $SCRIPT/brightness --inc

Config File: /home/ender/.config/hypr/env_var.conf: Read Succeeded
# Environment Variables
# see https://wiki.hyprland.org/Configuring/Environment-variables/

# Theming Related Variables
# Set cursor size. See FAQ below for why you might want this variable set.
# https://wiki.hyprland.org/FAQ/
env = XCURSOR_SIZE,24

# Set a GTK theme manually, for those who want to avoid appearance tools such as lxappearance or nwg-look
#env = GTK_THEME,

# Set your cursor theme. The theme needs to be installed and readable by your user.
#env = XCURSOR_THEME,

# the line below may help with multiple monitors
#env = WLR_EGL_NO_MODIFIERS,1

#XDG Specifications
env = XDG_CURRENT_DESKTOP,Hyprland
env = XDG_SESSION_TYPE,wayland
env = XDG_SESSION_DESKTOP,Hyprland

# Toolkit Backend Variables

# GTK: Use wayland if available, fall back to x11 if not.
#env = GDK_BACKEND,wayland,x11

# QT: Use wayland if available, fall back to x11 if not.
#env = QT_QPA_PLATFORM,wayland,xcb

# Run SDL2 applications on Wayland. Remove or set to x11 if games that
# provide older versions of SDL cause compatibility issues
#env = SDL_VIDEODRIVER,wayland

# Clutter package already has wayland enabled, this variable
#will force Clutter applications to try and use the Wayland backend
#env = CLUTTER_BACKEND,wayland

# QT Variables

# (From the QT documentation) enables automatic scaling, based on the monitor’s pixel density
# https://doc.qt.io/qt-5/highdpi.html
#env = QT_AUTO_SCREEN_SCALE_FACTOR,1

# Tell QT applications to use the Wayland backend, and fall back to x11 if Wayland is unavailable
#env = QT_QPA_PLATFORM,wayland,xcb

# Disables window decorations on QT applications
#env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1

#Tells QT based applications to pick your theme from qt5ct, use with Kvantum.
#env = QT_QPA_PLATFORMTHEME,qt5ct
======Config-End========

Description

OBS stutters a lot when recording specifically gameplay. These stutters are shown both in the recording and in the preview even before recording starts. This issue appears to be unrelated to framerate, as setting the monitor's refresh rate in the hyprland.conf file to 60.00Hz does not fix this issue. I'm also pretty sure this issue is Hyprland Specific. I tested the same scenario on the Cosmic Alpha and it worked as expected. I'm also not sure if this is due to something Xwayland does. Also, the game only stutters IN the recording. While playing, nothing seems off except OBS's preview and the recording.

How to reproduce

  1. Open Hyprland
  2. Launch OBS
  3. Start recording with OBS
  4. Launch game.
  5. Play game for any length of time
  6. End Recording

This recording should have a ton of stutter.

Crash reports, logs, images, videos

Below is an example of this issue in subnautica.

https://github.com/user-attachments/assets/f0c63d0a-c240-49d7-acba-1e281f605931

EnderMaster77 avatar Aug 25 '24 23:08 EnderMaster77

Here too mydude, but the games stutter without opening OBS.

ENDragnee avatar Aug 26 '24 10:08 ENDragnee

test disabling

render{
# Enables explicit sync support.
 explicit_sync = 1
}
render:explicit_sync = 1

why do you even have the second line in your config ??

additionally, you could play around with

no_hardware_cursors
 no_direct_scanout

romanstingler avatar Aug 26 '24 11:08 romanstingler

I am also experiencing a similar issue with recording stuttering.

To add to this now that I have gotten home. The above does not seem to relate to me as I do not have the "render {..}" code block.

I am going to test around with the no_hardware_cursors as well as no _direct_scanout to see if they make any differences.


I have tried downgrading to a different OBS version through AUR and the current OBS version I am on is: "30.2.3-tytan652-1 (64 bit).

I may bounce around and test other version per this GitHub posting: #7640 which someone mentions a 0.41 the error happened then or before then.


I will keep this updated here if I find anything but may take time due to work :)

JaredKIso avatar Sep 09 '24 21:09 JaredKIso

render{
 explicit_sync = 1
}

It actually works! I have the same problem and my previous settings is explicit_sync = 0, after I set the explicit_sync to 1 ,the problem disappear and everything goes fine

EmmetZ avatar Sep 11 '24 08:09 EmmetZ

I was testing around a bit more last night and found the following:

The stuttering does not happen when recording just the desktop.

The game I was experiencing this issue on was a game that I had set to Vulkan for rendering. After changing it to Direct3D 11 I testing recording the game again and I did not experience the issue anymore. (For context I am playing Deadlock).


I was doing further research and it looks like this (if related) has been a known issue for a bit regarding Vulkan: https://obsproject.com/forum/threads/i-cant-capture-vulkan-games-i-can-no-longer-hook-vulkan-games-i-could-but-now-i-cant.143257/

From that comment section I saw someone mention the use of "Game Capture" which my OBS does not have. This lead me down the path of: https://www.reddit.com/r/linuxquestions/comments/x0q6fp/obs_game_capture_on_linux/

Which then linked to: https://github.com/nowrep/obs-vkcapture?tab=readme-ov-file

I will be testing this today and will keep everyone updated!

--

T.L.D.R:

  • From my testing in game Vulkan rendering was causing issues. After swapping the game back to Direct3D 11 I no longer experienced the issue. Did some more research and found that this has been known a while ago (2021) and to use game capture in OBS. Testing today how to get https://github.com/nowrep/obs-vkcapture to work properly.

I am also going to test around a bit more with explicit_sync as it worked for Emmet :). So I will post here about how each thing goes

JaredKIso avatar Sep 11 '24 14:09 JaredKIso

Here to post an update!

Regarding my previous post I will get what did not work out of the way:

---| Things that didn't work |---

  • Downgrading OBS
  • Updating system (Even a fresh install)
  • Trying the suggestions that @romanstingler suggested neither of them worked for me but did for @EmmetZ.

Because these didn't work I had to dig a little further into it.

To cut to the chase: ---| What worked for me |---

  • Noticed that if I swapped to Direct3D 11 for the game that saw stutters the stutters no longer happened in recordings.
  • Found out the stuttering on recordings was a known thing for Vulkan.
  • Someone suggested adding a Vulkan game capture to OBS. (https://github.com/nowrep/obs-vkcapture) --- Quick Solution: ---
  • Installed it via yay -S obs-vkcapture-git
  • Added obs-gamecapture OBS_VKCAPTURE=1 %command% to the games "Launch Options" on steam.
  • Set the games render to Vulkan and tried recording using "Game Capture" and it worked smoothly!

Hope this helps someone else if they experience this issue!

JaredKIso avatar Sep 12 '24 05:09 JaredKIso

I encounter the same issue, but in Vesktop. This solution as I understand only works for OBS?

Here to post an update!

Regarding my previous post I will get what did not work out of the way:

---| Things that didn't work |---

* Downgrading OBS

* Updating system (Even a fresh install)

* Trying the suggestions that @romanstingler suggested neither of them worked for me but did for @EmmetZ.

Because these didn't work I had to dig a little further into it.

To cut to the chase: ---| What worked for me |---

* Noticed that if I swapped to Direct3D 11 for the game that saw stutters the stutters no longer happened in recordings.

* Found out the stuttering on recordings was a known thing for Vulkan.

* Someone suggested adding a Vulkan game capture to OBS. (https://github.com/nowrep/obs-vkcapture)
  --- Quick Solution: ---

* Installed it via `yay -S obs-vkcapture-git`

* Added `obs-gamecapture OBS_VKCAPTURE=1 %command%` to the games "Launch Options" on steam.

* Set the games render to Vulkan and tried recording using "Game Capture" and it worked smoothly!

Hope this helps someone else if they experience this issue!

LaineZ avatar Sep 19 '24 12:09 LaineZ

@LaineZ I do think this is specific to OBS (my solution).

But, I do recall seeing stuttering on different distros. When I swapped from Nobara to CachyOS (Hyprland specifically) it went away. I do not know why, could be drivers or how Vesktop interacts with the WM.

Maybe that is the place to investigate :)

JaredKIso avatar Sep 21 '24 06:09 JaredKIso

@JaredKIso Probably you are right. I didn't remember any screenshare issues on OpenSUSE Tumbleweed, but there is also involving Plasma DE. I didn't test hyprland in OpenSUSE

LaineZ avatar Sep 21 '24 19:09 LaineZ

For me, enabling render:explicit_sync = 1 seems to be resolves this issue (Both in OBS, and Vesktop)

LaineZ avatar Sep 25 '24 21:09 LaineZ

Hi there! Joining the thread. Enabling render:explicit_sync = 1 resolves this issues but ONLY in OBS, Vesktop still having stutters. Will be posting my findings here.

TheCliffRacer avatar Nov 22 '24 11:11 TheCliffRacer

i also get stuttery recordings in OBS with explicit_sync = 0, and the game i use to test this (ULTRAKILL, dxvk, offloaded to the GPU, VSync enabled) doesn't stutter.

  • enabling explicit_sync = 1 makes the game itself stutter but recordings don't stutter anymore.
  • recording the game with obs-vkcapture with explicit_sync set to either 0 or 1 doesn't stutter (but vkcapture can't record everything so this isn't a good solution for me)
  • with explicit_sync = 1 again, disabling VSync gets rid of the stuttering. this solution doesn't work everywhere either because some games don't give a max FPS select screen and force VSync on the player, e.g. Manifold Garden — trying to use gamescope to force the max FPS doesn't work because gamescope or the game seem to crash? (but that's another issue)

enderprism avatar Nov 22 '24 16:11 enderprism

Here's what I ended up putting into my hyprland.conf. No screen share stutters in OBS or Vesktop. All games works smooth as well.

render {
    explicit_sync = 1
    explicit_sync_kms = 0
}

I had to reboot for the changes to take affect.

TheCliffRacer avatar Nov 23 '24 12:11 TheCliffRacer

Hi, explicit_sync also fixed the issues in obs for me. But even on the latest hyprland-git and 565 nvidia drivers, I still find explicit sync buggy.

So I also recommend using obs-vkcapture-git, which @LaineZ posted about earlier. Also for Vesktop issues like @TheCliffRacer has, please note that the latest discord-canary has native support for wayland screenshare, which I have no issues with.

tinyCatzilla avatar Dec 08 '24 22:12 tinyCatzilla

@EnderMaster77 this should be fixed with both and without explicit sync in git, if it is you can close this issue

ikalco avatar Mar 28 '25 21:03 ikalco

I can confirm latest git works fine and the stutter is gone. I had to use vk-capture before but now it works just fine without. I tried with explicit sync on and off and saw no stutter.

Oery avatar Mar 29 '25 12:03 Oery

Thanks everyone!

steakscience avatar Apr 01 '25 14:04 steakscience