feat(VideoManager): add WebSocket JPEG video source - #14731
Conversation
3bbdf58 to
c2e4e9f
Compare
df8edb0 to
e2b9427
Compare
Build ResultsPlatform Status
All builds passed. Pre-commit
Pre-commit hooks: 0 passed, 0 failed, 0 skipped. Test Resultslinux-coverage-integration: 37 passed, 0 skipped Code CoverageCoverage: 69.5% No baseline available for comparison Artifact Sizes
Updated: 2026-07-31 02:53:08 UTC • Commit: 082bc25 • Triggered by: Android |
365a7e8 to
1b02cf9
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #14731 +/- ##
==========================================
+ Coverage 25.47% 32.70% +7.23%
==========================================
Files 769 785 +16
Lines 65912 68063 +2151
Branches 30495 31556 +1061
==========================================
+ Hits 16788 22261 +5473
+ Misses 37285 30761 -6524
- Partials 11839 15041 +3202
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 469 files with indirect coverage changes Continue to review full report in Codecov by Harness.
🚀 New features to boost your workflow:
|
|
@HTRamsey, this focused WS/WSS JPEG transport slice is ready for review at It is stacked directly on the HTTP MJPEG source in #14730. The incremental The exact head passed Linux release builds, 189 unit and 63 integration tests, This transport remains generic and unauthenticated. It does not add For clarity, the aggregate build comment labels pre-commit as “failed |
cefd23d to
4939a8f
Compare
4939a8f to
a686beb
Compare
a686beb to
924ad71
Compare
Description
This adds a generic WebSocket JPEG Video Stream source. Each binary WebSocket message carries one complete JPEG image; text messages are ignored.
The implementation:
ws://andwss://URLs in Video settings;QWebSocketon a dedicated Qt event-loop thread and feeds boundedappsrc ! jpegparseinto the existing receiver;This first transport slice proves live reception. It does not change recording policy and supports unauthenticated endpoints only; authorization headers and secret storage belong in a separate generic security proposal.
This is stacked after #14730, which carries #14727 and #14729. Compared with the exact HTTP head, the WebSocket slice is 17 files with 1,325 additions and 27 deletions, with substantial validation, TLS, delivery, failure, and lifecycle coverage.
Type of Change
Testing
An integrated candidate containing this transport was manually exercised on Linux, Windows, and Android. Camera-free tests cover valid and fragmented JPEG delivery, malformed-message closure, baseline and progressive JPEG validation, decoded-size limits, bounded queues, trusted and untrusted WSS, handshake failure, remote disconnect, immediate teardown, unsafe URLs, and receiver lifecycle.
The focused transport probe previously passed 100/100 delivery runs and 100/100 untrusted-WSS error-delivery runs; the same paths passed 20/20 each under ASan/UBSan.
Exact PR head:
082bc258bd0bf007f813c6c805ceb830820062aa.Exact-head QGC CI is complete: Linux x64/arm64 release builds, unit and integration tests, ASan/UBSan, coverage thresholds, Windows, macOS, iOS, Android, Docker, custom-plugin, and CodeQL checks passed. Linux evidence: run 30598327092.
Platforms Tested
Flight Stacks Tested
Not applicable; this change is confined to video reception.
Screenshots
Not applicable; the UI addition uses the existing Video settings layout.
Checklist
Related Issues
By submitting this pull request, I confirm that my contribution is made under the terms of the project's dual license (Apache 2.0 and GPL v3).