SmolRTSP: A lightweight real-time streaming library for IP cameras
GitHub - OpenIPC/smolrtsp: A lightweight real-time streaming library for IP cameras

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:

 RTSP 1.0 (RFC 2326)
 RTP (RFC 3550)
 RTP over TCP (interleaved binary data)
 RTP over UDP
 SDP (RFC 4566)
 RTCP


Supported RTP payload formats:

 H.264 (RFC 6184)
 H.265 (RFC 7798)



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.

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:

OpenIPC/smolrtsp-libevent (libevent)

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.

