From 99c8e8d05945ed24cd15d06aac788a24532634fa Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Thu, 15 Jun 2023 16:39:17 -0500 Subject: [PATCH 1/2] Support RTCP BYE message --- homeassistant/components/voip/manifest.json | 2 +- homeassistant/components/voip/voip.py | 26 +++++++++++++++++---- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/voip/manifest.json b/homeassistant/components/voip/manifest.json index 345480da363f47..594abc69c13b64 100644 --- a/homeassistant/components/voip/manifest.json +++ b/homeassistant/components/voip/manifest.json @@ -7,5 +7,5 @@ "documentation": "https://www.home-assistant.io/integrations/voip", "iot_class": "local_push", "quality_scale": "internal", - "requirements": ["voip-utils==0.0.7"] + "requirements": ["voip-utils==0.1.0"] } diff --git a/homeassistant/components/voip/voip.py b/homeassistant/components/voip/voip.py index 32cfbd70337167..ccbfe065910423 100644 --- a/homeassistant/components/voip/voip.py +++ b/homeassistant/components/voip/voip.py @@ -11,7 +11,13 @@ from typing import TYPE_CHECKING import async_timeout -from voip_utils import CallInfo, RtpDatagramProtocol, SdpInfo, VoipDatagramProtocol +from voip_utils import ( + CallInfo, + RtcpState, + RtpDatagramProtocol, + SdpInfo, + VoipDatagramProtocol, +) from homeassistant.components import stt, tts from homeassistant.components.assist_pipeline import ( @@ -46,7 +52,10 @@ def make_protocol( - hass: HomeAssistant, devices: VoIPDevices, call_info: CallInfo + hass: HomeAssistant, + devices: VoIPDevices, + call_info: CallInfo, + rtcp_state: RtcpState, ) -> VoipDatagramProtocol: """Plays a pre-recorded message if pipeline is misconfigured.""" voip_device = devices.async_get_or_create(call_info) @@ -70,6 +79,7 @@ def make_protocol( hass, "problem.pcm", opus_payload_type=call_info.opus_payload_type, + rtcp_state=rtcp_state, ) vad_sensitivity = pipeline_select.get_vad_sensitivity( @@ -86,6 +96,7 @@ def make_protocol( Context(user_id=devices.config_entry.data["user"]), opus_payload_type=call_info.opus_payload_type, silence_seconds=VadSensitivity.to_seconds(vad_sensitivity), + rtcp_state=rtcp_state, ) @@ -101,13 +112,14 @@ def __init__(self, hass: HomeAssistant, devices: VoIPDevices) -> None: session_name="voip_hass", version=__version__, ), - valid_protocol_factory=lambda call_info: make_protocol( - hass, devices, call_info + valid_protocol_factory=lambda call_info, rtcp_state: make_protocol( + hass, devices, call_info, rtcp_state ), - invalid_protocol_factory=lambda call_info: PreRecordMessageProtocol( + invalid_protocol_factory=lambda call_info, rtcp_state: PreRecordMessageProtocol( hass, "not_configured.pcm", opus_payload_type=call_info.opus_payload_type, + rtcp_state=rtcp_state, ), ) self.hass = hass @@ -138,6 +150,7 @@ def __init__( voip_device: VoIPDevice, context: Context, opus_payload_type: int, + rtcp_state: RtcpState, pipeline_timeout: float = 30.0, audio_timeout: float = 2.0, buffered_chunks_before_speech: int = 100, @@ -150,6 +163,7 @@ def __init__( ) -> None: """Set up pipeline RTP server.""" super().__init__( + rtcp_state=rtcp_state, rate=RATE, width=WIDTH, channels=CHANNELS, @@ -452,11 +466,13 @@ def __init__( hass: HomeAssistant, file_name: str, opus_payload_type: int, + rtcp_state: RtcpState, message_delay: float = 1.0, loop_delay: float = 2.0, ) -> None: """Set up RTP server.""" super().__init__( + rtcp_state=rtcp_state, rate=RATE, width=WIDTH, channels=CHANNELS, diff --git a/requirements_all.txt b/requirements_all.txt index 6ebcc094f403af..97fccac4592e83 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2614,7 +2614,7 @@ venstarcolortouch==0.19 vilfo-api-client==0.4.1 # homeassistant.components.voip -voip-utils==0.0.7 +voip-utils==0.1.0 # homeassistant.components.volkszaehler volkszaehler==0.4.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 8fb5fe9c6659ca..996ee2116eb297 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -1914,7 +1914,7 @@ venstarcolortouch==0.19 vilfo-api-client==0.4.1 # homeassistant.components.voip -voip-utils==0.0.7 +voip-utils==0.1.0 # homeassistant.components.volvooncall volvooncall==0.10.3 From c260337dc43f19f99a2aef06b5060f8fa2ec6652 Mon Sep 17 00:00:00 2001 From: Michael Hansen Date: Wed, 28 Jun 2023 09:16:38 -0500 Subject: [PATCH 2/2] Make RtcpState optional --- homeassistant/components/voip/voip.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/voip/voip.py b/homeassistant/components/voip/voip.py index ccbfe065910423..3d0681a847566c 100644 --- a/homeassistant/components/voip/voip.py +++ b/homeassistant/components/voip/voip.py @@ -55,7 +55,7 @@ def make_protocol( hass: HomeAssistant, devices: VoIPDevices, call_info: CallInfo, - rtcp_state: RtcpState, + rtcp_state: RtcpState | None = None, ) -> VoipDatagramProtocol: """Plays a pre-recorded message if pipeline is misconfigured.""" voip_device = devices.async_get_or_create(call_info) @@ -150,7 +150,6 @@ def __init__( voip_device: VoIPDevice, context: Context, opus_payload_type: int, - rtcp_state: RtcpState, pipeline_timeout: float = 30.0, audio_timeout: float = 2.0, buffered_chunks_before_speech: int = 100, @@ -160,14 +159,15 @@ def __init__( tone_delay: float = 0.2, tts_extra_timeout: float = 1.0, silence_seconds: float = 1.0, + rtcp_state: RtcpState | None = None, ) -> None: """Set up pipeline RTP server.""" super().__init__( - rtcp_state=rtcp_state, rate=RATE, width=WIDTH, channels=CHANNELS, opus_payload_type=opus_payload_type, + rtcp_state=rtcp_state, ) self.hass = hass @@ -466,17 +466,17 @@ def __init__( hass: HomeAssistant, file_name: str, opus_payload_type: int, - rtcp_state: RtcpState, message_delay: float = 1.0, loop_delay: float = 2.0, + rtcp_state: RtcpState | None = None, ) -> None: """Set up RTP server.""" super().__init__( - rtcp_state=rtcp_state, rate=RATE, width=WIDTH, channels=CHANNELS, opus_payload_type=opus_payload_type, + rtcp_state=rtcp_state, ) self.hass = hass self.file_name = file_name