Frigate NVR: Reolink Camera Configuration
This Frigate NVR: Reolink Camera Configuration article will help you optimize your Reolink camera settings for your Frigate NVR setup. This optimization is essential as without it you will have choppy recordings, recordings that are missing / dropping frame and/or recordings with random artifacts.
This article is the third in an article series “Best Security System Setup using Frigate NVR” intended to help you get Frigate NVR setup with network storage and Home Assistant integration. Here is a list of the articles in this series for you to jump to:
- Best Security System Setup using Frigate NVR (Overview Article)
- Frigate NVR: Linux Manual Install
- Frigate NVR: Reolink Camera Configuration
- TrueNAS: NFS Network Share
- Frigate NVR: Home Assistant Integration
This is part of digiMoot’s series of articles on NVR and series of articles on TrueNAS installations, configurations and setup.
Reolink Camera Configuration for Frigate NVR
All of the configuration is going to be done within the frigate.yml. The location of this file will vary based on your installation method. If you have installed following digiMoot’s Frigate NVR: Linux Manual Install article, then it will be located in ~/docker-compose/frigate/config/frigate.yml
.
I’ve include an example of the frigate.yml file below which you will need to update based on the following items:
First modification to the frigate.yml file, is that you will need to be using the RTMP streams from your camera. These have worked much better for me than the RTSP streams. These stream links will look something like:
rtmp://10.10.11.45/bcs/channel0_main.bcs?channel=0&stream=0&user=admin&password=password
OR
rtmp://10.10.11.45/bcs/channel0_sub.bcs?channel=0&stream=0&user=admin&password=password
The difference between the two above items, if you look carefully, is that one is the main stream and the other is the sub stream. The main stream corresponds to the ‘clear’ stream in the Reolink camera webUI and the sub stream corresponds with the ‘fluent’ stream in the Reolink camera webUI. You can access the webUI by using a web browser to navigate to the IP address of your camera and then logging in. Click on the device settings icon in the top right and then navigate to Camera -> Stream. When putting this information in to the file below, you will need to update these links with the correct IP address, username and password and determine if you wish to use the main or sub stream. The main steam will take more decoding power as it higher resolution.
Second modification to the frigate.yml file is that you will need to ensure you are using the correct video resolution for the stream. On the Reolink webUI Stream configuration page you will need to take note of the stream resolution you have set for the stream you will be using. If you don’t use the correct resolution in the yaml file, then things will look really funky.
Third modification to you the frigate.yml file is that you need to make sure you are using the optimized hardware acceleration and input arguments. Now your mileage may vary depending on the hardware Frigate is running on, but this has worked rock solid for me.
For hardware acceleration arguments, you only need to use one argument: -hwaccel_output_format
to yuv420p
. For input arguments, you also only need to use one argument: -avoid_negative_ts
to make_zero.
You can see how both of these are implemented in the example frigate.yml below.
mqtt:
host: 10.10.11.199
user: mqtt-user
password: password
cameras:
front_camera_frigate:
rtmp:
enabled: false
ffmpeg:
hwaccel_args:
# - -hwaccel
# - vaapi
# - -hwaccel_device
# - /dev/dri/renderD128
- -hwaccel_output_format
- yuv420p
input_args:
- -avoid_negative_ts
- make_zero
# - -fflags
# - nobuffer
# - -flags
# - low_delay
# - -strict
# - experimental
# - -fflags
# - +genpts+discardcorrupt
# - -rw_timeout
# - "5000000"
# - -use_wallclock_as_timestamps
# - "1"
inputs:
- path: rtmp://10.10.11.45/bcs/channel0_main.bcs?channel=0&stream=0&user=admin&password=password
roles:
- clips
- detect
- record
# - path: rtmp://10.10.11.45/bcs/channel0_sub.bcs?channel=0&stream=0&user=admin&password=password
# roles:
# - detect
width: 2560
height: 1920
# width: 640
# height: 480
fps: 10
objects:
track:
- person
- car
- dog
snapshots:
enabled: true
timestamp: false
bounding_box: true
retain:
default: 10
clips:
enabled: true
pre_capture: 10
post_capture: 10
retain:
default: 10
record:
enabled: true
retain_days: 10
detectors:
cpu1:
type: cpu
cpu2:
type: cpu
cpu3:
type: cpu
cpu4:
type: cpu
You will note in this file that I have included both main and sub stream options, but I have commented out the sub stream so that it will not be used. It is possible to use both streams for different roles. For example, you could use the sub stream for detection (lowering the processing requirements) and use the main stream for clips and recording.
You will also note that i have included a number of commented out hardware acceleration options and input arguments. Feel free to explore different combinations of options to see if anything gets you better performance.
Conclusion
Alright! That’s it. You’ve finished this Frigate NVR: Reolink Camera Configuration article and your Reolink cameras should now be optimized for use in Frigate.
Happy…. uh… Reolinkin’?
~digiMoot Sources:
Frigate – Optimizing Performance: https://blakeblackshear.github.io/frigate/configuration/optimizing
Reolink Stuttery Clips: https://github.com/blakeblackshear/frigate/issues/896
I’ve been fighting my Reolink choppy cameras for the last couple of months. Thanks for this.
I’m glad it helped. Cheers.
Lovely thank you very much!