Hi,
I’ve seen various threads on the topic, but i was wondering if people have found success displaying nvr feeds (such as ubiquiti, reolink) directly on their dashboards. I feel like ive tried everything to get a video feed for my ubiquiti cameras with home assistant running without success. I’ve tried the webrtc method by the mjpeg stream doesn’t seem to work. I’ve tried the mixed content workaround, but it still doesn’t ever work for me.
On the upside, I have bene able to embed a media tile with the video feed that updates every one second directly from the camera as a snap.jpeg and that works well.
I dont’ have blue iris, so i was wondering if it can be accomplished either from the camera, or via a HA add on like webrtc.
thanks
1 Like
I recently went through the same struggle trying to get NVR camera feeds to show directly in SharpTools without mixed‑content errors or broken MJPEG streams.
I don’t use Blue Iris either — my setup is Dahua NVR → TinyCam Pro → SharpTools — and I finally got everything working smoothly over real HTTPS.
Here’s what worked for me:
1. TinyCam Pro acts as the MJPEG server
My NVR streams into TinyCam Pro (running on an Nvidia Shield). TinyCam exposes each camera as a simple MJPEG endpoint like:
http://<LAN-IP>:8083/axis-cgi/mjpg/video.cgi?camera=1
2. I reverse‑proxied TinyCam through a cloud server using Caddy
I created a small Ubuntu VM, installed Docker + Caddy, and pointed a domain at it.
Caddy handles the HTTPS certificate and proxies the feed to TinyCam using my router’s DDNS:
mydomain.com {
reverse_proxy http://myddns.tplinkdns.com:8083
}
3. Now each camera works over full HTTPS
I can access all my cameras with URLs like:
-
https://mydomain.com/axis-cgi/mjpg/video.cgi?camera=1
-
https://mydomain.com/axis-cgi/mjpg/video.cgi?camera=2
-
https://mydomain.com/axis-cgi/mjpg/video.cgi?camera=3
-
https://mydomain.com/axis-cgi/mjpg/video.cgi?camera=4
These load instantly in SharpTools Media Tiles with no mixed‑content issues and update smoothly.
4. No Cloudflare Tunnel, no Blue Iris, no HA add‑ons needed
Just TinyCam + a reverse proxy with HTTPS.
I’ve had good success getting Reolink camera feeds onto SharpTools dashboards, but only after many false starts and much experimenting. And ultimately with some significant assistance from Codex. I don’t point SharpTools directly at the camera/NVR feeds. What finally worked for me was using a small local proxy/transcoding layer between the cameras and SharpTools.
My current architecture is:
Reolink RTSP streams → go2rtc running on a local Windows PC → nginx HTTPS reverse proxy → SharpTools media tiles running on iPad wall tablets.
A few key details that mattered:
- I use the camera RTSP streams directly
For Reolink, the URLs look like:
rtsp://user:password@camera-ip:554/h264Preview_01_sub
For some higher-priority cameras, I may use the main stream instead of the sub stream
rtsp://user:password@camera-ip:554/h264Preview_01_main
-
go2rtc (running on a 24/7 windows pc) converts the RTSP stream to MJPEG
SharpTools media tiles seem happiest with a simple MJPEG endpoint. In go2rtc, I define streams like:
-
streams:
-
front_door: rtsp://user:password@192.168.1.58:554/h264Preview_01_sub
front_door_mjpeg: ffmpeg:front_door#video=mjpeg
- nginx exposes the stream over HTTPS
Since SharpTools itself is loaded over HTTPS, I found it much cleaner to serve the camera media over HTTPS too, instead of fighting mixed-content behavior.
Example nginx route:
location /camera/front_door {
proxy_pass http://host.docker.internal:1984/api/stream.mjpeg?src=front_door_mjpeg;
}
Then the SharpTools media tile URL is:
https://local-server-ip:9443/camera/front_door
-
I’ve got a helper app running on the PC
It monitors the streams to detect the occasional frozen or corrupt Reolink stream. It restarts the connection and/or reboots the camera as necessary. Thanks to Codex for this one.
-
I installed/trusted my PC server local certificate on the tablets
I created a local CA/certificate for the Windows proxy host and installed/trusted that certificate on the iPads. Without that, iPadOS browsers will reject the HTTPS stream even if the URL appears correct.
-
I use a kiosk browser with page-level refresh
On iPads, I use iCab Mobile rather than Safari. Codex found this for me. iCab has an auto-refresh module that I set to autorefresh the dashboard page every 30 minutes in case any of the streams freeze.
-
Network stability mattered a lot
I initially had several Wi-Fi cameras on 2.4 GHz and had frequent dropouts/blank tiles. Moving dual-band cameras to 5 GHz dramatically improved ping latency and reduced jitter. That made the dashboard streams much more reliable.
So the short version is: I don’t rely on SharpTools to consume RTSP/WebRTC directly. I give SharpTools a simple local HTTPS MJPEG URL per camera.
This has been much more stable for me than trying to display the NVR streams directly.
1 Like