Home

Complete Guide to go2rtc - Open Source Streaming Server Setup

· 3 min read
img of Complete Guide to go2rtc - Open Source Streaming Server Setup

What is go2rtc?

go2rtc is an ultimate camera streaming application that supports multiple protocols including RTSP, WebRTC, HomeKit, FFmpeg, and RTMP.

Key Features:

  • Zero-dependency, zero-configuration small application supporting all operating systems (Windows, macOS, Linux, ARM)
  • Zero-latency streaming with multiple protocols (lowest possible stream delay)
  • Stream from various sources: RTSP, RTMP, DVRIP, HTTP (FLV/MJPEG/JPEG/TS), USB cameras
  • Support for any FFmpeg-compatible source
  • Stream to RTSP, WebRTC, MSE/MP4, HomeKit, HLS, or MJPEG
  • Publish to popular streaming services (YouTube, Telegram, etc.)
  • First project worldwide to support streaming from HomeKit cameras
  • WebRTC with H265 support in browsers (Safari only)
  • Real-time transcoding for unsupported codecs via FFmpeg
  • Audio playback and live streaming on supported cameras
  • Multi-source bidirectional codec negotiation
    • Mix tracks from different sources into a single stream
    • Automatic codec matching for client support
    • Two-way audio on supported cameras
  • Stream from private networks via ngrok
  • Integration with any smart home platform or standalone use

Quick Start Guide

Binary Installation

Download the appropriate binary for your system from the latest release:

  • go2rtc_win64.zip - Windows 10+ 64-bit
  • go2rtc_win32.zip - Windows 7+ 32-bit
  • go2rtc_win_arm64.zip - Windows ARM 64-bit
  • go2rtc_linux_amd64 - Linux 64-bit
  • go2rtc_linux_i386 - Linux 32-bit
  • go2rtc_linux_arm64 - Linux ARM 64-bit (e.g., Raspberry 64-bit OS)
  • go2rtc_linux_arm - Linux ARM 32-bit (e.g., Raspberry 32-bit OS)
  • go2rtc_linux_armv6 - Linux ARMv6 (older Raspberry 1 and Zero)
  • go2rtc_linux_mipsel - Linux MIPS (e.g., Xiaomi Gateway 3, Wyze cameras)
  • go2rtc_mac_amd64.zip - macOS 10.13+ Intel 64-bit
  • go2rtc_mac_arm64.zip - macOS ARM 64-bit

Note: For Linux and Mac, remember to set execute permissions: chmod +x go2rtc_xxx_xxx

Docker Installation

The alexxit/go2rtc Docker container supports multiple architectures including amd64 , 386 , arm64 , and arm . This container provides the same functionality as the Home Assistant add-on but is designed to run independently. It comes pre-installed with FFmpeg, ngrok, and Python.

Home Assistant Add-on Installation

  1. Install the add-on:
    • Settings > Add-ons > Add Repository > Add https://github.com/AlexxIT/hassio-addons
    • go2rtc > Install > Start
  2. Configure the integration

Basic Configuration

By default, go2rtc looks for go2rtc.yaml in the current working directory:

  • api server starts on port 1984 (TCP)
  • rtsp server starts on port 8554 (TCP)
  • webrtc uses port 8555 (TCP/UDP) for connections
  • ffmpeg uses default transcoding options

Available modules:

  • streams - Stream configuration
  • api - HTTP API (essential for WebRTC)
  • rtsp - RTSP server (essential for FFmpeg)
  • webrtc - WebRTC server
  • mp4 - MSE, MP4 streaming and MP4 snapshot server
  • hls - HLS TS or fMP4 streaming server
  • mjpeg - MJPEG server
  • ffmpeg - FFmpeg integration
  • ngrok - ngrok integration (external access for private networks)
  • hass - Home Assistant integration
  • log - Logging configuration

Stream Configuration Examples

RTSP Stream Configuration

    streams:
  # Basic RTSP stream
  camera1: rtsp://admin:[email protected]:554/stream1
  
  # Multi-stream configuration (main + sub streams)
  dahua_camera:
    - rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=0 # Main stream
    - rtsp://admin:[email protected]/cam/realmonitor?channel=1&subtype=1 # Sub stream
  
  # Configuration with two-way audio
  doorbell:
    - rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0#backchannel=1  

FFmpeg Transcoding Configuration

    streams:
  # Rotate video 90 degrees
  rotate_camera: ffmpeg:rtsp://camera_ip/stream#video=h264#rotate=90
  
  # Transcode audio to AAC
  audio_transcode: ffmpeg:rtsp://camera_ip/stream#audio=aac
  
  # Transcode both video and audio
  full_transcode: ffmpeg:rtsp://camera_ip/stream#video=h264#audio=aac#scale=1280:720  

WebRTC Configuration

    webrtc:
  # Allow external access
  listen: :8555
  
  # Configure STUN servers
  candidates:
    - stun:stun.l.google.com:19302
    
  # Enable debug logging
  debug: true  

Security Configuration

    # Restrict API and RTSP to local access only
api:
  listen: 127.0.0.1:1984
  # Add basic authentication
  login: admin
  password: your_password

rtsp:
  listen: 127.0.0.1:8554

# WebRTC needs external access
webrtc:
  listen: :8555  

Best Practices

  1. Camera Selection Tips:
  • Dahua - Standard protocol implementation, rich settings, high stream quality
  • Hikvision - Feature-rich but relies on proprietary protocols
  • Reolink - Some models have poor RTSP implementation, consider using RTMP
  • TP-Link - Limited concurrent connections, potential packet loss
  1. Performance Optimization:
  • Use native encoding when possible, avoid unnecessary transcoding
  • Use sub-streams for performance-limited devices
  • Enable TCP mode with RTSP for better stability
  1. Security Recommendations:
  • Restrict API and RTSP to local access only
  • Enable authentication for external WebRTC access
  • Use HTTPS for better security

Troubleshooting Common Issues

  1. Stream Not Playing:
  • Check network connectivity and firewall settings
  • Verify camera URLs and authentication credentials
  • Review logs for specific error messages
  1. Video Stuttering:
  • Check network bandwidth availability
  • Try reducing video bitrate or resolution
  • Consider using sub-streams
  1. Audio Issues:
  • Confirm camera audio support
  • Check audio codec compatibility
  • Verify backchannel configuration for two-way audio