The Ring Doorbell is a useful smart device: it replaces your existing doorbell, giving you the ability to speak to visitors when you’re out (which is handy when it’s a delivery driver). They also act as a security device, because they are constantly checking for motion and they start recording when motion is detected.
However in order to view any recorded video clips, you need to pay $3-10 per month for a cloud-based Ring Protect plan. People don’t always realize this and it can be a bit frustrating, especially if you’ve just forked out $249 for the Doorbell Pro!
Therefore people sometimes wonder whether you can configure your Ring Doorbell to record to a local NAS or server, instead of the cloud – thus bypassing the need to buy a Ring Protect plan.
There is no official way to record Ring Doorbell footage locally instead, however there are some unofficial ways (requiring some technical ability) of storing footage to a local NAS or server.
This articles looks at how the Ring Doorbell records video (at both the basic and technical levels) along with the various options available to you (for Ring Doorbells, and other doorbells which naturally support local recording). For a summary of just the Ring Doorbell options, you can check out the video version below if you’d prefer:
Your Ring Doorbell is always in recording mode, allowing you to view the front of your property on a computer or the mobile app using ‘Live View’. You will also be notified when motion is detected at the front of your house – or when someone presses the doorbell button – allowing you to jump onto live view to monitor your property, and also speak to any visitors.
This is all available for free, but the downside of the free plan is that only realtime viewing is possible – any recordings are not stored. Recordings are only stored in the ‘Ring cloud’ if you pay $3 per month (or $10 per month if you have multiple Ring devices) for a Ring Protect plan.
In other words, if you wake up in the morning and see a ‘motion detected’ notification from the middle of the night, you can only view that video footage if you pay for the protect plan.
This has prompted people to try and find ways of storing Ring’s video footage on a local server/NAS.
The Ring Doorbell captures live video footage, transmits this wirelessly to your internet router, then this is sent up to the Ring cloud servers. Surely all you therefore need to do is either have a computer program that sits between your Doorbell and the router (monitoring the video footage), or at the router level to capture the video before it’s sent to Ring’s servers? In other words:
Well in IT security terms, this is known as a ‘Man in the middle attack‘ and it’s firstly not always easy to do (as I’ll look at in a second). And secondly doing this would arguably be a breach of your Ring Terms of Service agreement.
In other words, any attempt to record your Doorbell’s footage locally could see your Ring account shut-off in the worst case. Having said that, it’s worth looking at what options you might have – even if it’s more for interest than any other purpose.
The difficulty with the two methods described earlier is that a deep understanding of networking and WiFi networks is required, and even then a lot of internet traffic passes through a router. You’d need some way of identifying just the traffic (‘packets’) related to your Ring Doorbell, and capturing all these packets – no more, no less. Then you’d need to find a way of converting this traffic into viewable (and hence storable) video. This also all assumes that the Ring Doorbell traffic is unencrypted (and will continue to be unencrypted in the future), too.
As you can guess, none of this is easy. As a backend software developer whose worked with networking projects, I can say that doing what I describe above would be a lot of effort. And if you eventually are successful, Ring could easily stop this working by making a tiny software update.
So what are your options? Well, some people have ‘cracked the code’ and the following methods – all of which require some level of technical knowledge before you can use them – appear to work right now:
- ring-client-api is an unofficial Ring API which provides a live stream API, meaning that you could write some scripts to capture this live video and save it locally.
- Python Ring Door Bell is a project which supports live video capture as of PR#133.
- ring-hassio is probably the easiest to use right now, since it provides an extension to use within Home Assistant. This only exposes the video on your Home Assistant dashboard, but you could then write a script to periodically call – and save – the video output (exposed as a HTTP URL).
- Brian Hanifin posted on the Home Assistant forums with a way that you can automatically download any already captured videos from Ring’s servers. This method requires a Ring Protect subscription, however, otherwise there’s no video captures available to download. This is still handy as a backup option, although Brian did later say that his video access seemed to get throttled when he attempted this.
Check out the ‘A technical explanation…’ chapter later for how these libraries work.
Because Ring don’t officially support local video capture, there is a bit of a ‘cat and mouse’ game where programmers find a way of capturing video locally, and then Ring see this and make a software update which shuts it down. The following are previous successful attempts I’m aware of that no longer work (due to Ring specifically making changes to block it):
- A Home Assistant script was posted in 2017 which allowed for Ring Doorbell footage to be stored. It stopped working a couple of months later.
- The Python Ring Door Bell project I mentioned earlier tried – and failed – for a few years to get live video capture working. They had some successes for up to 30 seconds, before the video capture stopped working.
- Various Ring integrations started seeing issues at the start of 2020 due to a Ring authentication change.
- The ring-client-api live stream temporarily stopped working for some users.
The Ring Doorbell sends any captured footage to Ring’s servers by initiating a video call, in the same way that VOIP conference phones work. This is done by issuing a SIP (session initiation protocol) request, which is used to initiate the SIP call and agree on how/when the video and audio should be sent.
So for the purposes of transmitting the video data, the Ring Doorbell acts as a SIP client and the Ring cloud servers act as a SIP server.
It’s worth noting, however, that SIP is just an initiation protocol – i.e. it starts (and ends) calls. Once the (video) call is setup, the actual video data is transmitted as RTP packets. These RTP packets flow from the Ring Doorbell (the client) to the Ring cloud servers (the server) – it’s one-way, because the Doorbell wouldn’t need to receive video/RTP packets, only send them.
In addition to the above, the Ring Doorbell also makes some HTTP-based API calls to Ring’s servers to get – and update – information relating to the video stream(s).
The programmers of the four projects I mentioned above were able to reverse engineer all of this because most of the Ring traffic is – worryingly – unencrypted. Therefore you can attach a packet sniffer such as Wireshark to monitor the HTTP, SIP and RTP packets, and work out exactly how the Ring Doorbell transmits video data.
Their projects then simply replicate this behavior in Node.js or Python.
In other words, these projects initiate a SIP call themselves, reply to any SIP extensions (such as SIP SUBSCRIBE messages) and then capture the RTP packets and convert them into a usable video stream.
If Ring ever encrypt their traffic, Ring could easily change the above technical process slightly and it’d then be very hard for the projects to know what they need to change to get their live streaming functionality working again. Until then, happy live-streaming everyone!
When investigating the above for the Ring Doorbell, I came across a lot of (rightly!) frustrated people saying: “I give up, just use Nest Hello – that supports live streaming”. And thankfully there does appear to be unofficial – but more stable – options to store Hello footage locally.
Based on the annoying (mis)management of Nest’s APIs by Google, I wouldn’t be surprised if capturing Nest Hello footage locally stops working at some point in the near future. But for now, the following methods appear to work:
- foggycam, a project which allows video (but not audio) live capture. A write-up on Den’s blog explains this method more.
- nest-camera-site, which allows still images to be downloaded and stored.
- louij2’s post on Linus Tech Tips’ forums shows how to expose your Nest camera publicly, and then capture this through VLC Player. Caution: if someone guesses (or hacking) your camera’s – now public – URL, they can view all your Hello’s footage.
As you can probably tell, getting your Ring Doorbell to record locally is not easy. There are some technical approaches which work well right now, but whether they’ll work when Ring do their next software update remains to be seen.
If you need local video storage, a much simpler approach is simply to buy a doorbell which actively supports this feature – i.e. they make it an advertised feature. That way you know that the manufacturer will work with you to store video locally, not against you! Examples include:
- Various DoorBird IP doorbell models.
- eufy’s security doorbell with attached storage.
- The Amcrest 1080P Video Doorbell Pro, which appears to have a few integration options.
- LaView’s 1080p doorbell with SD card.
- Nelly’s security doorbell with SD card.
- … and loads of other security doorbells with SD cards. The downside of this approach is that if someone steals your doorbell, the stored video are also gone. It’s better to have a security doorbell with separate, in-home storage capability.