SmolRTSP is a small MIT-licensed C library that implements an RTSP 1.0 server for embedded devices such as IP cameras, aimed at firmware and camera-platform developers who need to serve live video and audio from constrained hardware.
What it is
SmolRTSP is an RTSP 1.0 (RFC 2326) server library tailored for embedded devices, such as IP cameras. It supports both TCP and UDP, allows any payload format, and exposes a convenient and flexible API. The project lives in the OpenIPC ecosystem, and its parser is zero-copy: no data is allocated or copied while parsing. The library is also unopinionated about networking, so it can run on bare POSIX sockets, on libevent, or on any other network framework rather than forcing a particular event loop.
The concrete problem it solves is that a camera firmware developer who wants to stream live video must otherwise hand-roll RTSP signalling, RTP packetization, SDP session description, and RTCP control messages, or adopt a general-purpose media server whose footprint and dependencies do not fit embedded hardware. SmolRTSP replaces that hand-rolled stack with a library that implements the protocols directly and does not allocate on the parsing path, which matters on devices with tight RAM budgets. Because it is a library rather than an application, it also replaces the assumption that streaming means running a separate daemon.
Key capabilities
- Implements RTSP 1.0 (RFC 2326), RTP (RFC 3550) over both TCP as interleaved binary data and UDP, and SDP (RFC 4566).
- Serializes RTCP packets: Sender Report (SR), Receiver Report (RR), SDES with a single CNAME, and BYE.
- Supports RTP payload formats H.264 (RFC 6184), H.265 (RFC 7798), H.266/VVC (RFC 9328), JPEG XS (RFC 9134) in codestream and slice packetization modes, and AV1 with one OBU per packet and Z/Y fragmentation.
- Parses without allocating or copying, so no heap traffic occurs on the parsing path.
- Stays agnostic to the network backend; the official integration is
OpenIPC/smolrtsp-libevent for libevent.
- Integrates through CMake with options
SMOLRTSP_SHARED (default OFF, builds a shared library instead of static) and SMOLRTSP_FULL_MACRO_EXPANSION (default OFF, shows full macro expansion backtraces and is marked DANGEROUS).
- Ships a reference server at
examples/server.c that streams H.264 video and G.711 Mu-Law audio, with optional extra streams enabled by -DENABLE_JPEGXS=ON for /jpegxs, -DENABLE_AV1=ON for /av1, and -DENABLE_VVC=ON for /vvc.
Who uses it and how
- OpenIPC's Majestic, an IP camera streamer, uses SmolRTSP, so the library is exercised in real camera firmware rather than only in samples.
- Embedded firmware developers building RTSP serving into camera images benefit from the small footprint and the absence of allocation or copying during parsing.
- Teams that already own an event loop or network framework can attach SmolRTSP on top of it, either through the libevent integration or through their own POSIX socket handling.
- Projects using CMake pull the library in with
FetchContent and link it with target_link_libraries(MyProject smolrtsp), receiving a static library unless SMOLRTSP_SHARED is turned on.
- Developers evaluating the protocol coverage can build
examples/server.c, run sudo ./server, and play the stream back with ffplay rtsp://localhost.
Getting started
The recommended install is CMake FetchContent: declare the source as https://github.com/OpenIPC/smolrtsp/archive/refs/tags/v1.2.3.tar.gz, call FetchContent_MakeAvailable(smolrtsp), and link the smolrtsp target. The README documents no Docker image, package manager entry, or hosted service, so a CMake-based C project is the supported path.
How it compares
The facts provided name no list of paid products that SmolRTSP replaces, and they name no comparable streaming library either, so on the evidence available it stands alone in this registry. It is best understood as a protocol library that a developer links into firmware, not as a standalone media server product.
When to use it — and when not to
A self-hoster must supply the network or event loop, wire up payload packetization, and build with CMake, since there is no packaged distribution, Docker image, or hosted option in the facts. Teams wanting a turnkey media server with camera configuration, authentication, or storage should not pick this, because the facts show it provides none of those. The main weakness evident here is a sparse README-supported surface: one documented integration (smolrtsp-libevent), no prebuilt artifacts, and adoption that requires writing server code around the library.
project readme (upstream, from github) — read inline

SmolRTSP

SmolRTSP is a simple RTSP 1.0 server library tailored for embedded devices, such as IP cameras. It supports both TCP and UDP, allows any payload format, and provides a convenient and flexible API.
Highlights
- Small. SmolRTSP is designed for use in embedded systems (e.g., IP cameras).
- Unopinionated. You can use SmolRTSP with bare POSIX sockets, libevent, or any other network framework.
- Zero-copy. SmolRTSP does not allocate or copy data while parsing.
- Battle-tested. SmolRTSP is used by Majestic, an IP camera streamer developed by OpenIPC.
Features
- Supported protocols:
- Supported RTP payload formats:
Installation
If you use CMake, the recommended way is FetchContent:
include(FetchContent)
FetchContent_Declare(
smolrtsp
URL https://github.com/OpenIPC/smolrtsp/archive/refs/tags/v1.2.3.tar.gz # v1.2.3
)
FetchContent_MakeAvailable(smolrtsp)
target_link_libraries(MyProject smolrtsp)
Options
Usage
A simple example server that streams H.264 video and G.711 Mu-Law audio can be found at examples/server.c. The same server can also advertise additional streams: pass -DENABLE_JPEGXS=ON for JPEG XS on the /jpegxs path, -DENABLE_AV1=ON for AV1 on the /av1 path, or -DENABLE_VVC=ON for H.266 / VVC on the /vvc path.

Run it as follows:
$ mkdir examples/build
$ cd examples/build
$ cmake .. && cmake --build .
$ sudo ./server
Then open a new terminal window to start playing:
$ ffplay rtsp://localhost
Integration
SmolRTSP is agnostic to a network backend: you can run it atop of any network/event loop framework. Currently, we support the following integrations:
Feel free to extend this list with your own integration code.
Release procedure
- Update the
PROJECT_NUMBER field in Doxyfile.
- Update
CHANGELOG.md.
- Release the project in GitHub Releases.