Commit Graph
52 Commits
Author SHA1 Message Date
Franck Nijhof 3d557b5583 Collection of code styling tweaks (#87381) 2023-02-04 12:52:26 -05:00
Franck Nijhof ca1a12898c Enable Ruff D212 (#87347) 2023-02-03 23:08:48 +01:00
Marc Mueller 077ca97ef8 Fix local_partial_types errors (#86410)
Fix local_partial_types errors
2023-01-23 10:29:11 +01:00
Franck Nijhof 79b52a2b41 Stricter pylint message control (#86154) 2023-01-20 13:47:55 +01:00
uvjustin ee910bd0e4 Refactor camera stream settings (#81663) 2022-11-13 01:22:59 +08:00
uvjustin 84725f15a6 Use IntEnum for stream orientation (#81835)
* Use IntEnum for stream orientation

* Rename enum values

* Add comments

* Fix import
2022-11-09 07:28:28 -08:00
uvjustin 852b0caf5b Add orientation transforms to stream (#77439) 2022-09-06 13:31:36 +08:00
uvjustin 75892385bb Fix playback of hls cameras in stream (#75166) 2022-07-14 12:24:24 -07:00
uvjustin 7a3f632c1d Make stream recorder work concurrently (#73478) 2022-06-18 05:13:07 +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 0608506bac Reuse codec_context on stream thread restart (#71942) 2022-05-16 20:52:48 -07:00
Marc Mueller ec980a574b Improve typing [util.decorator] (#67087) 2022-02-23 20:58:42 +01: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
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
Marc Mueller 48bada5a18 Update pylint to 2.11.1 (#56364) 2021-09-18 13:52:59 +02:00
uvjustin 071fcee9a9 Remove byte-range addressed parts in stream (#55396)
Add individually addressed parts
2021-08-30 13:20:19 +08:00
uvjustin 923158cfba Add ll hls to stream (#49608) 2021-08-29 09:53:41 +08:00
uvjustin e8b5790846 Clean up stream refactor (#51951)
* Clean up target_duration method

* Consolidate Part creation in one place

* Use BytesIO.read instead of memoryview access

* Change flush() signature
2021-06-20 13:38:02 +08:00
uvjustinandRuslan Sayfutdinov 97e77ab229 Improve type hints in stream (#51837)
* Improve type hints in stream

* Fix import locations

* Add stream to .strict-typing

Co-authored-by: Ruslan Sayfutdinov <ruslan@sayfutdinov.com>
2021-06-14 23:59:25 +08:00
uvjustin 123e8f01a1 Refactor stream to create partial segments (#51282) 2021-06-14 00:41:21 +08:00
uvjustin 55f158cf78 Fix HLS idle timer in stream (#51372) 2021-06-02 21:31:39 -07:00
uvjustin 3ca7eb9440 Update HLS playlist in stream (#51191)
* Enable gzip encoding for playlist responses
* Add EXT-X-PROGRAM-DATE-TIME to playlist
* Add EXT-X-START to playlist
* Change EXT-X-VERSION from 7 to 6
* Move idle timer call to recv
* Refactor recv to remove cursor and return bool
* Rename STREAM_TIMEOUT to SOURCE_TIMEOUT
2021-05-30 11:41:23 +08:00
uvjustin 6ad29aec2c Adjust segment duration calculation in stream (#51149)
* Calculate min segment duration internally

* Rename segments to sequences in StreamOutput

* Fix segment duration calculation in test_worker
2021-05-28 13:36:41 +08:00
uvjustin 38e0cbe964 Change stream sequence number to start from 0 (#51101)
* Use constants for provider strings

* Add last_sequence property
2021-05-27 11:22:31 +08:00
uvjustin c6f108f7c3 Refactor stream to use bytes (#51066)
* Refactor stream to use bytes
2021-05-26 16:19:09 +08:00
uvjustin 2eb87b8806 Combine StreamBuffer into SegmentBuffer in stream (#51041)
* Combine StreamBuffer into SegmentBuffer in stream

* Use new style type hint in comment
Remove unused member self._segment

* Change reset_av to static helper function

* Change make_new_av to only return OutputContainer
2021-05-24 22:57:07 -07:00
Maciej Bieniek f212049fc2 Add constructor return type in integrations O-S (#50896) 2021-05-20 15:58:17 +02:00
Ruslan Sayfutdinov 35f304450c Enable type checks for stream component (#50527)
* Enable type checks for stream component

* Fix pylint
2021-05-13 23:26:11 +02:00
Paulus Schoutsen 6604614c39 Move top-level av import behind type checking flag (#49281)
* Move top-level av import behind type checking flag

* Lint
2021-04-15 18:18:25 -07:00
Marc Mueller 885f528711 Replace old style type comments (#49103) 2021-04-12 17:07:18 +02:00
Marc Mueller a3cd1854f6 Update typing 12 (#48073) 2021-03-18 14:31:38 +01:00
uvjustin f005c68630 Restore stream recorder functionality and add discontinuity support (#46772)
* Add discontinuity support to stream recorder

* Use same container options for both StreamOutputs

* Fix pts adjuster

* Remove redundant/incorrect duplicate hls segment check

* Use same StreamBuffer across outputs

* Remove keepalive check for recorder

* Set output video timescale explicitly

* Disable avoid_negative_ts
2021-02-23 10:37:19 +08:00
Allen Porter 4aa4f7e285 Rollback stream StreamOutput refactoring in PR#46610 (#46684)
* Rollback PR#46610

* Update stream tests post-merge
2021-02-20 06:49:39 -08:00
Allen Porteranduvjustin 88d143a644 Add discontinuity support to HLS streams and fix nest expiring stream urls (#46683)
* Support HLS stream discontinuity.

* Clarify discontinuity comments

* Signal a stream discontinuity on restart due to stream error

* Apply suggestions from code review

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

* Simplify stream discontinuity logic
2021-02-18 20:26:02 +08:00
Allen Porter aaecd91407 Fix exception in stream idle callback (#46642)
* Fix exception in stream idle callback

Fix bug where idle timeout callback fails if the stream previously exited.

* Add a test for stream idle timeout after stream is stopped.

* Add clarifying comment to idle timer clear method

* Clear hls timer only on stop
2021-02-16 12:10:26 -08:00
Allen Porter 08201d146b Separate HLS logic out of core StreamOutput to prepare for discontinuity (#46610)
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.
2021-02-16 06:59:43 -08:00
Allen PorterandPaulus Schoutsen 2bcf87b980 Change the API boundary between camera and stream with initial improvement for nest expiring stream urls (#45431)
* 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>
2021-02-08 19:53:28 -08:00
Allen Porter dca6a93898 Centralize keepalive logic in Stream class (#45850)
* Remove dependencies on keepalive from StremaOutput and stream_worker

Pull logic from StreamOutput and stream_worker into the Stream
class, unifying keepalive and idle timeout logic. This prepares
for future changes to preserve hls state across stream url changes.
2021-02-08 07:19:41 -08:00
Allen Porter 65e3661f88 Repair flaky and broken stream tests in test_hls.py, and turn back on (#45025)
* Unmark tests as flaky (though still flaky)

This put tests into the broken state where they are flaky and do not yet pass

* Fix bug in test_hls_stream with incorrect path

* Enable and de-flake HLS stream tests

Background: Tests encode a fake video them start a stream to be decoded. Test
assert on the decoded segments, however there is a race with the stream worker
which can finish decoding first, and end the stream which ereases all buffers.

Breadown of fixes:
- Fix the race conditions by adding synchronization points right before the
  stream is finalized.
- Refactor StreamOutput.put so that a patch() can block the worker
  thread.  Previously, the put call would happen in the event loop which was
  not safe to block. This is a bit of a hack, but it is the simplist possible
  code change to add this synchronization and arguably provides slightly better
  separation of responsibilities from the worker anyway.
- Fix bugs in the tests that make them not pass, likely due to changes
  introduced while the tests were disabled
- Fix case where the HLS stream view recv() call returns None, indicating
  the worker finished while the request was waiting.

The tests were previously failing anywhere from 2-5% of the time on a lightly
loaded machine doing 1k iterations.  Now, have 0% flake rate.  Tested with:
$ py.test --count=1000 tests/components/strema/test_hls.py
2021-01-11 14:34:45 +01:00
uvjustin e85d1deddd Return target duration of 1 when no segments (#40518) 2020-09-30 11:46:35 -04:00
uvjustinandJason Hunter dc2d0b9297 Add audio to stream (#38846)
* Add audio to stream component

* Use container options to do most fmp4 formatting

* Add test for treatment of different audio inputs

* Add test for treatment of different audio inputs

* pcm_mulaw frames should be s16

* Use seek to get BytesIO length

* Remove unused utcnow

* Remove peek_next_audio_pts

* only demux audio and video packets - ignoring data and subtitle streams

Co-authored-by: Jason Hunter <hunterjm@gmail.com>
2020-08-19 23:18:54 -04:00
uvjustinandJason Hunter 5355fcaba8 Add H.265 support to stream component (#38125)
* Add H.265 support to stream component

* Change find_box to generator

* Move fmp4 utilities to fmp4utils.py

* Add minimum segments and segment durations

* Remove MIN_SEGMENTS

* Fix when container_options is None

* Fix missing num_segments and update tests

* Remove unnecessary mock attribute

* Fix Segment construction in test_recorder_save

* fix recorder with lookback

Co-authored-by: Jason Hunter <hunterjm@gmail.com>
2020-08-11 17:12:41 -04:00
Ville Skyttä ac0dbb17af Attrs cleanups (#37849) 2020-07-14 10:30:30 -07:00
Jason Hunter 8cd905487e Bump pyAV and close unclosed outputs (#35960)
* bump pyAV and close unclosed outputs

* skip stream from coverage for now

* fix divide by zero error
2020-05-22 18:13:37 +02:00
Michał Mrozek 9aa28dfd54 move imports in stream component (#27647) 2019-10-14 14:20:18 -07:00
Ville Skyttä a54ade1189 Spelling fixes (#25666) 2019-08-02 23:20:06 +02:00
Paulus Schoutsen 4de97abc3a Black 2019-07-31 12:25:30 -07:00
Jason Hunter 26726af689 Stream Record Service (#22456)
* Initial commit of record service for live streams

* fix lint

* update service descriptions

* add tests

* fix lint
2019-03-27 21:47:07 -07:00
Jason Hunter baa4945944 reset unsub to None on timeout (#22404) 2019-03-26 08:39:09 +01:00