Self-hosted RTSP/HLS server for MultiView Android TV, Fire TV clients & Android phones.
1.3K
Self-hosted RTSP camera gateway and HLS server for ScottiBYTE MultiView Android TV, Fire TV, phone, and tablet clients.
Pull the latest image:
docker pull scottibyte/multiview-server:latest
Pull a specific version:
docker pull scottibyte/multiview-server:1.3.1
v1.3.1 improves camera-stream reliability by automatically detecting and recovering stalled FFmpeg publishers.
SIGTERM never being escalated to SIGKILL.ChildProcess.killed being treated as confirmation that FFmpeg had exited.ScottiBYTE MultiView Server provides a secure web interface for configuring RTSP cameras, organizing cameras into groups, publishing HLS streams through MediaMTX, and managing authorized ScottiBYTE MultiView clients.
The server acts as the central gateway for the ScottiBYTE MultiView ecosystem. Android TV, Fire TV, phone, and tablet clients securely pair with the server and receive only the approved camera catalog and playback URLs. Camera usernames and passwords never leave the server.
Beginning with v1.2.0, enabled camera streams are published automatically using container-managed FFmpeg publishers. No additional stream publisher configuration is required outside the server container.
v1.3.0 expanded the platform with Remote Client Management, allowing administrators to authorize, rename, and revoke Android TV, Fire TV, phone, and tablet clients from a single management page.
v1.3.1 adds automatic stream-health monitoring and per-camera recovery. MultiView Server now checks the actual stream published through MediaMTX rather than relying only on whether an FFmpeg process is running. If a publisher becomes stalled or loses its MediaMTX connection, only the affected camera publisher is restarted.
MediaMTX remains an integral part of the solution. MultiView Server publishes camera streams into MediaMTX, which provides the HLS playback endpoints consumed by all ScottiBYTE MultiView clients.
Designed for televisions and streaming devices.
Features include:
Repository:
https://github.com/ScottiBYTE/multiview-android-tv
Designed for Android phones and tablets.
Features include:
Repository:
https://github.com/ScottiBYTE/multiview-android-mobile





Clone the GitHub repository:
git clone https://github.com/ScottiBYTE/multiview-server.git
cd multiview-server
Create the environment file:
cp .env.example .env
nano .env
Example .env:
TZ=America/Chicago
MULTIVIEW_PUBLIC_URL=http://SERVER-IP:8080
MEDIAMTX_API_BASE=http://127.0.0.1:9997
MEDIAMTX_HLS_BASE=http://SERVER-IP:8888
Start the server stack:
docker compose up -d
Open the web UI:
http://SERVER-IP:8080
Create the administrator account, add cameras, organize them into groups, and authorize your ScottiBYTE MultiView clients.
MultiView Server continuously monitors the MediaMTX output path for every enabled camera.
The health monitor:
SIGTERM first for a clean shutdown.SIGKILL when a stalled FFmpeg process does not exit.This protects against a failure state where the camera remains online and its RTSP stream is still accessible, but the FFmpeg publisher has stopped delivering video to MediaMTX.
Confirm the containers are running:
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"
Confirm FFmpeg publishers are running:
docker exec -it multiview-server sh -lc 'pgrep -a ffmpeg'
Confirm the stream-health watchdog started:
docker logs multiview-server 2>&1 | grep -i watchdog
Expected output includes:
Starting publisher watchdog: interval=30000ms, failureThreshold=3
Confirm MediaMTX sees published streams:
curl -s http://127.0.0.1:9997/v3/paths/list
Test an RTSP stream published through MediaMTX:
ffprobe \
-v error \
-rtsp_transport tcp \
-select_streams v:0 \
-show_entries stream=codec_name,width,height \
-of default=noprint_wrappers=1 \
rtsp://127.0.0.1:8554/CAMERA-ID
Test an HLS stream:
curl -i -L http://SERVER-IP:8888/CAMERA-ID/index.m3u8
Check for publisher-health failures or automatic recoveries:
docker logs --since 10m multiview-server 2>&1 \
| grep -iE \
'health check failed|restarting unhealthy|health restored|ignored SIGTERM|SIGKILL'
No output indicates that no stream-health failures were detected during that period.
ScottiBYTE MultiView is designed so camera credentials remain on the self-hosted server.
Pull the newest image:
docker compose pull
Recreate the containers:
docker compose up -d
Confirm the running version:
docker exec multiview-server \
grep -n 'APP_VERSION' /app/server.js
https://github.com/ScottiBYTE/multiview-server
Join the ScottiBYTE Rocket.Chat community:
https://go.rocket.chat/invite?host=chat.scottibyte.com&path=invite%2FaCh2oW
Content type
Image
Digest
sha256:715174340…
Size
526.7 MB
Last updated
3 months ago
docker pull scottibyte/multiview-server