Skip to content

DDP-over-ws: handle fragmented (multi-part) messages #5755

Description

@softhack007

let maxDDPpx = 472; // must fit into one WebSocket frame of 1428 bytes, DDP header is 10+1 bytes -> 472 RGB pixels

WLED/wled00/ws.cpp

Lines 99 to 105 in a8ae8af

} else {
DEBUG_PRINTF_P(PSTR("WS multipart message: final %u index %u len %u total %u\n"), info->final, info->index, len, (uint32_t)info->len);
//message is comprised of multiple frames or the frame is split into multiple packets
//if(info->index == 0){
//if (!wsFrameBuffer && len < 4096) wsFrameBuffer = new uint8_t[4096];
//}

When trying videolab on a setup with 128x64 pxels (wled 16.0 HUB75), I still have a very laggy/jumpy playback at low FPS. In debug mode, there are tons of WS multipart messages that arrive from the frontend. Multi-part messages are not reduced when lowering the maxDDPpx parameter in common.js. My conclusion is that the esp32 side is splitting some ws messages into multi-part, especially when the receiver is under heavy load.

I think we should implement multi-part binary message handling, to improve performance on fixtures that are larger than 48x64 pixels.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions