* Add a stream_id parameter to the WebRTC provider
Add an additional stream id parameter (effectively, the camera entity id)
to allow updating an existing stream source when the strema changes. This
is useful for stream sources that have expiring URLs, like Nest.
* Redefine the provider using a type
* Use old typing methods for type definintion to pass python3.8 pylint
* Implement a webrtc to rtsp support in camera as a registry
Allow integrations to register a provider that can convert an RTSP stream and WebRTC offer to a WebRTC answer. This is
planned to be used by the RTSPtoWebRTC server integration as an initial pass, but could
support other server implementations as well (or even native implementationf or that matter).
* Fix test bug to improve test covergae and restructure statements
* Add missing call to refresh webrtc providers
* Run provider refresh in parallel since it may send RPCs
* Replace for loop with any
* Fix pylint warning to use a generator
Rename create_stream to async_create_stream in Camera
Rename get_image to async_get_image in Stream
Rename get_image to async_get_image in KeyFrameConverter
* Add a camera specific logger to help diagnose stream errors
Add a camera specific logger to help users associate stream errors with a particular camera.
Issue #54659
* Apply code review feedback
* Update package name based on manual testing
* Mark camera unavailable when keepalive stream fails
Add a listener in stream that notifies camera when the stream state has changed, and
use that to inform the camera `available` property. Update the property to be set
only from the main loop where it is read to reduce thread safety races.
Issue #54659
* Fix pylint import related errors
* Address lint naming errors
* Apply suggestions from code review
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Camera devices may support multiple stream sources so we want to clarify that
this is meant to decide which stream source is used in the frontend only.
Will set stream_type temporarily to allow rollout without breaking nightly,
and this will be removed after frontend is updated.
* Add WebSocket API for intiting a WebRTC stream
See https://github.com/home-assistant/architecture/discussions/640
* Increase test coverage for webrtc camera stream
* Apply suggestions from code review
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
This was accidentally dropped in a previous PR that refactored the interaction
between stream and camera. This is difficult to test from the existing
preload stream tests, so leaving untested for now.
Separate the HLS stream view logic out of StreamOutput since the hls
stream view is about to get more complex to track discontinuities. This
makes the idle timeout, shutdown, and coupling between hls and record
more explicit.
* Change the API boundary between stream and camera
Shift more of the stream lifecycle management to the camera. The motivation is to support stream urls that expire
giving the camera the ability to change the stream once it is created.
* Document stream lifecycle and simplify stream/camera interaction
* Reorder create_stream function to reduce diffs
* Increase test coverage for camera_sdm.py
* Fix ffmpeg typo.
* Add a stream identifier for each stream, managed by camera
* Remove stream record service
* Update homeassistant/components/stream/__init__.py
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Unroll changes to Stream interface back into camera component
* Fix preload stream to actually start the background worker
* Reduce unncessary diffs for readability
* Remove redundant camera stream start code
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Remove unnecessary exception re-wraps
* Preserve exception chains on re-raise
We slap "from cause" to almost all possible cases here. In some cases it
could conceivably be better to do "from None" if we really want to hide
the cause. However those should be in the minority, and "from cause"
should be an improvement over the corresponding raise without a "from"
in all cases anyway.
The only case where we raise from None here is in plex, where the
exception for an original invalid SSL cert is not the root cause for
failure to validate a newly fetched one.
Follow local convention on exception variable names if there is a
consistent one, otherwise `err` to match with majority of codebase.
* Fix mistaken re-wrap in homematicip_cloud/hap.py
Missed the difference between HmipConnectionError and
HmipcConnectionError.
* Do not hide original error on plex new cert validation error
Original is not the cause for the new one, but showing old in the
traceback is useful nevertheless.
* Clean up demo camera
* Complete test_motion_detection
* Clean up image reading
* Clean up camera integration async methods
* Fix and clean camera integration tests
* Fix image processing patch
* Add prettier (in pre-commit and CI)
* Make all file prettier
* Change order
* Add to Azure Pipelines
* Fix a YAML file prettier caught as invalid
* Remove flow mapping using curly braces from all YAML service files
* specify rtsp_transport for onvif camera
* remove used variable
* Update homeassistant/components/stream/__init__.py
Co-Authored-By: Paulus Schoutsen <paulus@home-assistant.io>
* change options to stream_options
Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
* Adding support for PTZ move modes
Adding support for other PTZ move modes.
Onvif intergration used to only support RelativeMove where it should also supports AbsoluteMove, ContinuousMove and Stop.
For exemple Goke GK7102 based IP camera only support ContinuousMove mode.
This commit add those new modes with avaibility to select mode and params in service call.
* Adding support for PTZ move modes
Adding support for other PTZ move modes.
Onvif intergration used to only support RelativeMove where it should also supports AbsoluteMove, ContinuousMove and Stop.
For exemple Goke GK7102 based IP camera only support ContinuousMove mode.
Update service helper for new avaibility to select mode and params in service call.
* RelativeMode as default move_mode to avoid breakchange
RelativeMode as default move_mode to avoid breakchange
* add missing attribute
add missing continuous_duration attribute
* change service attribute label for continuous_duration
* update description
fix wrong assertion for move_mode attr description
* Update services.yaml
* Update services.yaml
fix wrong wording for move_mode
* Update camera.py
Using defined constants instead of raw strings in conditions
* Update camera.py
Replace integer to floating point in logger debug PTZ values
* Update services.yaml
* Update services.yaml
* Update camera.py
* Update camera.py
* use dict[key] for required schema keys and keys with default schema values
* remove async for setup_ptz method
* lint error
* remove unecessary PTZ_NONE = "NONE"
changed request by @MartinHjelmare
* addressing @ MartinHjelmare comments
- Remove None in defaluts and dicts
- Replace long if blocks
* remove NONE
* lint issue
* Update camera.py
* Fix lint error - typo
* rename onvif_ptz service to just ptz
* rename onvif_ptz service to just ptz
* use dict[key] when default values are set
use service.data[key] instead of service.data.get[key] when default value is set in service schema
* adresse comment: use dict[key] for pan tilt zoom
* Apply suggestions from code review
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>