Blazor Server application for securely viewing and controlling a live home Sky Q box over the internet with low latency.
This project is designed for self-hosted home setups where a Sky Q box is connected to a local IP encoder. It lets you watch your own Sky TV remotely in a browser, using your own hardware and network rather than relying on services like Sky Go.
- 🌍 Remote browser playback for your own home Sky Q setup
- 📺 Support for HLS (
.m3u8) and direct MPEG-TS browser playback - 🎥 Managed FFmpeg ingest/transcode for awkward HTTP or RTSP sources
- 🧩 Compatibility with H.264 and H.265/HEVC encoder outputs
- ⚡ Low-latency playback paths depending on encoder and browser support
- 🎛️ Built-in Sky Q and Sky Stream discovery and remote control
- 🔒 Authenticator-based external access with trusted local setup
- 🐧 Self-hosted deployment with Linux install scripts for updates and re-runs
- 🪟 Windows PowerShell installer with Windows Service deployment
- 🐳 Docker image and Home Assistant add-on, with FFmpeg included
- 🔄 In-app GitHub update checks, with optional automatic install on the installed service
- A Sky Q box is connected to a local HDMI encoder.
- The encoder exposes a stream such as HLS, MPEG-TS, or RTSP.
- This app either plays that stream directly in the browser or normalizes it through FFmpeg first.
- You access the app remotely through your own private deployment, typically with Tailscale or Cloudflare Zero Trust in front of it.
This project is intended for personal use only, so you can access content you already subscribe to using your own hardware.
It does not:
- provide access to Sky content by itself
- bypass subscription requirements
- include pirated streams or third-party content feeds
For transparency, the short URL and the direct raw GitHub URL are both shown below. The short URL currently redirects to the same installer script.
Short URL:
curl -fsSL https://bit.ly/4naEQhR | sudo bashDirect raw GitHub URL:
curl -fsSL https://raw.githubusercontent.com/itdevconsulting/HomeSkyQLiveStreamingPlayer/main/scripts/install-from-github.sh | sudo bashShort URL fallback:
wget -qO- https://bit.ly/4naEQhR | sudo bashDirect raw GitHub fallback:
wget -qO- https://raw.githubusercontent.com/itdevconsulting/HomeSkyQLiveStreamingPlayer/main/scripts/install-from-github.sh | sudo bashDetailed Linux deployment notes are in LINUX-INSTALL.md.
Linux uninstall details are also covered there, including service-only removal and full cleanup commands.
Quick install from GitHub:
$tmp = Join-Path $env:TEMP "install-from-github.ps1"
Invoke-WebRequest https://raw.githubusercontent.com/itdevconsulting/HomeSkyQLiveStreamingPlayer/main/scripts/install-from-github.ps1 -OutFile $tmp
powershell -NoProfile -ExecutionPolicy Bypass -File $tmpThe Windows installer:
- installs the
.NET 10SDK if needed - downloads FFmpeg if needed
- publishes the app in
Release - installs the Windows service
SkyStreamingService - uses display name
SkyQ Streaming Service - preserves local runtime state on re-runs
Detailed Windows deployment notes are in WINDOWS-INSTALL.md.
Windows uninstall details are also covered there, including service-only removal and full cleanup commands.
Run the player as a container when you want it next to Home Assistant instead of as a systemd or Windows service.
docker compose up -d --buildOn Home Assistant OS or Supervised, add this GitHub repository as a custom add-on store and install Home Sky Q Player.
The container includes FFmpeg, keeps settings in /data, and uses host networking so Sky Q discovery still works on your LAN.
Full Docker and Home Assistant notes are in DOCKER.md.
- discovers Sky Q boxes on connected private networks and any extra scan subnets you add (TCP 9006 must actually route)
- discovers Sky Stream boxes via mDNS (
_rdk-rics._tcp) and TCP port 8091 on the service host’s local private NICs - wakes sleeping Sky Stream pucks with a magic packet before opening the Sky Remote mTLS session
- sends Sky Q remote-control commands over the LAN control socket
- sends Sky Stream remote-control commands over the Sky Remote mTLS WebSocket protocol from a host on the puck’s LAN, typically the UK-egress gateway box (Tailscale is for the browser UI, not for TCP 8091)
- plays browser-friendly direct streams such as MPEG-TS or HLS
- supports FFmpeg-managed ingest/transcode for awkward HTTP or RTSP sources
- stores presets that bind a stream source to a specific Sky Q box
- trusted setup is limited to localhost, RFC1918 private networks, and Tailscale
- external users authenticate with enrolled TOTP authenticator codes
- the recommended deployment model is to keep the app private and place Tailscale or Cloudflare Zero Trust in front of it
The bootstrap installer:
- clones or updates the public repo
- hard-resets and cleans the source checkout on re-runs so it matches the latest remote branch exactly
- installs
ffmpegif needed - installs the
.NET 10SDK if needed - publishes the app in
Release - stops
SkyStreamingServicebefore replacing the deployed app - fully replaces
/opt/skystreamingservice/appwith the latest published build - writes or updates the
SkyStreamingServicesystemd service and restarts it - preserves local runtime state across upgrades
- registers a root updater helper so the app can pull a newer GitHub commit
The Windows installer:
- downloads the current repo snapshot from GitHub or runs from a local checkout
- installs the
.NET 10SDK intoC:\Program Files\dotnetif needed - downloads the FFmpeg Windows essentials ZIP if needed
- publishes the app in
Release - recreates and restarts the
SkyStreamingServiceWindows service - deploys the published app to
C:\ProgramData\SkyQStreamingService\app - preserves
local-settings.json,auth-settings.json,transcoder-settings.json,direct-skyq-presets.json,skyq-cache.json,sky-stream-cache.json, andruntime\on re-runs - registers a SYSTEM scheduled task so the app can pull a newer GitHub commit
Uninstall guidance:
- Linux: see LINUX-INSTALL.md for service removal and optional full purge commands
- Windows: see WINDOWS-INSTALL.md for service removal and optional full purge commands
After install, open:
http://127.0.0.1:5221/setup
From there:
- Confirm the FFmpeg path.
- Save setup.
- Enter the email address to enroll for remote access.
- Generate and scan the authenticator QR code.
- External users then sign in at
/auth/login. - From the home page on a trusted network, use Check for updates / Install update, or turn on automatic GitHub updates in Setup.
- FFmpeg is not bundled. Install it locally and save the detected path on the
Setuppage. - Browser HEVC/H.265 support still varies by browser and platform.
H.264remains the safer compatibility option. - Some aggressive form-filler, password-manager, or in-page autofill browser extensions can inject DOM changes that interfere with Blazor Server and break the active circuit. If users see intermittent circuit disconnects or browser-side DOM errors, retest with in-page autofill disabled for this site first.
- Machine-local runtime files such as auth settings, presets, cache data, and transcoder state are intentionally not published in the public repo.
- You are responsible for complying with local law and any applicable Sky terms for your own use of the system.
