Commit Graph

175 Commits

Author SHA1 Message Date
uvjustin
f45afe7379 Use bitstream filter to allow ADTS AAC audio in stream (#74151) 2022-06-29 10:15:22 +02:00
uvjustin
fef21c02ee Clean up disabling audio in stream (#74038) 2022-06-28 01:56:10 +02:00
uvjustin
03246d2649 Use ha-av instead of av and bump to v10.0.0b3 (#73789)
* Use ha-av instead of av and bump to v10.0.0b1

* Change generic

* Use v10.0.0b2

* Use v10.0.0b3
2022-06-22 13:38:44 +02:00
uvjustin
7a3f632c1d Make stream recorder work concurrently (#73478) 2022-06-18 05:13:07 +10:00
uvjustin
f276523ef3 Ignore in progress segment when adding stream recorder lookback (#73604) 2022-06-17 11:07:08 +10:00
uvjustin
01a4a83bab Improve stream playback on high latency cameras (#72547)
* Disable LL-HLS for HLS sources
* Add extra wait for Nest cameras
2022-06-17 01:48:52 +10:00
uvjustin
73f2bca377 Make Stream.stop() async (#73107)
* Make Stream.start() async
* Stop streams concurrently on shutdown
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2022-06-08 00:10:53 +08:00
uvjustin
c2612d1ade Remove cache control headers from stream (#71996) 2022-05-23 13:56:26 +08:00
uvjustin
0608506bac Reuse codec_context on stream thread restart (#71942) 2022-05-16 20:52:48 -07:00
uvjustin
32b3ce5727 Clean up use_wallclock_as_timestamps in generic (#71940) 2022-05-16 09:06:54 -07:00
uvjustin
221b77297e Declare exports from stream explicitly (#71898) 2022-05-15 17:58:57 +02:00
uvjustin
617b0d04dc Decouple stream options from PyAV options (#71247)
Co-authored-by: Allen Porter <allen.porter@gmail.com>
2022-05-14 23:31:18 -07:00
uvjustin
06c80e454b Use av instead of ha-av (#70885) 2022-04-27 16:08:05 +02:00
uvjustin
9281f46bcd Skip invalid segments in stream recorder (#70896)
* Skip segment if duration is None

* Copy segments deque before passing to thread
2022-04-27 15:36:09 +02:00
uvjustin
44e9146463 Use ha-av instead of av and bump to v9.1.1-3 (#69974) 2022-04-14 13:36:25 +10:00
J. Nick Koston
32a10648a5 Downgrade av to 8.1.0 to fix memory leak (#69833) 2022-04-10 22:58:30 -07:00
Allen Porter
5027e1bcff Mark stream available on idle timeout (#68380)
Mark stream as available on idle timeout so that the frontend can
still interact with it. In particular, the Frontend won't interact
with camera objects that are not available e.g. from picture glance
card.

Issue #67922
2022-03-19 10:24:32 -07:00
Allen Porter
41a032e3e3 Add diagnostics to stream's Stream objects (#68020)
* Add diagnostics to stream's Stream objects

Add diagnostics key/value pair to the Stream object. Diagnostics support
in camera integration will be added in a follow up and will access the
diagnostics on the Stream object, similar to the examples in the unit
test.

* Rename to audio/video codec

* Fix test codec names

* Update tests/components/stream/test_worker.py

Co-authored-by: uvjustin <46082645+uvjustin@users.noreply.github.com>

Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
Co-authored-by: uvjustin <46082645+uvjustin@users.noreply.github.com>
2022-03-18 07:40:09 -07:00
uvjustin
accc4fda28 Bump PyAV to v9.0.0 (#67848) 2022-03-08 07:53:17 -08:00
Franck Nijhof
63957787c4 Update PyTurboJPEG to 1.6.6 (#67800) 2022-03-07 23:26:30 +01:00
Marc Mueller
ec980a574b Improve typing [util.decorator] (#67087) 2022-02-23 20:58:42 +01:00
uvjustin
4efada7db0 Allow stream log level to change at runtime (#66153) 2022-02-21 17:58:15 +01:00
Allen Porter
b016259206 Reset the stream backoff timeout when the url updates (#66426)
Reset the stream backoff timeout when the url updates, meant to improve the retry behavior
for nest cameras. The problem is the nest url updates faster than the stream reset time
so the wait timeout never resets if there is a temporarily problem with the new url. In particular
this *may* help with the flaky cloud nest urls, but seems more correct otherwise.
2022-02-13 07:09:37 -08:00
Allen Porter
0a128d006f Improve stream robustness by always retrying worker (#66417)
Improve stream robustness by always retrying in the worker on failure, rather than only when
keepalive is enabled.

This will make cloud cameras like nest more robust, since they have a tendency to be flaky. This
is also needed to improve client side retry behavior because when the client attempts to retry,
the stream token is already revoked because the worker stopped.

The worker will still idle timeout if no streams are present, so it won't go on forever if no
frontend is viewing the stream.
2022-02-12 20:59:11 -08:00
Allen Porter
2e54daa61f Redact stream url credentials in debug logging (#66407) 2022-02-12 14:03:26 -08:00
Allen Porter
24418417fd Fix nest streams that get stuck broken (#66334) 2022-02-11 13:17:19 -08:00
J. Nick Koston
5b755b74fb Add loggers to integration manifest.json (#65083) 2022-01-28 13:37:53 -08:00
Allen Porter
e74fe0e390 Enable Low Latency HLS (LL-HLS) by default to lower stream latency (#64643) 2022-01-23 15:38:29 +01:00
Franck Nijhof
c339233421 Update PyTurboJPEG to 1.6.5 (#63803) 2022-01-10 13:28:04 +01:00
Franck Nijhof
31f37f3363 Update PyTurboJPEG to 1.6.4 (#63553) 2022-01-06 08:56:39 -08:00
Marc Mueller
04e1933728 Use correct relative imports [n-z] (#63471) 2022-01-05 17:23:49 +01:00
uvjustin
849dc0e53a Use original PyAv in stream (#63079) 2021-12-30 10:54:25 -08:00
Allen Porter
23384ee1e8 Update stream errors with additional error information (#62900) 2021-12-29 18:57:14 +01:00
uvjustin
08a3140e6c Allow generic camera conf without still_image_url (#62611)
* Allow generic config with no CONF_STILL_IMAGE_URL
* Use Stream.async_get_image when no CONF_STILL_IMAGE_URL
* Remove GenericCamera.camera_image
2021-12-26 15:53:14 +08:00
uvjustin
9dbba6b7f2 Use lock in Camera.create_stream (#62757)
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
2021-12-25 04:14:43 +08:00
Erik Montnemery
cb2c2d98c3 Remove unnecessary checks before calling os.makedirs (#62576) 2021-12-23 09:59:31 +01:00
uvjustin
6e13605cad Add get_image method to Stream (#61918)
* Add get_image method to Stream

* Add KeyFrameConverter class
2021-12-23 00:24:53 +08:00
Allen Porter
6ae7b928ea Add a camera specific logger to help diagnose stream errors (#61647)
* 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
2021-12-19 19:42:37 -08:00
Allen Porter
647febd7d8 Mark camera unavailable when keepalive stream fails (#62294)
* 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>
2021-12-19 09:09:59 -08:00
Allen Porter
8ca89b10eb Split StreamState class out of SegmentBuffer (#60423)
This refactoring was pulled out of https://github.com/home-assistant/core/pull/53676 as an
initial step towards reverting the addition of the SegmentBuffer class, which will be
unrolled back into a for loop.

The StreamState class holds the persistent state in stream that is used across stream worker
instantiations, e.g. state across a retry or url expiration, which primarily handles
discontinuities. By itself, this PR is not a large win until follow up PRs further simplify
the SegmentBuffer class.
2021-11-29 22:25:28 -08:00
Allen Porter
df90fdf641 Add an available property on Stream (#60429) 2021-11-29 21:23:58 -08:00
Allen Porter
5e86c78c46 Redact ?auth= url parameters in stream sources when logged (#60438) 2021-11-29 09:59:01 +01:00
uvjustin
9ea338c121 Remove incomplete segment on stream restart (#59532) 2021-11-12 00:59:13 +08:00
uvjustin
3693b9bd04 Adjust frag_duration setting in stream (#59135) 2021-11-05 18:54:51 -07:00
uvjustin
f73c734fb6 Add libav.mpegts to logging filter (#58937) 2021-11-02 06:32:02 -07:00
uvjustin
9aaa92f366 Improve part metadata in stream (#58822) 2021-10-31 20:23:01 -07:00
uvjustin
35acca1063 Use PyAV fork and set hvc1 codec tag for H.265 (#58309) 2021-10-27 11:04:46 +02:00
uvjustin
7024a5d7d9 Minor cleanup on stream (#58486)
* Allow for rounding errors in playlist validation

* Allow EXT-X-TARGETDURATION to change

* Reuse original source in test_record_stream_audio
2021-10-26 13:11:33 -07:00
uvjustin
06008bc343 Fix EXT-X-PROGRAM-DATE-TIME in stream (#58036)
* Fix EXT-X-PROGRAM-DATE-TIME in stream

* Update fragment duration comments in worker

* Update duration test in worker

* Augment test on low latency playlists

* Reset start_time on discontinuity
2021-10-25 11:33:41 +08:00
Ville Skyttä
50e0c58310 Use http.HTTPStatus in components/s* (#58291) 2021-10-23 20:49:04 +02:00