Skip to content

Conversation

@andrescera
Copy link
Member

Summary

Merges the enhanced srtla_rec from irlserver/srtla, which includes significant improvements:

  • New modular architecture: Refactored receiver into separate modules (connection/, protocol/, quality/, utils/)
  • ACK throttling for load balancing: Server-side control of connection preference without client modifications
  • Connection recovery mechanism: Connections can recover from temporary outages instead of being disabled
  • Connection quality assessment: Metrics-based quality evaluation with weight levels (10%-100%)
  • Static spdlog via FetchContent: More portable builds

Changes

  • Merged irlserver/main into CERALIVE/srtla
  • Resolved conflicts in CMakeLists.txt (kept tests + clang-tidy from our version, new architecture from irlserver)
  • Resolved conflicts in README.md (combined user-friendly docs with technical details)
  • Updated TypeScript bindings for new receiver CLI (--log_level instead of --verbose)

New Receiver CLI

srtla_rec --srtla_port 5000 --srt_hostname 127.0.0.1 --srt_port 4001 --log_level debug

Log levels: trace, debug, info, warn, error, critical

Test Plan

  • C++ build succeeds
  • All 31 C++ tests pass
  • TypeScript bindings type check passes
  • All 14 TypeScript tests pass
  • Both srtla_rec --help and srtla_send --help work correctly

servusrene and others added 30 commits May 20, 2025 17:05
…very

- Added connection quality assessment based on bandwidth and packet loss
- Introduction of an ACK throttling mechanism for indirect client load balancing
- Implemented a recovery mechanism for connections with temporary problems
Change bandwidth evaluation from average-based to max/median baseline to prevent good connections being degraded by poor performers. Use 80% of best connection performance as baseline with stricter thresholds (85%+ expected bandwidth = no penalty).
Co-Authored-By: René <48084558+servusrene@users.noreply.github.com>
…milarity

- Use median-based expectation (80%) when all connections perform similarly
- Use individual performance-based expectation (70%) for mixed quality scenarios
- Ensures fair distribution among similar connections while protecting good ones
- Add two new weight levels: WEIGHT_EXCELLENT (85%) and WEIGHT_FAIR (55%)
- Adjust error point thresholds for better differentiation:
  * 0-4 points: FULL (100%)
  * 5-9 points: EXCELLENT (85%)
  * 10-14 points: DEGRADED (70%)
  * 15-24 points: FAIR (55%)
  * 25-39 points: POOR (40%)
  * 40+ points: CRITICAL (10%)
- Merge weight and throttle calculation into single pass
- Implement unified throttle formula: min(absolute, relative)
- Ensure minimum 20% ACK rate for connection health
- Add better logging for weight/throttle changes
- Add ACK logging in trace
Previously, one poor connection forced all connections into adaptive mode.
Now each connection is evaluated individually:
- Poor connections (<50% median) use minimum threshold
- Good connections target median
- Exclude poor connections from median calculation to prevent target distortion
- Add GOOD_CONNECTION_THRESHOLD constant for consistent 50% thresholds
- Use filtered median for realistic convergence targets
- Updated SEND_BUF_SIZE and RECV_BUF_SIZE to 100 MB to avoid overruns with higher bitrates and latency values.
datagutt and others added 29 commits December 4, 2025 15:21
- Added RTT-based metrics to ConnectionStats for enhanced latency tracking.
- Introduced NAK count validation for accurate packet loss detection.
- Implemented window utilization analysis to monitor congestion and throttling.
- Added bitrate validation to compare sender and receiver measurements.
- Updated QualityEvaluator to integrate new metrics and error point calculations.
- Enhanced documentation to reflect changes and provide implementation details.
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
The merged irlserver receiver uses --log_level instead of --verbose.
Updated TypeScript bindings to match:
- Changed verbose boolean to logLevel enum (trace/debug/info/warn/error/critical)
- Updated default srt_port from 5001 to 4001 to match CLI
- Updated tests for new interface

Also includes improved TypeScript type declarations from build.
Simplified build workflows:
- Use ubuntu-24.04-arm for native ARM64 builds
- Removed Docker, QEMU, and buildx complexity
- Build directly with cmake on runner
- Added test execution to build-check
- Removed srt/libspdlog dependencies from .deb (built statically via FetchContent)

This significantly reduces build time and complexity.
@andrescera andrescera merged commit 473733c into main Jan 24, 2026
4 checks passed
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 this pull request may close these issues.

6 participants