RTSP Plugin
The RTSP plugin provides complete RTSP server and client functionality for Monibuca, enabling RTSP stream publishing, playback, and proxying.
Features
- RTSP Server: Accept RTSP client connections for stream publishing and playback
- RTSP Client: Pull streams from remote RTSP sources
- Dual Transport Modes: Support both TCP and UDP transport protocols
- Authentication: Built-in username/password authentication
- Bidirectional Proxy: Support for both pull and push proxying
- Standard Compliance: Implements RTSP protocol (RFC 2326/RFC 7826)
Configuration
rtsp:
tcp:
listenaddr: :554 # RTSP server listening address
username: "" # Authentication username (optional)
password: "" # Authentication password (optional)
udpport: 20001-30000 # UDP port range for media transmission
Configuration Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
tcp.listenaddr |
string | :554 |
RTSP server listening address and port |
username |
string | "" |
Authentication username (empty = no auth) |
password |
string | "" |
Authentication password |
udpport |
range | 20001-30000 |
UDP port range for RTP/RTCP transmission |
Usage
Pull RTSP Stream
Pull a remote RTSP stream into Monibuca:
rtsp:
pull:
camera1:
url: rtsp://admin:password@192.168.1.100/stream
Or use the unified API:
curl -X POST http://localhost:8080/api/stream/pull \
-H "Content-Type: application/json" \
-d '{
"protocol": "rtsp",
"streamPath": "camera1",
"remoteURL": "rtsp://admin:password@192.168.1.100/stream"
}'
Push Stream via RTSP
Push a stream from Monibuca to a remote RTSP server:
rtsp:
push:
camera1:
target: rtsp://192.168.1.200/live/stream
Publish Stream to Monibuca RTSP Server
Use FFmpeg or other RTSP clients to publish streams:
ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://localhost:554/live/stream
Play Stream from Monibuca RTSP Server
Use any RTSP client to play streams:
ffplay rtsp://localhost:554/live/stream
Or with VLC, OBS, or other RTSP-compatible players.
Transport Modes
TCP Transport (Interleaved Mode)
- More reliable, works through firewalls
- Higher latency
- Automatic fallback option
UDP Transport
- Lower latency
- Better for local networks
- Requires open UDP port range
- RTP/RTCP use separate ports
RTSP Methods Supported
| Method | Direction | Description |
|---|---|---|
| OPTIONS | Both | Query supported methods |
| DESCRIBE | Pull | Get stream SDP information |
| ANNOUNCE | Push | Declare stream for publishing |
| SETUP | Both | Setup transport parameters |
| PLAY | Pull | Start playing stream |
| RECORD | Push | Start recording/publishing |
| TEARDOWN | Both | Close connection |
Authentication
When username and password are configured, the server requires HTTP Basic Authentication:
rtsp:
username: admin
password: secret123
Clients must provide credentials in the URL:
rtsp://admin:secret123@localhost:554/live/stream
Advanced Features
Pull Proxy
Automatically pull and cache remote RTSP streams. Configure under the global node:
global:
pullproxy:
- id: 1 # Unique ID, must be > 0
name: "camera-1" # Pull proxy name
type: "rtsp" # Protocol type
streampath: "live/camera1" # Stream path in Monibuca
pullonstart: true # Auto-pull on startup
pull:
url: "rtsp://admin:password@192.168.1.100/stream"
description: "Front door camera"
- id: 2
name: "camera-2"
type: "rtsp"
streampath: "live/camera2"
pullonstart: false
pull:
url: "rtsp://admin:password@192.168.1.101/stream"
Or use the API to manage pull proxies dynamically (see API Endpoints section below).
Push Proxy
Automatically push streams to remote RTSP servers. Configure under the global node:
global:
pushproxy:
- id: 1 # Unique ID, must be > 0
name: "push-1" # Push proxy name
type: "rtsp" # Protocol type
streampath: "live/stream1" # Source stream path
pushonstart: true # Auto-push on startup
push:
url: "rtsp://192.168.1.200/live/stream1"
description: "Push to remote server"
Or use the API to manage push proxies dynamically (see API Endpoints section below).
Compatibility
Tested Devices/Software
- ✅ FFmpeg
- ✅ VLC Media Player
- ✅ OBS Studio
- ✅ ONVIF-compliant devices
Known Issues
See BAD_DEVICE.md for devices with non-standard RTSP implementations.
Codec Support
The plugin transparently passes through codec information. Supported codecs depend on the source and destination:
Video: H.264, H.265/HEVC, MPEG-4, MJPEG
Audio: AAC, G.711 (PCMA/PCMU), G.726, MP3, OPUS
Performance Tips
- Use TCP transport for streams over the internet
- Use UDP transport for local network streams (lower latency)
- Adjust UDP port range based on concurrent stream count
- Enable authentication to prevent unauthorized access
- For high-concurrency scenarios, consider hardware transcoding
Troubleshooting
Connection Refused
- Check if port 554 requires root/administrator privileges
- Try a different port (e.g., 8554)
- Verify firewall settings
No Video/Audio
- Check codec compatibility between source and client
- Verify SDP information in logs
- Test with VLC or FFplay to isolate issues
UDP Packet Loss
- Increase UDP port range
- Switch to TCP transport
- Check network quality and bandwidth
API Endpoints
Pull Stream
Use the unified pull API with protocol set to rtsp:
POST /api/stream/pull
Content-Type: application/json
{
"protocol": "rtsp",
"streamPath": "camera1",
"remoteURL": "rtsp://admin:password@192.168.1.100/stream",
"pubAudio": true,
"pubVideo": true
}
Parameters:
protocol(required): Set to"rtsp"streamPath(required): Local stream path in MonibucaremoteURL(required): Remote RTSP URL to pull frompubAudio(optional): Enable audio publishingpubVideo(optional): Enable video publishingtestMode(optional): 0 = normal pull, 1 = pull without publishing- Additional publish configuration options available (see GlobalPullRequest in global.proto)
Stop Stream
POST /api/stream/stop/{streamPath}
Manage Pull/Push Proxy
GET /api/proxy/pull/list- List all pull proxiesPOST /api/proxy/pull/add- Add a pull proxyPOST /api/proxy/pull/update- Update a pull proxyPOST /api/proxy/pull/remove/{id}- Remove a pull proxyGET /api/proxy/push/list- List all push proxiesPOST /api/proxy/push/add- Add a push proxyPOST /api/proxy/push/update- Update a push proxyPOST /api/proxy/push/remove/{id}- Remove a push proxy
Acknowledgments
This plugin references code and implementation ideas from the excellent go2rtc project by AlexxIT, which provides a comprehensive media server solution with advanced streaming capabilities.
License
This plugin is part of the Monibuca project and follows the same license terms.