Proper live streaming is now available in Viseron, utilizing the great go2rtc application.
Previously Viseron resorted to using the MJPEG stream for live streaming, which results in low quality and high latency.
With the new go2rtc
component, Viseron can now stream using WebRTC or MSE, which gives a much better experience.
The new Live page is available at /live
and can be accessed from the sidebar.
The Live page is very similar to the Events page, using the same responsiveness so that you can view multiple cameras at once.
In order to use it, you will need to update your configuration to include the new go2rtc
component.
Breaking changes
port
inwebserver
is now deprecated. In order to support the newgo2rtc
streaming server, an NGINX reverse proxy is now included in the container, which listens to the old default port8888
New features
- A new Live Page is now available, which allows for better live streaming and support for more protocols.
- The Live Page is available at
/live
and can be accessed from the main menu. It utilizes the newgo2rtc
component to support WebRTC/MSE streaming. - The MJPEG stream can now be accessed at the Live page by using the toggle in the extra options menu of the video player.
- The Live Page is available at
- A new
go2rtc
streaming server is now included in the container. This allows for better live streaming and support for more protocols. - NGINX reverse proxy - A reverse proxy is now included in the container to enhance performance and provide live streaming through
go2rtc
. - A new
YOLO
component which uses Ultralytics YOLOv8 for object detection is now available. - You can now directly go to a specific timestamp on Events Page by using query parameters. More information on this can be found in the documentation.
- The EdgeTPU component can now utilize multiple EdgeTPU devices for better performance. See the updated documentation for more information.
- Fullscreen button is now available on the Events Page (and the new Live Page) to allow for a better viewing experience.
Does not work in iOS, because Apple. - New way to calculate which files to move or delete in the tiered storage system.
The new implementation uses numpy instead of pure SQL queries, which should improve performance at the cost of slightly (temporary) increased memory usage.
You can limit the CPU usage of this calculation by setting the newtier_check_cpu_limit
config option.
You can further tune the workload using the config optionstier_check_batch_size
,tier_check_sleep_between_batches
andtier_check_workers
.
Changes
- HLS.js upgraded to 1.6.2
- If you have a substream with different resolution than the main stream, the video player now gets the correct resolution from the main stream
- EdgeTPU devices will now be restarted in case of multiple errors, helping to recover from temporary issues.
- Segment processing is now done in a separate process, for better performance and stability of the main process.
- Some unusual circumstances may cause the size based cleanup to fail. If thats the case and the first tier is full, a tier check as well as a cleanup job will be scheduled to remedy that.
Fixes
- Camera name overlapping the video stream controls on the Events Page
- PTZ component failing to initialize due to missing devicemgmt.wsdl file
- Fix for DeepStack face recognition not working
- Includes
coco.names
file in the RPI3 build, which is required for the Darknet object detection model. - Properly resubscribe to MQTT topics when the connection is lost.
Developer experience
- Fixes a long standing issue with the Devcontaner failing to start due to a missing config folder.
When cloning using the instructions in the Developer docs, the config folder was not present on the host sincecloneInVolume
was used.
The config folder is now dynamically set to the correct path in the Devcontainer using the env variableVISERON_CONFIG_PATH
.
Docker images will be on Docker Hub shortly
All Changes
- pin gpac version to 2.4.0 by @roflcoopter in #983
- set requested timestamp from query parameter by @roflcoopter in #984
- expose main stream resolution to get correct aspect ratio for streams by @roflcoopter in #988
- ptz: find location of .wsdl file by @roflcoopter in #989
- Go2rtc and NGINX by @roflcoopter in #991
- implement EdgeTPU support for multiple devices by @roflcoopter in #992
- add title to config.yaml code blocks by @roflcoopter in #993
- edgetpu restart on failure by @roflcoopter in #994
- read frames in subprocess by @roflcoopter in #995
- merge master back into dev by @roflcoopter in #1002
- Live page by @roflcoopter in #1007
- run fragmenter in subprocess by @roflcoopter in #1008
- trigger tier check when fragmenter cant move file to first tier by @roflcoopter in #1014
- remove config bind mount and change its location in devcontainer by @roflcoopter in #1015
- upgrade to hls.js 1.6.5 by @roflcoopter in #1017
- camera snapshot auth using cookies by @roflcoopter in #1016
- add ssh to devcontainer by @roflcoopter in #1022
- properly close queues in ChildProcessWorker by @roflcoopter in #1023
- wrap start of queue manager server in a lock by @roflcoopter in #1024
- include logo as png by @roflcoopter in #1025
- catch TypeError in duplicate log filter by @roflcoopter in #1026
- update throttling mechanism with unique throttle key by @roflcoopter in #1028
- add index to Files table to improve tier check performance by @roflcoopter in #1029
- make sure only one cleanup job can be started at a time by @roflcoopter in #1032
- delete unneeded binaries and docker images in ci by @roflcoopter in #1037
- fix timing issue with _concatenate_fragements by @john- in #1039
- Tier check file processing by @roflcoopter in #1040
- copy coco.names to rpi image by @roflcoopter in #1042
- fix: update deepstack face detection coordinates to use correct keys by @roflcoopter in #1041
- yolo component by @john- in #1033
- extract tag from docker compose file before tagging by @roflcoopter in #1043
- resub on mqtt reconnection by @roflcoopter in #1046
- make mjpeg stream viewable from Live page by @roflcoopter in #1047
- force pytorch CPU install in CI by @roflcoopter in #1048
- cap HLS error to max 200 chars by @roflcoopter in #1051
- enable react query retries by @roflcoopter in #1052
- fix cleanup jobs to run on all tier paths by @roflcoopter in #1053
- add live view documentation by @roflcoopter in #1054
New Contributors
Full Changelog: v3.1.2...v3.2.0