mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
Minor stream typing improvements (#129691)
This commit is contained in:
parent
4f20977a8e
commit
0eea3176d6
@ -1,5 +1,9 @@
|
|||||||
"""Constants for Stream component."""
|
"""Constants for Stream component."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Final
|
||||||
|
|
||||||
DOMAIN = "stream"
|
DOMAIN = "stream"
|
||||||
|
|
||||||
ATTR_ENDPOINTS = "endpoints"
|
ATTR_ENDPOINTS = "endpoints"
|
||||||
@ -11,8 +15,8 @@ RECORDER_PROVIDER = "recorder"
|
|||||||
|
|
||||||
OUTPUT_FORMATS = [HLS_PROVIDER]
|
OUTPUT_FORMATS = [HLS_PROVIDER]
|
||||||
|
|
||||||
SEGMENT_CONTAINER_FORMAT = "mp4" # format for segments
|
SEGMENT_CONTAINER_FORMAT: Final = "mp4" # format for segments
|
||||||
RECORDER_CONTAINER_FORMAT = "mp4" # format for recorder output
|
RECORDER_CONTAINER_FORMAT: Final = "mp4" # format for recorder output
|
||||||
AUDIO_CODECS = {"aac", "mp3"}
|
AUDIO_CODECS = {"aac", "mp3"}
|
||||||
|
|
||||||
FORMAT_CONTENT_TYPE = {HLS_PROVIDER: "application/vnd.apple.mpegurl"}
|
FORMAT_CONTENT_TYPE = {HLS_PROVIDER: "application/vnd.apple.mpegurl"}
|
||||||
|
@ -438,11 +438,11 @@ class KeyFrameConverter:
|
|||||||
"""Initialize."""
|
"""Initialize."""
|
||||||
|
|
||||||
# Keep import here so that we can import stream integration
|
# Keep import here so that we can import stream integration
|
||||||
# without installingreqs
|
# without installing reqs
|
||||||
# pylint: disable-next=import-outside-toplevel
|
# pylint: disable-next=import-outside-toplevel
|
||||||
from homeassistant.components.camera.img_util import TurboJPEGSingleton
|
from homeassistant.components.camera.img_util import TurboJPEGSingleton
|
||||||
|
|
||||||
self._packet: Packet = None
|
self._packet: Packet | None = None
|
||||||
self._event: asyncio.Event = asyncio.Event()
|
self._event: asyncio.Event = asyncio.Event()
|
||||||
self._hass = hass
|
self._hass = hass
|
||||||
self._image: bytes | None = None
|
self._image: bytes | None = None
|
||||||
|
@ -9,6 +9,7 @@ import os
|
|||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
import av
|
import av
|
||||||
|
import av.container
|
||||||
|
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
|
|
||||||
@ -168,7 +169,9 @@ class RecorderOutput(StreamOutput):
|
|||||||
os.remove(video_path + ".tmp")
|
os.remove(video_path + ".tmp")
|
||||||
|
|
||||||
def finish_writing(
|
def finish_writing(
|
||||||
segments: deque[Segment], output: av.OutputContainer, video_path: str
|
segments: deque[Segment],
|
||||||
|
output: av.container.OutputContainer | None,
|
||||||
|
video_path: str,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Finish writing output."""
|
"""Finish writing output."""
|
||||||
# Should only have 0 or 1 segments, but loop through just in case
|
# Should only have 0 or 1 segments, but loop through just in case
|
||||||
|
@ -13,6 +13,10 @@ from threading import Event
|
|||||||
from typing import Any, Self, cast
|
from typing import Any, Self, cast
|
||||||
|
|
||||||
import av
|
import av
|
||||||
|
import av.audio
|
||||||
|
import av.container
|
||||||
|
import av.stream
|
||||||
|
import av.video
|
||||||
|
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.util import dt as dt_util
|
from homeassistant.util import dt as dt_util
|
||||||
@ -127,7 +131,7 @@ class StreamMuxer:
|
|||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
video_stream: av.video.VideoStream,
|
video_stream: av.video.VideoStream,
|
||||||
audio_stream: av.audio.stream.AudioStream | None,
|
audio_stream: av.audio.AudioStream | None,
|
||||||
audio_bsf: av.BitStreamFilter | None,
|
audio_bsf: av.BitStreamFilter | None,
|
||||||
stream_state: StreamState,
|
stream_state: StreamState,
|
||||||
stream_settings: StreamSettings,
|
stream_settings: StreamSettings,
|
||||||
@ -138,11 +142,11 @@ class StreamMuxer:
|
|||||||
self._memory_file: BytesIO = cast(BytesIO, None)
|
self._memory_file: BytesIO = cast(BytesIO, None)
|
||||||
self._av_output: av.container.OutputContainer = None
|
self._av_output: av.container.OutputContainer = None
|
||||||
self._input_video_stream: av.video.VideoStream = video_stream
|
self._input_video_stream: av.video.VideoStream = video_stream
|
||||||
self._input_audio_stream: av.audio.stream.AudioStream | None = audio_stream
|
self._input_audio_stream: av.audio.AudioStream | None = audio_stream
|
||||||
self._audio_bsf = audio_bsf
|
self._audio_bsf = audio_bsf
|
||||||
self._audio_bsf_context: av.BitStreamFilterContext = None
|
self._audio_bsf_context: av.BitStreamFilterContext = None
|
||||||
self._output_video_stream: av.video.VideoStream = None
|
self._output_video_stream: av.video.VideoStream = None
|
||||||
self._output_audio_stream: av.audio.stream.AudioStream | None = None
|
self._output_audio_stream: av.audio.AudioStream | None = None
|
||||||
self._segment: Segment | None = None
|
self._segment: Segment | None = None
|
||||||
# the following 3 member variables are used for Part formation
|
# the following 3 member variables are used for Part formation
|
||||||
self._memory_file_pos: int = cast(int, None)
|
self._memory_file_pos: int = cast(int, None)
|
||||||
@ -157,11 +161,11 @@ class StreamMuxer:
|
|||||||
memory_file: BytesIO,
|
memory_file: BytesIO,
|
||||||
sequence: int,
|
sequence: int,
|
||||||
input_vstream: av.video.VideoStream,
|
input_vstream: av.video.VideoStream,
|
||||||
input_astream: av.audio.stream.AudioStream | None,
|
input_astream: av.audio.AudioStream | None,
|
||||||
) -> tuple[
|
) -> tuple[
|
||||||
av.container.OutputContainer,
|
av.container.OutputContainer,
|
||||||
av.video.VideoStream,
|
av.video.VideoStream,
|
||||||
av.audio.stream.AudioStream | None,
|
av.audio.AudioStream | None,
|
||||||
]:
|
]:
|
||||||
"""Make a new av OutputContainer and add output streams."""
|
"""Make a new av OutputContainer and add output streams."""
|
||||||
container_options: dict[str, str] = {
|
container_options: dict[str, str] = {
|
||||||
@ -396,7 +400,7 @@ class StreamMuxer:
|
|||||||
self._memory_file.close()
|
self._memory_file.close()
|
||||||
|
|
||||||
|
|
||||||
class PeekIterator(Iterator):
|
class PeekIterator(Iterator[av.Packet]):
|
||||||
"""An Iterator that may allow multiple passes.
|
"""An Iterator that may allow multiple passes.
|
||||||
|
|
||||||
This may be consumed like a normal Iterator, however also supports a
|
This may be consumed like a normal Iterator, however also supports a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user