Unifi NVR-compatible camera proxy
Project description
UniFi Camera Proxy
About
This enables using non-Ubiquiti cameras within the UniFi Video/Protect software. This is particularly useful to view existing RTSP-enabled cameras in the same UI and mobile app.
Things that work:
- Live streaming
- Full-time recording
- Motion detection
- Smart Detections with Frigate
Installation
Dependencies:
- ffmpeg and netcat must be installed
- Python 3+
Usage
In order to use this, you'll need a client certificate. This can be acquired in one of two ways:
- If you have a UniFi camera:
scp ubnt@<your-unifi-cam>:/var/etc/persistent/server.pem client.pem
- You can also create your own client certificate via:
openssl ecparam -out /tmp/private.key -name prime256v1 -genkey -noout
openssl req -new -sha256 -key /tmp/private.key -out /tmp/server.csr -subj "/C=TW/L=Taipei/O=Ubiquiti Networks Inc./OU=devint/CN=camera.ubnt.dev/emailAddress=support@ubnt.com"
openssl x509 -req -sha256 -days 36500 -in /tmp/server.csr -signkey /tmp/private.key -out /tmp/public.key
cat /tmp/private.key /tmp/public.key > client.pem
rm -f /tmp/private.key /tmp/public.key /tmp/server.csr
Running natively
pip install unifi-cam-proxy
# RTSP stream
unifi-cam-proxy --host <NVR IP> --cert client.pem --token <Adoption token> rtsp -s rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_175k.mov
Running with Docker
docker run --rm -v "/full/path/to/cert.pem:/client.pem" keshavdv/unifi-cam-proxy unifi-cam-proxy --verbose --ip "<Camera IP>" --host <NVR IP> --cert /client.pem --token <Adoption token> rtsp -s rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_175k.mov
Acquiring adoption token
Unifi Protect
- On the Protect UI, click 'Add Devices' and select 'G3 Micro'. Select 'Continue on Web' and type in a random string for the SSID and Password fields and click 'Generate QR Code'
- Take a screenshot of the QR code and upload it to https://zxing.org/w/decode.jspx
- Decode the QR code and extract the token from the second to last line in the 'Raw Text' field.
Unifi Video
Follow the 'Token Adoption' step from here to generate a new token
Multiple Cameras
To deploy multiple cameras, run multiple instances of the proxy, taking care to specify different MAC addressess:
unifi-cam-proxy --host <NVR IP> --mac 'AA:BB:CC:00:11:22' --cert client.pem --token <Adoption token> rtsp -s rtsp://camera1
unifi-cam-proxy --host <NVR IP> --mac 'AA:BB:CC:33:44:55' --cert client.pem --token <Adoption token> rtsp -s rtsp://camera2
Device-specific Implementations
- Hikvision PTZ (Hikvision DS-2DE3304W-DE): Uses brightness/contrast settings to control PTZ
unifi-cam-proxy -H <NVR IP> -i <camera IP> -c client.pem -t <Adoption token> hikvision -u <username> -p <password>
- Reolink NVR Cameras (Reolink RLN16-410): Adds motion events Note: Camera/channel IDs are zero-based
unifi-cam-proxy -H <NVR IP> -i <camera IP> -c client.pem -t <Adoption token> reolink_nvr -u <username> -p <password> -c <camera_id>
- Lorex (LNB4321B, likely also Dahua cameras): Adds motion events
unifi-cam-proxy -H <NVR IP> -i <camera IP> -c client.pem -t <Adoption token> lorex -u <username> -p <password>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
File details
Details for the file unifi_cam_proxy-0.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: unifi_cam_proxy-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5708be91751b123074543d0984d7d4ec94ecc6e974142f8320b2b770f0f6134 |
|
MD5 | 5a74e9ed868edeaec50264911f5c0d7c |
|
BLAKE2b-256 | 9780ad29605a5e4950f411981a6f53fd942b9ea5cb0838a3864c6810730ee146 |