
Low-latency marine streaming with Rust and GStreamer

Written by
FluendoApril 10, 2025
The request
Fluendo’s Consulting Services team was approached to develop a video streaming solution for marine scenarios. The architecture should support multiple cameras from the devices streamed with low latency to the various clients who connect to it.
The client is a global company that provides marine insights through robotics and data analytics. Their solution aims to reduce the frequency of underwater inspections and significantly cut operational costs through advanced models.
Features
The architecture has been designed to work in two modes:
- RTSP: When applying the solution through local networks.
- WebRTC: Enables global network interconnectivity between different peers.
Both of them support multiple video qualities and test input modes. The system includes both application clients and containerized environments for deployment.
Project constraints
The project had several requirements:
- Encode H.264 video in Intel hardware in Windows
- Allow to send the video through the internet to any client
- Use low-latency protocols
The aim was to stream the available cameras simultaneously (one camera should not block the other). The application should be able to work with multiple instances, i.e. without having global and unique elements, enabling it to work as self-contained objects.
The Fluendo’s Solution
This was the first Consulting Services project fully developed in Rust. All the application elements were based on the latest versions of GStreamer Rust, which definitely helped to speed up the development.
Server
The server, operating in RTSP mode, delivers a single encoded stream for all clients. A low-buffering configuration (100ms) ensures minimal latency while maintaining high-quality streaming.
When operating in WebRTC mode, the server application connects to the signaller, retrieves its public IP via STUN, and dynamically initiates streaming upon client connection. Each client receives a dedicated video stream using webrtcsink
from the GStreamer Rust repository.
Signaller
The signaller is the manager of the different peers: one producer and multiple consumers. It connects them, taking care of the offering, answer, and SDP negotiation needed for WebRTC. It is an element that was containerized to allow our client to quickly raise as many instances as needed in cloud environments.
Client
For this company, we implemented two different client solutions:
- Without UI: Supports both RTSP and WebRTC mode
- With UI: Supports WebRTC and handles several connectivity problems
In both cases, webrtcsrc
connects to the signaller as a consumer when working in WebRTC mode. The UI was developed with a framework called Slint
. This framework, which works with Rust applications, allowed us to define a simple interface with a language similar to QML. In fact, for C++ interoperability, Slint
uses Qt under the hook.
Delivery
Fluendo’s team successfully deployed the solution on the target system and provided the client with a walkthrough of the application. This ensured the client received a product that worked in their target embedded device.
Conclusion
Fluendo successfully designed and deployed a production-ready, low-latency video streaming solution for embedded marine applications. A key advantage was Rust’s memory safety, eliminating memory leaks and threading issues, streamlining the QA development process and accelerating delivery.
Committed to the quality of the product, we iterated it several times until we achieved what the client was looking for. This project lays the foundation for a long-term partnership, with future enhancements including multi-camera management, video filtering, and more innovative features.
Get in Touch
At Fluendo, we specialize in developing high-performance video streaming solutions tailored to your specific needs. Whether you’re looking for low-latency streaming, multi-camera support, or scalable embedded solutions, our expert team is ready to help.
Want to learn more or discuss your project? Contact us today, and let’s build the future of video streaming together!