QGC custom build extension for resilient multi-stream video display

Hi everyone,

We released a QGroundControl custom build extension for receiving and displaying iLive real-time video streams in QGC Flight View.

GitHub:

Demo video:

The motivation is straightforward: many UAV systems already use QGroundControl as part of their ground station workflow, and maintaining a heavily modified GCS can become expensive over time. We wanted to keep the upstream QGC checkout unchanged while adding a cleaner custom-build path for resilient video display under weak, unstable, or asymmetric wireless links.

Current scope:

  • QGroundControl v5.0.8 baseline
  • Linux x86_64 source build
  • 1 to 8 iLive video streams
  • grid and primary-plus-thumbnails layouts
  • decoded BGRA/RGB24 frame rendering through the iLive C player API
  • stream URLs configured through local iLiveVideo.json
  • optional startup selection between iLive and QGC native GStreamer backend
  • upstream QGC checkout remains unchanged; composition happens in a separate worktree

The demo compares RTSP and iLive video playback in QGroundControl under controlled weak-network conditions.

Limitations:

  • this is not a runtime-loadable QGC plugin
  • the proprietary iLive SDK is not included and must be obtained separately
  • current release does not include remote bitrate control, stream-priority control, or iLive data/MAVLink bridging

SDK / integration contact:
iliveio.dev@gmail.com

We would appreciate feedback from ArduPilot/QGC users on:

  • whether this type of QGC custom build extension is useful in real ground-station workflows;
  • compatibility concerns around QGC v5.x;
  • multi-stream video display requirements for payloads, onboard computers, or multi-vehicle systems;
  • whether there are better integration patterns we should consider.

that seems interesting but it looks like it breaks the QGC licensing and give an non auditable code into QGC so that could be security issues.

Contributing to improving QGC gstreamer configuration for better stream quality adaption would be a better move IMHO

Thanks — these are valid concerns.

To clarify, this repository provides only the auditable source integration
layer for a QGroundControl custom build. It does not distribute QGroundControl,
Qt, the proprietary iLive SDK, or a combined binary. The iLive SDK is obtained
separately and runs inside the QGC process, so it is an external binary trust
boundary. We have updated the documentation to make this boundary and the
attribution of QGC-derived files more explicit.

OEMs and integrators are responsible for licensing their final combination of
QGroundControl, Qt, the iLive SDK, and other dependencies. For proprietary
distribution, QGroundControl documents the intended path as QGC under
Apache-2.0 together with a valid Commercial Qt license:

Regarding GStreamer, v0.2.1 retains QGC’s native GStreamer backend and allows
either GStreamer or iLive to be selected at startup. General GStreamer
improvements are valuable and complementary.

The iLive backend is designed for resilient real-time video delivery under
moderate-to-poor and unstable network conditions, including packet loss,
jitter, bandwidth fluctuation, and severely bandwidth-constrained networks.
Its transport and recovery mechanisms are implemented by the separately
supplied iLive SDK, rather than as a replacement for or a simple
reconfiguration of QGC’s GStreamer pipeline. Actual performance depends on
the stream configuration, hardware, and network conditions.

Thanks for helping us clarify this.