Skip to content

Subscription ​

Subscription is another core feature of Monibuca that allows clients to play streams from Monibuca using multiple protocols.

Supported Protocols ​

Monibuca supports various subscription protocols:

  • RTMP/RTMPS
  • RTSP/RTSPS
  • SRT
  • HTTP-FLV
  • WebSocket-FLV
  • HTTP-MP4
  • HLS
  • WebRTC

Configuration ​

HTTPS/WSS Security Configuration ​

To enable HTTPS and WSS (WebSocket Secure) access, add SSL certificate configuration in the config file:

yaml
# config.yaml
global:
  http:
    listenaddr: :8080
    # Secure connection configuration
    listenaddrtls: :8443
    certfile: /path/to/cert.pem
    keyfile: /path/to/key.pem

Detailed Subscription Configuration ​

⚠️ Warning ​

Do not directly copy the following complete configuration. Monibuca only needs the parameters you want to modify, other parameters will use default values. Copying the entire configuration may override default parameters set elsewhere, causing unexpected issues. The following configuration is for reference only, explaining the meaning and default values of each parameter.

Here are the detailed subscription (Subscribe) configuration options that can be used in global configuration or specific plugin configuration:

yaml
subscribe:
  maxcount: 0
  subaudio: true
  subvideo: true
  buffertime: 0s
  submode: 0
  syncmode: 1
  iframeonly: false
  waittimeout: 10s
  writebuffersize: 0
  key: ""
  subtype: ""

Configuration Notes ​

Subscribe configuration can be set in two locations:

  1. Global Configuration: Applies to all streams as default configuration
  2. Plugin Configuration: Only applies to streams of specific plugins, overrides global configuration

Important notes:

  • Only configure parameters you want to modify, unconfigured parameters will use default values
  • Plugin configuration overrides parameters with the same name in global configuration

Configuration Examples ​

Global Configuration Example:

yaml
# config.yaml
global:
  subscribe:
    waittimeout: 30s  # Change stream wait timeout to 30 seconds
    iframeonly: true  # Only transmit keyframes to save bandwidth

Specific Plugin Configuration Example:

yaml
# config.yaml
global:
  subscribe:
    waittimeout: 30s

# HTTP-FLV plugin specific configuration
flv:
  subscribe:
    writebuffersize: 4096  # Set larger write buffer
    waittimeout: 60s  # Override global config, FLV stream wait timeout changed to 60 seconds

# HLS plugin specific configuration
hls:
  subscribe:
    buffertime: 3s  # HLS buffer 3 seconds of content

Usage Examples ​

You can subscribe to streams in Monibuca using various client protocols:

HLS Subscription ​

# HTTP method
http://your-server:8080/hls/live/stream/index.m3u8

# HTTPS method
https://your-server:8443/hls/live/stream/index.m3u8

HTTP-FLV Subscription ​

# HTTP method
http://your-server:8080/flv/live/stream

# HTTPS method
https://your-server:8443/flv/live/stream

WebSocket-FLV Subscription ​

You can use WebSocket to subscribe to FLV streams from the server, suitable for browser playback:

# WS method
ws://your-server:8080/flv/live/stream

# WSS encrypted method
wss://your-server:8443/flv/live/stream

HTTP-MP4 Subscription ​

Used for VOD MP4 files or outputting live streams in MP4 format:

// Live stream
http://your-server:8080/mp4/live/stream

// VOD with specified time range
http://your-server:8080/mp4/live/stream?start=1620000000&end=1620001000

// VOD from specified start time until current
http://your-server:8080/mp4/live/stream?start=1620000000

RTMP Subscription ​

rtmp://your-server:1935/live/stream

RTSP Subscription ​

rtsp://your-server:554/live/stream

FFPlay Playback Examples ​

FFPlay is part of FFmpeg and can be used for low-latency playback of various protocol streams:

RTMP Playback ​

bash
# Basic playback
ffplay rtmp://your-server:1935/live/stream

# Low latency settings
ffplay -fflags nobuffer -flags low_delay -framedrop rtmp://your-server:1935/live/stream

RTSP Playback ​

bash
# Use TCP transport for better stability
ffplay -rtsp_transport tcp rtsp://your-server:554/live/stream

# Low latency settings
ffplay -fflags nobuffer -flags low_delay -framedrop -rtsp_transport tcp rtsp://your-server:554/live/stream

HTTP-FLV Playback ​

bash
# Basic playback
ffplay http://your-server:8080/flv/live/stream

# Low latency settings
ffplay -fflags nobuffer -flags low_delay -framedrop http://your-server:8080/flv/live/stream

HLS Playback ​

bash
# HLS is usually not suitable for low latency scenarios, but you can try these settings
ffplay -fflags nobuffer http://your-server:8080/hls/live/stream/index.m3u8

Important Notes ​

  1. Choose appropriate protocol based on client environment, e.g., HLS, HTTP-FLV, or WebSocket-FLV for browser environments
  2. WebRTC or WebSocket-FLV recommended for low latency scenarios
  3. HLS or HTTP-MP4 recommended for mobile devices
  4. Set appropriate buffer size to balance latency and smoothness

Common Issues ​

  1. High Playback Latency

    • Reduce buffer time
    • Adjust subscription mode to real-time mode
    • Consider using low latency protocols like WebRTC or WebSocket-FLV
  2. Unstable Playback

    • Increase buffer time
    • Check if network bandwidth is sufficient
    • Consider reducing video bitrate or resolution
  3. Unable to Play

    • Confirm if stream exists on server
    • Check if URL path format is correct
    • Verify if player supports the protocol

Key Parameters for Low Latency Playback ​

When using FFPlay or FFmpeg-based players, these parameters are helpful for reducing latency:

  • -fflags nobuffer: Disable frame buffering
  • -flags low_delay: Enable low delay mode
  • -framedrop: Drop lagging frames to maintain real-time
  • -probesize 32: Reduce probe size, speed up startup
  • -analyzeduration 0: Reduce analysis time
  • -sync ext: Use external clock sync, helpful for live streaming

Complete low latency FFPlay command example:

bash
ffplay -fflags nobuffer -flags low_delay -framedrop -probesize 32 -analyzeduration 0 -sync ext rtmp://your-server:1935/live/stream

Released under the AGPL License