smolrtsp is a free, open source digital asset management (dam) project written in C and released under MIT. It has 508 GitHub stars, 118 forks and 1 open issues, and was last pushed 14 days ago. On this registry it ranks #24 of 25 tracked projects in Digital Asset Management (DAM), with 5 head-to-head comparisons available.

What is smolrtsp?

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

OpenIPC Logo

SmolRTSP

CI Docs

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:
    • RTSP 1.0 (RFC 2326)
    • RTP (RFC 3550)
    • RTP over TCP (interleaved binary data)
    • RTP over UDP
    • SDP (RFC 4566)
    • RTCP (RFC 3550):
      • Sender Report (SR), Receiver Report (RR), SDES (single CNAME), and BYE serialization
  • 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

Option Description Default
SMOLRTSP_SHARED Build a shared library instead of static. OFF
SMOLRTSP_FULL_MACRO_EXPANSION Show full macro expansion backtraces (DANGEROUS: may impair diagnostics and slow down compilation). OFF

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.

server demo

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

  1. Update the PROJECT_NUMBER field in Doxyfile.
  2. Update CHANGELOG.md.
  3. Release the project in GitHub Releases.

Frequently asked questions

Is smolrtsp free to use?

smolrtsp is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does smolrtsp do?

A lightweight real-time streaming library for IP cameras

What is smolrtsp written in?

smolrtsp is primarily written in C. Its source is publicly available at https://github.com/OpenIPC/smolrtsp, and it has 508 GitHub stars.