Control ZoneMinder stream scaling and frame rate to reduce bandwidth

ZoneMinder’s MJPEG streaming is incredibly inefficient and bandwidth-intensive, especially with modern cameras commonly running at 1080p or higher resolutions.
Streams can be requested with downscaling and limited frame rate (ZM’s web UI uses this with things like bandwidth profiles), but HA’s ZoneMinder integration only accesses the streams at full resolution and maximum frame rate. This is often fine over local networks, but when trying to view a camera stream remotely it can often use too much data for the stream to keep up. I suspect with a lot of common use cases (HD/3M/5M/4K cameras, residential ISPs with low uplink speeds, clients on mobile networks) viewing the streams within HA results in a slideshow at best.
It would be nice to have a setting to set scale and frame rate limits for streams when desired. Ideally this could be configured per-camera, but even global scale and maxfps options would probably be enough for most cases.
I looked at the code a little and while it doesn’t seem like this would be difficult, the stream URL is generated in the zm-py package so a change may need to be made there in addition to a configuration setting in HA, although it may be possible to simply append the extra params to the end of the URL, e.g. something like mjpeg_image_url + “&scale=50&maxfps=3”

Hi, i run into same issue. My 3 camera cards on the dashbord consume about 60Mbit/s, in zoneminder webinterface same is with 5Mbit/s possible.

But in homeassistant there is no configuration for that :frowning:

Hi, i found a workarround. I removed the Zoneminder integration from my configuration.yaml and use now the MJPEG IP Camera integration where i’m able to set the “lower bandwith” Stream directly in the URL.

For the still image i use “mode=single”

https://192.168.x.x/zm/cgi-bin/nph-zms?mode=single&monitor=1&scale=75&maxfps=1&buffer=450&user=xxxx&pass=yyyyy

https://www.home-assistant.io/integrations/mjpeg/