Back to Blog
Tutorial
January 15, 20257 min read

How to Stream Drone Video Over 4G/LTE Networks

Set up live drone video over 4G/LTE with a Raspberry Pi running Aircast: wire an RTSP camera, connect an LTE modem, and watch the stream in a browser over WebRTC.

A
AirCast Team
Author
4G LTE
WebRTC
Tutorial
Raspberry Pi

This guide sets up live drone video over 4G: a Raspberry Pi on the airframe pulls video from an RTSP camera and publishes it through a cellular modem, and you watch it in a browser over WebRTC. Once the hardware is wired, the software side is flashing an SD card and pasting one URL into a dashboard.

Why 4G instead of a video transmitter

A 5.8GHz analog transmitter gives you a few kilometers before the picture dissolves into static. Digital HD links reach 7–10km, but the receiver still has to stay within radio range of the drone. A 4G modem uploads the video to the cellular network instead, so there is no receiver and no radio range to manage. The drone streams from wherever it has coverage, and you watch from wherever you are.

What you give up is a dedicated link. Cellular upload bandwidth changes with signal strength, tower load, and handovers between cells, so the stream has to be configured for the link you really have, not the one in the carrier's ads. That mostly comes down to one bitrate setting, covered below.

What you'll need

  • Raspberry Pi 4 (2GB RAM or more) and a 16GB+ microSD card
  • 4G/LTE modem: a Qualcomm-based USB stick or the Waveshare SIM7600G-H HAT, with a SIM and a data plan. Streaming uses roughly 1–2GB per hour, so skip the small capped plans. Tested modems are in the hardware docs.
  • An RTSP camera. Aircast pulls video from an RTSP URL. Drone gimbal cameras like the SIYI A8 mini output RTSP natively and connect over Ethernet; this guide uses one. A Pi camera module or USB webcam also works if you publish it as a local RTSP stream first, which the camera guide covers per camera type.

Step 1: Flash the Aircast image

Follow the getting-started guide to flash Aircast OS to the SD card and boot the Pi. The image comes with the media server, the web dashboard, and Tailscale for remote access already set up. When the Pi boots, open the dashboard in a browser; the getting-started guide shows how to reach it on your local network and, through Tailscale, from anywhere else.

Step 2: Connect the modem

Insert the SIM, plug the modem into the Pi, and give it a minute or two to register on the network. The dashboard's Network page shows the carrier, signal strength, and data used. If the modem registers but never gets an internet connection, set your carrier's APN explicitly on that page; automatic APN configuration works for the big operators but fails on ones the modem doesn't recognize.

Step 3: Wire the camera and set the source

A SIYI gimbal connects to the Pi's Ethernet port and sits at a fixed address, 192.168.144.25 on a stock A8 mini or ZR10. Give the Pi's wired interface a static address on the same subnet (for example 192.168.144.20); cameras don't hand out addresses over DHCP, so without this the wired port stays stuck at "getting IP configuration" forever.

Then, on the dashboard's Streaming page, set the Camera Source to the camera's RTSP URL:

rtsp://192.168.144.25:8554/main.264

The reachability badge next to the field turns green when the Pi can see the camera, and the setting applies without a restart.

Check one thing in the camera's own settings before you fly: the stream profile must be H.264, not H.265. Browser support for H.265 over WebRTC is inconsistent, and the failure mode is confusing: the stream connects, then shows a black or frozen frame.

Step 4: Watch the stream

The Overview page has a Watch live button and ready-made WebRTC, RTSP, and HLS links. WebRTC is the one to use for flying; RTSP and HLS are there for recording software, OBS, and other tools that expect them. Because the Pi is on your tailnet, the same links work from your desk over the drone's 4G connection.

Step 5 (optional): Telemetry over the same link

If the flight controller is wired to the Pi over USB or UART, the dashboard's Telemetry page shows a UDP endpoint you can point QGroundControl or Mission Planner at. Video and MAVLink then share the one cellular connection.

MAVLink has no authentication; anyone who can reach that port can arm the aircraft. Tailscale keeps the endpoint private. Don't forward it to the public internet.

Set the bitrate for the link, not the camera

The camera encodes at whatever bitrate you configure, and the modem either keeps up or doesn't. When it doesn't, frames queue on the uplink and the stream falls seconds behind while looking "connected" the whole time. Working targets, set in the camera's stream settings:

  • Strong LTE or 5G: 4–6 Mbps, 1080p30
  • Typical LTE: 2–3 Mbps, 720p30
  • Weak or congested: around 1 Mbps, 480p

Data usage follows directly: 2 Mbps is about 0.9GB per hour, 4 Mbps about 1.8GB. On signal: −80 dBm or better streams comfortably, and an external antenna on the modem is the cheapest upgrade you can make if you're operating at the edge of coverage.

Latency

Measured glass to glass, from the camera sensor to pixels in the browser, the WebRTC path lands around 200–300ms on a healthy LTE connection. For comparison, an RTMP or HLS pipeline over the same modem sits at 5 seconds or more.

If latency grows past half a second, the uplink can't sustain the configured bitrate. Lower the bitrate or resolution and it recovers. Software settings won't fix a starved link.

Troubleshooting

Stream connects but the frame is black or frozen

The camera is outputting H.265. Switch its stream profile to H.264.

Modem registered, no internet

Set the APN for your carrier explicitly on the Network page. Auto-configuration fails on operators the modem doesn't know.

Camera Source badge stays red

The Pi can't reach the camera. Check that the wired interface has a static IP on the camera's subnet and that the RTSP path matches your camera's manual. The DIY build guide walks through the wired-subnet configuration step by step.

Video degrades mid-flight

Signal varies along a route. Before a flight that matters, fly the route once while watching signal on the Network page, or check the carrier's coverage map for the area.

Related guides