feat(VideoManager): add WebSocket JPEG video source - #14731
Conversation
3bbdf58 to
c2e4e9f
Compare
df8edb0 to
e2b9427
Compare
Build ResultsPlatform Status
Some builds failed. Pre-commit
Pre-commit hooks: 2 passed, 76 failed, 7 skipped. Updated: 2026-09-03 04:20:07 UTC • Commit: 743d6d0 • Triggered by: Linux |
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 |
a686beb to
924ad71
Compare
082bc25 to
7d37d7b
Compare
|
Restacked this branch at
Local checks passed: JSON parsing, |
7d37d7b to
743d6d0
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 PR is stacked after #14730 at
d5ab4fbd5980522a788cb186c17c424d51b2ca8c. Compared with that exact HTTP head, the WebSocket slice is 17 files with 1,324 additions and 27 deletions. The branch no longer carries the independent #14727 work or duplicates the fixture already merged through #14729.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.
Current head:
743d6d08d986ef03997971b583d9e5934610b386. Fresh exact-head CI is running after the rebase. The previous integrated head completed the QGC Linux x64/arm64, unit/integration, sanitizer, coverage, Windows, macOS, iOS, Android, Docker, custom-plugin, and CodeQL checks.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).