Skip to content

[BUG] <Video Stutter, or any motion/animation playback stutters. Chromium, Chrome, FF stutter> #361

@MxD-js

Description

@MxD-js

Is there an existing issue for this?

  • I have searched the existing issues

Current Behavior

I've tried various flavors of the webtop image, the latest tag, and arch-kde, el-mate and others in between all appear to do the same.

I have 60 FPS and even have 144 FPS if I increase the FPS, I have the encoder set to x264. I tried other encoders and tried to tweak the video settings but while the video is playing, i.e youtube, or really any animation or moving object every second there is a stutter, over and over again, every second.

What can I do to tweak so I get smooth video playback.

Expected Behavior

smooth video playback.

Steps To Reproduce

I'm using this docker compose, pretty much copy and paste from the webtop how-to.

  1. Launch Chromium, or Chrome, FF any browser and open a animation, video or anything that moves.
  2. Observe every seccond there is a stutter. A pause if you will then motion resumes, it happens every second, over and over again.

Environment

- OS: PRETTY_NAME="Ubuntu 22.04.4 LTS"
- How docker service was installed:
Using official docker docs.

CPU architecture

x86-64

Docker creation

services:
  webtop:
    image: linuxserver/webtop:ubuntu-xfce
    container_name: webtop-ubuntu-selkies
    security_opt:
      - seccomp:unconfined
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SUBFOLDER=/
      - TITLE=Webtop
    volumes:
      - webtop_config:/config
#      - /var/run/docker.sock:/var/run/docker.sock
    ports:
#      - 3000:3000
      - 3001:3001
    devices:
      - /dev/dri:/dev/dri
    shm_size: "3gb"
    deploy:
      resources:
        limits:
          memory: 8GB
    restart: unless-stopped
    networks:
      z_vlan6ipvlan:
        ipv4_address: 192.168.6.92
    dns:
      - 192.168.6.1

networks:
  z_vlan6ipvlan:
    external: true

volumes:
  webtop_config:

Container logs

[migrations] started
[migrations] no migrations found
───────────────────────────────────────
      ██╗     ███████╗██╗ ██████╗
      ██║     ██╔════╝██║██╔═══██╗
      ██║     ███████╗██║██║   ██║
      ██║     ╚════██║██║██║   ██║
      ███████╗███████║██║╚██████╔╝
      ╚══════╝╚══════╝╚═╝ ╚═════╝
   Brought to you by linuxserver.io
───────────────────────────────────────
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID:    1000
User GID:    1000
───────────────────────────────────────
**** creating video group videop69h with id 109 ****
**** adding /dev/dri/renderD128 to video group videop69h with id 109 ****
**** adding /dev/dri/card0 to video group video with id 44 ****
[custom-init] No custom files found, skipping...
[ls.io-init] done.
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
screen 0 shmid 0
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Could not resolve keysym XF86CameraAccessEnable
> Warning:          Could not resolve keysym XF86CameraAccessDisable
> Warning:          Could not resolve keysym XF86CameraAccessToggle
> Warning:          Could not resolve keysym XF86NextElement
> Warning:          Could not resolve keysym XF86PreviousElement
> Warning:          Could not resolve keysym XF86AutopilotEngageToggle
> Warning:          Could not resolve keysym XF86MarkWaypoint
> Warning:          Could not resolve keysym XF86Sos
> Warning:          Could not resolve keysym XF86NavChart
> Warning:          Could not resolve keysym XF86FishingChart
> Warning:          Could not resolve keysym XF86SingleRangeRadar
> Warning:          Could not resolve keysym XF86DualRangeRadar
> Warning:          Could not resolve keysym XF86RadarOverlay
> Warning:          Could not resolve keysym XF86TraditionalSonar
> Warning:          Could not resolve keysym XF86ClearvuSonar
> Warning:          Could not resolve keysym XF86SidevuSonar
> Warning:          Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server
19
20
INFO:data_websocket:pcmflux library found. Audio capture is available.
INFO:data_websocket:pixelflux library found. Striped encoding modes available.
INFO:root:Expected C js_config_t size (from ctypes): 1354 bytes
INFO:main:Upload directory ensured: /config/Desktop
INFO:main:Starting Selkies (WebSocket Mode) with args: Namespace(encoder='x264enc', framerate=60, video_bitrate=16000, dri_node='', audio_device_name='', h264_crf=25, h264_fullcolor=False, h264_streaming_mode=False, watermark_path='', watermark_location=-1, port=8082, debug=False)
INFO:main:Initial Encoder: x264enc, Framerate: 60, Bitrate: 16000kbps
INFO:main:SelkiesStreamingApp initialized: encoder=x264enc, display=1024x768
INFO:main:All main components initialized. Running server...
INFO:webrtc_input:System DPI detected as ~96. Cursor size cap set to 32x32px.
INFO:webrtc_input:Resetting keyboard modifiers.
INFO:webrtc_input:Starting clipboard monitor
INFO:webrtc_input:Found XFIXES version 4.0
INFO:webrtc_input:starting cursor monitor
INFO:webrtc_input:watching for cursor changes
WARNING:data_websocket:Cannot broadcast cursor data: no clients connected or server not ready.
INFO:data_websocket:Data WebSocket Server listening on port 8082
INFO:data_websocket:Data WebSocket connected from ('127.0.0.1', 39896)
INFO:data_websocket:Broadcasting stream resolution: {"type": "stream_resolution", "width": 1024, "height": 768}
INFO:data_websocket:Sending last known cursor to new client ('127.0.0.1', 39896)
INFO:data_websocket:Attempting to establish PulseAudio connection...
INFO:data_websocket:PulseAudio connection established.
INFO:data_websocket:Applying client settings (initial=True): {'videoBitRate': 8000, 'videoFramerate': 144, 'videoCRF': 5, 'encoder': 'x264enc', 'h264_fullcolor': False, 'h264_streaming_mode': True, 'resizeRemote': True, 'isManualResolutionMode': False, 'manualWidth': 1024, 'manualHeight': 768, 'audioBitRate': 320000, 'videoBufferSize': 0, 'initialClientWidth': 2056, 'initialClientHeight': 1134, 'jpeg_quality': 60, 'paint_over_jpeg_quality': 90, 'use_cpu': False, 'h264_paintover_crf': 50, 'h264_paintover_burst_frames': 5, 'use_paint_over_quality': False, 'scaling_dpi': 96}
INFO:gst_app_resize:on_resize_handler attempting resize for: 2056x1134
INFO:gst_app_resize:App dimensions updated to 2056x1134 before xrandr call.
INFO:gst_app_resize:Mode 2056x1134 not found in xrandr list. Attempting to add for screen 'screen'.
INFO:gst_app_resize:Successfully ran: xrandr --newmode 2056x1134 194.50 2056 2192 2408 2760 1134 1137 1147 1176 -hsync +vsync
INFO:gst_app_resize:Successfully ran: xrandr --addmode screen 2056x1134
INFO:gst_app_resize:Applying xrandr mode '2056x1134' for screen 'screen'.
INFO:gst_app_resize:Successfully applied xrandr mode '2056x1134'.
INFO:gst_app_resize:resize_display('2056x1134') reported success.
INFO:data_websocket:Applying SCALING_DPI from initial settings: 96
INFO:gst_app_resize:XFCE detected. Applying xfconf-query for DPI 96.
INFO:data_websocket:Broadcasting stream resolution: {"type": "stream_resolution", "width": 2056, "height": 1134}
INFO:gst_app_resize:Successfully set XFCE DPI to 96 using xfconf-query.
INFO:data_websocket:Successfully set DPI to 96 from initial settings.
INFO:data_websocket:Attempting to set cursor size to 32 based on initial DPI.
INFO:data_websocket:Successfully set cursor size to 32.
WARNING:data_websocket:Pipeline is inactive for the initial client. Forcing a start.
INFO:data_websocket:Video pipeline for x264enc needs to start (was not active or forced).
INFO:data_websocket:Starting x264enc: 2056x1134 @ 144.0fps, CRF: 5, FullFrame: True
WARNING:data_websocket:Attempting to start backpressure task, but client_settings_received event is not set or None. The task will wait for this event. Ensure it's set when initial client settings are processed.
INFO:data_websocket:Trying to ensure client_settings_received is set for backpressure task start.
INFO:data_websocket:New frame backpressure task started (current encoder: 'x264enc').
INFO:data_websocket:x264enc capture started successfully.
INFO:data_websocket:Initial client settings message processed by ws_handler.
INFO:data_websocket:Initial setup: Audio pipeline not yet active, attempting start.
INFO:data_websocket:Starting pcmflux audio pipeline...
INFO:data_websocket:pcmflux settings: device='', bitrate=320000, channels=2
INFO:data_websocket:Frame-based backpressure logic task started.
INFO:data_websocket:Client settings received, proceeding with backpressure loop.
[pcmflux] Attempting to connect to PulseAudio device: system_default...
INFO:data_websocket:pcmflux audio capture started successfully.
INFO:data_websocket:pcmflux audio chunk broadcasting task started.
X Shared Memory Extension available.
XShm setup complete for 2056x1134.
CPU cores available: 20
[pcmflux] SUCCESS: Connected to PulseAudio.
[pcmflux] SUCCESS: Opus encoder created.
[pcmflux] Capture loop started. Device: system_default, Rate: 48000, Channels: 2, Bitrate: 320 kbps, VBR: On, Silence Gate: Off, PCM Chunk: 3840 bytes
WARNING:webrtc_input:No clipboard content to send
INFO:data_websocket:Received START_VIDEO for encoder: x264enc
INFO:data_websocket:x264enc pipeline is already capturing.
INFO:data_websocket:Received START_AUDIO command from client for server-to-client audio.
INFO:data_websocket:START_AUDIO: pcmflux audio pipeline already active.
INFO:webrtc_input:Initializing 4 persistent gamepad instances...
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js0): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js0.sock, EVDEV socket: /tmp/selkies_event1000.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 0 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js0.sock, EVDEV: /tmp/selkies_event1000.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js1): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js1.sock, EVDEV socket: /tmp/selkies_event1001.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 1 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js1.sock, EVDEV: /tmp/selkies_event1001.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js2): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js2.sock, EVDEV socket: /tmp/selkies_event1002.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 2 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js2.sock, EVDEV: /tmp/selkies_event1002.sock).
INFO:root:Packed js_config payload for 'Microsoft X-Box 360 pad' (js3): len=1360 bytes. Name='Microsoft X-Box 360 pad', Vendor=0x045e, Product=0x028e, Version=0x0100, Reported Buttons=11 (Array capacity: 512), Reported Axes=8 (Array capacity: 64)
INFO:selkies_gamepad:Gamepad configured. JS socket: /tmp/selkies_js3.sock, EVDEV socket: /tmp/selkies_event1003.sock. Using fixed config: Microsoft X-Box 360 pad
INFO:webrtc_input:Initialized and started persistent gamepad instance for index 3 (Name: 'Microsoft X-Box 360 pad', JS: /tmp/selkies_js3.sock, EVDEV: /tmp/selkies_event1003.sock).
INFO:selkies_gamepad:Gamepad /tmp/selkies_js0.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js0.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js1.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js1.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js2.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js2.sock
INFO:selkies_gamepad:Gamepad /tmp/selkies_js3.sock: Event processor started.
INFO:selkies_gamepad:JS interposer server listening on /tmp/selkies_js3.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1000.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1001.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1002.sock
INFO:selkies_gamepad:EVDEV interposer server listening on /tmp/selkies_event1003.sock
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.28' (uid=1000 pid=436 comm="xfce4-panel" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.29' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.login1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1: Permission denied
dbus-daemon[291]: [system] Activating service name='org.freedesktop.PolicyKit1' requested by ':1.30' (uid=1000 pid=306 comm="/usr/bin/xfce4-session" label="docker-default (enforce)") (using servicehelper)
dbus-daemon[291]: [system] Activated service 'org.freedesktop.PolicyKit1' failed: Failed to execute program org.freedesktop.PolicyKit1: Permission denied
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 55.00 EncStripes/s: 55.00
[pcmflux] First non-silent audio chunk detected! Encoding...
[pcmflux] Status | Read: 1, Silent: 0 (0.0%), Encoded: 1, Rate: 0.01 kbps
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 55.00 EncStripes/s: 55.00
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 54.00 EncStripes/s: 54.00
[pcmflux] Status | Read: 19, Silent: 0 (0.0%), Encoded: 19, Rate: 0.23 kbps
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 69.00 EncStripes/s: 69.00
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 84.00 EncStripes/s: 84.00
[pcmflux] Status | Read: 98, Silent: 0 (0.0%), Encoded: 98, Rate: 1.18 kbps
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 73.00 EncStripes/s: 73.00
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 77.00 EncStripes/s: 77.00
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 76.00 EncStripes/s: 76.00
Res: 2056x1134 Mode: H264 (CPU) CS_IN:I420 LR FF Stripes: 1 CRF:5 EncFPS: 65.00 EncStripes/s: 65.00
INFO:data_websocket:Received STOP_VIDEO
INFO:data_websocket:Stopping X11 x264-striped capture...
Capture loop stopped. X resources released.
INFO:data_websocket:Frame-based backpressure logic task cancelled.
INFO:data_websocket:Frame-based backpressure logic task finished.
INFO:data_websocket:Backpressure task was stopped. Calling _reset_frame_ids_and_notify.
INFO:data_websocket:Resetting frame IDs.
INFO:data_websocket:Broadcasting PIPELINE_RESETTING to 1 client(s).
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
INFO:data_websocket:Received START_VIDEO for encoder: x264enc
INFO:data_websocket:Starting x264enc: 2056x1134 @ 144.0fps, CRF: 5, FullFrame: True
INFO:data_websocket:New frame backpressure task started (current encoder: 'x264enc').
INFO:data_websocket:x264enc capture started successfully.
INFO:data_websocket:Frame-based backpressure logic task started.
INFO:data_websocket:Client settings received, proceeding with backpressure loop.
X Shared Memory Extension available.
XShm setup complete for 2056x1134.
CPU cores available: 20
INFO:webrtc_input:Set clipboard content, length: 11290
INFO:webrtc_input:Sending clipboard content, length: 11290
[pcmflux] Status | Read: 102, Silent: 0 (0.0%), Encoded: 102, Rate: 1.22 kbps
INFO:data_websocket:Received STOP_VIDEO
INFO:data_websocket:Stopping X11 x264-striped capture...
Capture loop stopped. X resources released.
INFO:data_websocket:Frame-based backpressure logic task cancelled.
INFO:data_websocket:Frame-based backpressure logic task finished.
INFO:data_websocket:Backpressure task was stopped. Calling _reset_frame_ids_and_notify.
INFO:data_websocket:Resetting frame IDs.
INFO:data_websocket:Broadcasting PIPELINE_RESETTING to 1 client(s).
[pcmflux] Status | Read: 98, Silent: 0 (0.0%), Encoded: 98, Rate: 1.18 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 100, Silent: 0 (0.0%), Encoded: 100, Rate: 1.20 kbps
[pcmflux] Status | Read: 101, Silent: 0 (0.0%), Encoded: 101, Rate: 1.21 kbps

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions