Live streaming server with RTMP support and automatic Nostr broadcasting. Built in Go with configurable recording and real-time metadata updates.
- RTMP Streaming: Built-in RTMP server for live streaming
- HLS Conversion: Automatic conversion to HLS format for web playback
- Nostr Broadcasting: Automatic event publishing to Nostr relays
- Real-time Updates: Edit stream info while live streaming
- Recording Control: Toggle recording on/off per stream
- Archive System: Automatic archival of recorded streams
- Web Interface: Simple web viewer for your streams
- FFmpeg (required for RTMP processing and HLS conversion)
Linux (Ubuntu/Debian):
sudo apt update
sudo apt install ffmpegmacOS:
brew install ffmpegWindows:
- Download from ffmpeg.org
- Add to PATH environment variable
-
Download the latest release
- Go to Releases
- Download the appropriate file for your platform:
- Linux:
gnostream-linux-amd64.tar.gz - macOS (Intel):
gnostream-darwin-amd64.tar.gz - macOS (M1/M2):
gnostream-darwin-arm64.tar.gz - Windows:
gnostream-windows-amd64.zip
- Linux:
-
Extract and setup
# Linux/macOS tar -xzf gnostream-*.tar.gz cd gnostream-*/ # Windows: Extract the ZIP file and open the folder
-
Configure
# Copy and edit the example configs cp config.example.yml config.yml cp stream-info.example.yml stream-info.yml # Edit config.yml with your Nostr private key and server settings # Edit stream-info.yml with your stream details
-
Run
# Linux/macOS ./gnostream # Windows gnostream.exe
-
Start streaming
- RTMP URL:
rtmp://your-server-ip:1935/live - Web viewer:
http://your-server-ip:8181
- RTMP URL:
-
Prerequisites: Go 1.21+
-
Clone and build
git clone https://github.com/yourusername/gnostream.git cd gnostream go mod tidy go build -o gnostream -
Follow steps 3-5 from Option 1 above
server:
port: 8181
host: "0.0.0.0"
external_url: "https://live.yourdomain.com"
rtmp:
port: 1935
host: "0.0.0.0"
nostr:
private_key: "nsec1abc..." # Your Nostr private key
delete_non_recorded: false # Auto-delete events for streams without recordings
relays:
- "wss://relay.damus.io"
- "wss://wheat.happytavern.co"
- "wss://relay.nostr.band"
stream_info_path: "stream-info.yml"title: "My Live Stream"
summary: "Stream description here"
image: "https://example.com/thumbnail.jpg"
tags: ["live", "gaming", "chill"]
# Recording (true = save for later, false = live only)
record: false
# HLS Settings
hls:
segment_time: 10 # Seconds per segment
playlist_size: 10 # Segments to keep in playlist- Live streaming: Connect to RTMP - stream starts automatically
- Live updates: Edit
stream-info.ymlwhile streaming to update title, description, and tags - Recording control: Set
record: true/falseto save streams or stream live-only - Nostr events: Automatic start/update/end events broadcast to configured relays
- Event cleanup: Enable
delete_non_recordedto automatically remove Nostr events for streams that weren't recorded