Common issues, solutions, and diagnostic tools
If a stream fails to start or immediately stops after starting:
rtsp://, rtmp://, https://)# Test source connectivity from your server
ffprobe -v quiet -print_format json -show_streams "rtsp://source-url"
# Test with timeout
curl -m 10 -I "https://source-url/stream.m3u8"
If RTMP sources or restreaming destinations fail to connect:
rtmp://server:1935/live/stream-key format# Check if port 1935 is open
ss -tlnp | grep 1935
# Test RTMP connectivity
ffprobe -v error rtmp://your-server:1935/live/test
If your server CPU usage is consistently high:
CPU Guidelines per Stream: Passthrough ~1–2% | 720p ~15–25% | 1080p ~30–50% | 4K ~80–100%. See the Transcoding guide for details.
If viewers experience buffering or poor quality:
If audio and video are out of sync:
-async 1: Add this as an extra FFmpeg parameter to force audio sync# Check source stream timing
ffprobe -v error -show_entries stream=codec_type,start_time,duration \
-of default=noprint_wrappers=1 "rtsp://source-url"
If HTTPS is not working or browsers show certificate warnings:
# Check certificate expiry
openssl x509 -enddate -noout -in /etc/letsencrypt/live/yourdomain/cert.pem
# Test SSL connection
openssl s_client -connect yourdomain:443 -servername yourdomain
# Force certificate renewal
certbot renew --force-renewal
Important: Let's Encrypt certificates expire after 90 days. The auto-renewal process runs at the 60-day mark. If renewal fails, your HTTPS streams will stop working.
Ensure the following ports are open in your server's firewall:
| Port | Protocol | Purpose |
|---|---|---|
| 80 | TCP | HTTP web panel and HLS delivery |
| 443 | TCP | HTTPS secure web panel and HLS delivery |
| 1935 | TCP | RTMP ingest and restreaming |
| 8000+ | TCP | Radio/audio streaming ports |
# Open required ports with firewalld
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=1935/tcp
firewall-cmd --permanent --add-port=8000-8100/tcp
firewall-cmd --reload
# Or with UFW (Ubuntu)
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 1935/tcp
ufw allow 8000:8100/tcp
Use these commands to diagnose issues on your server:
# Check CPU and memory usage
top -bn1 | head -20
# Check disk space
df -h
# Check memory details
free -h
# Monitor real-time resource usage
htop
# Check listening ports
ss -tlnp
# Test source URL connectivity
curl -m 10 -o /dev/null -w "%{http_code}" "https://source-url"
# Check bandwidth usage
iftop -i eth0
# StreamDev application logs
/var/log/streamdev/
# FFmpeg process logs
/var/log/streamdev/ffmpeg/
# Web server logs
/var/log/nginx/access.log
/var/log/nginx/error.log
Tip: When contacting support, include the output of the diagnostic commands above along with your StreamDev version and server OS. This helps resolve issues faster.
HLS streaming generates temporary segment files on disk. Plan your storage accordingly:
Important: HLS segments are rotated automatically, so only a few minutes of segments are stored at any time. However, if you enable DVR/catchup recording, storage usage increases significantly. Monitor disk space regularly.
The number of concurrent streams depends on your encoding mode and server hardware. Typical limits on a modern 8-core server:
| Mode | Concurrent Streams | CPU Usage |
|---|---|---|
| Passthrough | 20–50 streams | Very Low (1–2% each) |
| 720p Transcoding | 4–8 streams | Moderate (15–25% each) |
| 1080p Transcoding | 2–4 streams | High (30–50% each) |
| 4K Transcoding | 1–2 streams | Very High (80–100% each) |
Tip: Mix passthrough and transcoding to maximize your server capacity. Only transcode streams that truly need resolution or bitrate changes.
HLS streaming introduces inherent latency due to its segment-based delivery method:
Tip: HLS is designed for reliability and compatibility, not ultra-low latency. If you need sub-5-second latency, consider using SRT for transport between servers and HLS only for final viewer delivery.
Important: Reducing HLS segment size below 2 seconds may cause playback issues on some devices. Always test with your target audience's devices before changing segment settings in production.