EyesOn · 2026-04-13

How to Set Up EyesOn on Your Own Server in Under an Hour

Most drone streaming tutorials assume you're willing to hand your video feed to someone else's infrastructure. EyesOn assumes the opposite — that you want your stream on your hardware, under your control, with no cloud middleman sitting between your operator and your viewer. This is the setup guide for operators who take that seriously.

I built EyesOn because the alternatives either cost too much, leak too much, or lock you in too hard. What follows is a straight walk through how a Personal or Professional tier setup actually goes — the real steps, the real decisions, and the real gotchas — so you know exactly what you're signing up for before you spend a dollar.

---

What You're Actually Building

EyesOn is a self-hosted WebRTC drone streaming platform. You run a Docker container on a server you control. Your Android device — running the EyesOn companion app — captures the full DJI controller screen, OSD data included, and streams it to that server. Anyone you authorize watches via browser. No cloud relay. No per-viewer billing. No vendor seeing your footage.

The stream runs at approximately 200ms latency over WebRTC. For context, that's sub-second. Most SaaS platforms are pushing 3–8 seconds through their cloud relay nodes. For SAR coordination, incident command, or any real-time situational awareness use case, that difference is not cosmetic.

What You Need Before You Start

Before touching a Docker command, have these ready:

---

The Server Setup, Step by Step

Your setup fee — $149 for Personal, $299 for Professional — covers Docker image access, your companion app license, and onboarding support. Once you've completed signup and received your credentials, here's the actual flow.

Pull the Docker Image

You'll authenticate against the EyesOn Docker registry with the credentials from your account. The pull command looks like any standard Docker image pull once you're authenticated. The image includes the WebRTC signaling server, the STUN/TURN configuration, and the web interface — everything in one container.

If you're running the Personal tier, you're setting up one server. Professional supports up to five, which matters if you're running separate instances for separate clients or separate sites.

Configure Your Environment File

EyesOn uses a `.env` file for configuration. The variables you'll set on first run:

That's the majority of first-run configuration. There are additional optional variables for SMTP (if you want email notifications), viewer access controls, and branding — but none of them block a working stream.

Run Docker Compose

One command stands up the full stack. The container starts, requests a TLS certificate from Let's Encrypt automatically (this is why your domain needs to be pointed at the server before this step), and exposes the web interface on port 443.

First-run certificate issuance takes 30–60 seconds. After that, the web interface is live. Hit your domain in a browser and you should see the EyesOn dashboard.

Install the Android Companion App

Your setup fee includes the companion app license. Install it on your Android device, enter your server domain and stream key, and the app begins capturing your DJI controller screen via Android's screen capture API. This is important: **you don't need a modified controller, a custom cable, or any additional hardware**. The app works with the standard DJI RC controller app running normally. OSD data appears in the stream because the app captures the full screen — what you see on the controller is what your viewers see.

Connect to your drone as normal. When you're ready to stream, hit the broadcast button in the EyesOn app. The dashboard on your server shows stream status, viewer count, and connection health in real time.

---

Viewer Access and the First Live Test

How Viewers Connect

Anyone with the URL and the viewer access code you configure watches the stream in a standard browser — no plugin, no app, no account. This matters for incident command scenarios where you're sharing a feed with people who have no idea what WebRTC is and don't want to learn. You send them a link. They click it. They watch.

For public safety and SAR use cases, you can configure the stream to be invite-only, time-limited, or password-protected. For commercial inspection clients who just want to watch their roof assessment, an open session link is fine.

Running Your First Test Flight

Run your first test on the ground before you put the aircraft in the air. Connect your drone, open the DJI controller app, launch EyesOn on your Android device, and start streaming. Open a second device (phone, laptop, tablet — anything with a browser) and pull up your stream URL.

Check three things:

1. **OSD data is visible** — altitude, battery, speed, GPS coordinates should all be rendering in the stream 2. **Latency is what you expect** — tap your finger on the controller screen and watch when it appears in the browser. Under normal conditions on a modern VPS, you'll see 150–250ms. If you're seeing 2+ seconds, your TURN relay is misconfigured or you've got a NAT traversal issue 3. **Stream survives a network interruption** — kill and restore WiFi on the viewing device. The stream should reconnect automatically

If latency is higher than expected, confirm you're using a VPS in a geographically appropriate region. Streaming from Eugene through a server in Frankfurt adds physics-based latency that no software can fix.

---

What Happens When Your Subscription Lapses

This is worth stating plainly because it's one of the things that's different about EyesOn versus every SaaS platform you've probably used.

If your subscription lapses, the software keeps running. Your server doesn't go dark. Your streams don't get killed. You lose access to updates, new features, and support — but your existing deployment continues to function. I built it this way because I've been on the receiving end of vendor lock-out exactly once, and it was during an active operation, and I'm not building software that does that to someone else.

SaaS platforms don't offer this. DroneSense at $1,500–5,000 per drone per year has no equivalent guarantee. FlytBase bills per viewer-minute, so a lapsed payment mid-stream means a dead stream. With EyesOn, your operational continuity is not contingent on your billing status.

---

Choosing the Right Tier for Your Operation

The tier decision is simpler than most pricing pages make it look.

**Personal ($149 setup + $39/month):** One server. Unlimited drones. Unlimited viewers. Community support. If you're a single operator running your own flights for your own clients, this is it. First-year cost is $617. DroneSense would charge you $1,500 at minimum for a single drone — and that's per drone, not per server.

**Professional ($299 setup + $89/month):** Up to five servers, email support. Right tier if you're managing multiple client sites with separate instances, or if you want a staging environment separate from production.

**Enterprise ($499 setup + $209/month):** Unlimited servers, priority support, custom branding. Built for organizations running this at scale — inspection firms, public safety agencies, multi-site operations.

**Managed ($799 setup + $499/month):** BarnardHQ hosts it. You get the stream without touching a server. Dedicated support, SLA included. The right choice if self-hosting is a capability you don't want to build internally.

---

The Honest Takeaway

The setup is genuinely straightforward if you have basic Linux familiarity. If you've run a Docker container before, you'll be streaming inside 45 minutes. If you haven't, budget two hours and keep the Ubuntu docs open in a tab.

What you end up with is a streaming platform that costs a fraction of the SaaS alternatives, hands you no footage you didn't intend to share, and keeps running regardless of what happens to your billing relationship. For most serious drone operators, that's a better deal than anything else on the market right now — not because the price is low, but because the architecture matches how professional operators actually work.

Your server. Your data. Your rules. EyesOn is live at BarnardHQ.com.

EyesOnDroneStreamingSelfHostedWebRTCDroneTechBarnardHQDroneOpsFAApart107LiveStreamingDockerDJIPrivacyFirstDroneOperatorPublicSafety
← Back to all posts