From a55afa8119dd7ff6f70d10fbcec7f73bd7176a93 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 27 Mar 2019 07:55:05 +0100 Subject: [PATCH] Update ha-ffmpeg 2.0 (#22427) --- homeassistant/components/amcrest/camera.py | 5 +++-- homeassistant/components/arlo/camera.py | 5 +++-- homeassistant/components/canary/camera.py | 7 ++++--- homeassistant/components/ffmpeg/__init__.py | 2 +- homeassistant/components/ffmpeg/camera.py | 7 ++++--- .../components/ffmpeg_motion/binary_sensor.py | 2 +- homeassistant/components/ffmpeg_noise/binary_sensor.py | 2 +- homeassistant/components/onvif/camera.py | 7 ++++--- homeassistant/components/ring/camera.py | 7 ++++--- homeassistant/components/xiaomi/camera.py | 7 ++++--- homeassistant/components/yi/camera.py | 7 ++++--- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../test_ffmpeg.py => ffmpeg/test_sensor.py} | 10 ++++++---- 14 files changed, 41 insertions(+), 31 deletions(-) rename tests/components/{binary_sensor/test_ffmpeg.py => ffmpeg/test_sensor.py} (94%) diff --git a/homeassistant/components/amcrest/camera.py b/homeassistant/components/amcrest/camera.py index 7ba3ea04bf5..35d5e18fdd3 100644 --- a/homeassistant/components/amcrest/camera.py +++ b/homeassistant/components/amcrest/camera.py @@ -78,7 +78,7 @@ class AmcrestCam(Camera): self.hass, request, stream_coro) # streaming via ffmpeg - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg streaming_url = self._camera.rtsp_url(typeno=self._resolution) stream = CameraMjpeg(self._ffmpeg.binary, loop=self.hass.loop) @@ -86,8 +86,9 @@ class AmcrestCam(Camera): streaming_url, extra_cmd=self._ffmpeg_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._ffmpeg.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/arlo/camera.py b/homeassistant/components/arlo/camera.py index 43ccabb7390..95d11318bf7 100644 --- a/homeassistant/components/arlo/camera.py +++ b/homeassistant/components/arlo/camera.py @@ -83,7 +83,7 @@ class ArloCam(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg video = self._camera.last_video if not video: error_msg = \ @@ -97,8 +97,9 @@ class ArloCam(Camera): video.video_url, extra_cmd=self._ffmpeg_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._ffmpeg.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/canary/camera.py b/homeassistant/components/canary/camera.py index c54565d6fde..63c27d31d93 100644 --- a/homeassistant/components/canary/camera.py +++ b/homeassistant/components/canary/camera.py @@ -80,7 +80,7 @@ class CanaryCamera(Camera): """Return a still image response from the camera.""" self.renew_live_stream_session() - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG ffmpeg = ImageFrame(self._ffmpeg.binary, loop=self.hass.loop) image = await asyncio.shield(ffmpeg.get_image( self._live_stream_session.live_stream_url, @@ -93,15 +93,16 @@ class CanaryCamera(Camera): if self._live_stream_session is None: return - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg stream = CameraMjpeg(self._ffmpeg.binary, loop=self.hass.loop) await stream.open_camera( self._live_stream_session.live_stream_url, extra_cmd=self._ffmpeg_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._ffmpeg.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/ffmpeg/__init__.py b/homeassistant/components/ffmpeg/__init__.py index 7b7e3a81294..05bc1d99167 100644 --- a/homeassistant/components/ffmpeg/__init__.py +++ b/homeassistant/components/ffmpeg/__init__.py @@ -12,7 +12,7 @@ from homeassistant.helpers.dispatcher import ( import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -REQUIREMENTS = ['ha-ffmpeg==1.11'] +REQUIREMENTS = ['ha-ffmpeg==2.0'] DOMAIN = 'ffmpeg' diff --git a/homeassistant/components/ffmpeg/camera.py b/homeassistant/components/ffmpeg/camera.py index 4272a3d6029..dbb51bf27c7 100644 --- a/homeassistant/components/ffmpeg/camera.py +++ b/homeassistant/components/ffmpeg/camera.py @@ -48,7 +48,7 @@ class FFmpegCamera(Camera): async def async_camera_image(self): """Return a still image response from the camera.""" - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG ffmpeg = ImageFrame(self._manager.binary, loop=self.hass.loop) image = await asyncio.shield(ffmpeg.get_image( @@ -58,15 +58,16 @@ class FFmpegCamera(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg stream = CameraMjpeg(self._manager.binary, loop=self.hass.loop) await stream.open_camera( self._input, extra_cmd=self._extra_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._manager.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/ffmpeg_motion/binary_sensor.py b/homeassistant/components/ffmpeg_motion/binary_sensor.py index d0e597e13c0..8183b0e66a6 100644 --- a/homeassistant/components/ffmpeg_motion/binary_sensor.py +++ b/homeassistant/components/ffmpeg_motion/binary_sensor.py @@ -86,7 +86,7 @@ class FFmpegMotion(FFmpegBinarySensor): def __init__(self, hass, manager, config): """Initialize FFmpeg motion binary sensor.""" - from haffmpeg import SensorMotion + from haffmpeg.sensor import SensorMotion super().__init__(config) self.ffmpeg = SensorMotion( diff --git a/homeassistant/components/ffmpeg_noise/binary_sensor.py b/homeassistant/components/ffmpeg_noise/binary_sensor.py index 070c8c61b00..56edf1ddfd6 100644 --- a/homeassistant/components/ffmpeg_noise/binary_sensor.py +++ b/homeassistant/components/ffmpeg_noise/binary_sensor.py @@ -55,7 +55,7 @@ class FFmpegNoise(FFmpegBinarySensor): def __init__(self, hass, manager, config): """Initialize FFmpeg noise binary sensor.""" - from haffmpeg import SensorNoise + from haffmpeg.sensor import SensorNoise super().__init__(config) self.ffmpeg = SensorNoise( diff --git a/homeassistant/components/onvif/camera.py b/homeassistant/components/onvif/camera.py index f3b25e3a128..36f1b18eebf 100644 --- a/homeassistant/components/onvif/camera.py +++ b/homeassistant/components/onvif/camera.py @@ -190,7 +190,7 @@ class ONVIFHassCamera(Camera): async def async_camera_image(self): """Return a still image response from the camera.""" - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG if not self._input: await self.hass.async_add_job(self.obtain_input_uri) @@ -207,7 +207,7 @@ class ONVIFHassCamera(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg if not self._input: await self.hass.async_add_job(self.obtain_input_uri) @@ -221,8 +221,9 @@ class ONVIFHassCamera(Camera): self._input, extra_cmd=self._ffmpeg_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, ffmpeg_manager.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/ring/camera.py b/homeassistant/components/ring/camera.py index efcdf8599a9..8970e61b1a1 100644 --- a/homeassistant/components/ring/camera.py +++ b/homeassistant/components/ring/camera.py @@ -115,7 +115,7 @@ class RingCam(Camera): async def async_camera_image(self): """Return a still image response from the camera.""" - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG ffmpeg = ImageFrame(self._ffmpeg.binary, loop=self.hass.loop) if self._video_url is None: @@ -128,7 +128,7 @@ class RingCam(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg if self._video_url is None: return @@ -138,8 +138,9 @@ class RingCam(Camera): self._video_url, extra_cmd=self._ffmpeg_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._ffmpeg.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/xiaomi/camera.py b/homeassistant/components/xiaomi/camera.py index 93e9dd4a07c..d8cd59129ab 100644 --- a/homeassistant/components/xiaomi/camera.py +++ b/homeassistant/components/xiaomi/camera.py @@ -138,7 +138,7 @@ class XiaomiCamera(Camera): async def async_camera_image(self): """Return a still image response from the camera.""" - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG url = await self.hass.async_add_job(self.get_latest_video_url) if url != self._last_url: @@ -152,15 +152,16 @@ class XiaomiCamera(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg stream = CameraMjpeg(self._manager.binary, loop=self.hass.loop) await stream.open_camera( self._last_url, extra_cmd=self._extra_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._manager.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/homeassistant/components/yi/camera.py b/homeassistant/components/yi/camera.py index 7d731d2a433..c60d4971fb8 100644 --- a/homeassistant/components/yi/camera.py +++ b/homeassistant/components/yi/camera.py @@ -118,7 +118,7 @@ class YiCamera(Camera): async def async_camera_image(self): """Return a still image response from the camera.""" - from haffmpeg import ImageFrame, IMAGE_JPEG + from haffmpeg.tools import ImageFrame, IMAGE_JPEG url = await self._get_latest_video_url() if url and url != self._last_url: @@ -135,7 +135,7 @@ class YiCamera(Camera): async def handle_async_mjpeg_stream(self, request): """Generate an HTTP MJPEG stream from the camera.""" - from haffmpeg import CameraMjpeg + from haffmpeg.camera import CameraMjpeg if not self._is_on: return @@ -145,8 +145,9 @@ class YiCamera(Camera): self._last_url, extra_cmd=self._extra_arguments) try: + stream_reader = await stream.get_reader() return await async_aiohttp_proxy_stream( - self.hass, request, stream, + self.hass, request, stream_reader, self._manager.ffmpeg_stream_content_type) finally: await stream.close() diff --git a/requirements_all.txt b/requirements_all.txt index 75e3ece960e..4b4b2570d50 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -505,7 +505,7 @@ greenwavereality==0.5.1 gstreamer-player==1.1.2 # homeassistant.components.ffmpeg -ha-ffmpeg==1.11 +ha-ffmpeg==2.0 # homeassistant.components.philips_js.media_player ha-philipsjs==0.0.5 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 17c993bf5f7..08466d922b8 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -114,7 +114,7 @@ geojson_client==0.3 georss_client==0.5 # homeassistant.components.ffmpeg -ha-ffmpeg==1.11 +ha-ffmpeg==2.0 # homeassistant.components.hangouts hangups==0.4.6 diff --git a/tests/components/binary_sensor/test_ffmpeg.py b/tests/components/ffmpeg/test_sensor.py similarity index 94% rename from tests/components/binary_sensor/test_ffmpeg.py rename to tests/components/ffmpeg/test_sensor.py index 2c17207af32..d1fd6124b4c 100644 --- a/tests/components/binary_sensor/test_ffmpeg.py +++ b/tests/components/ffmpeg/test_sensor.py @@ -33,7 +33,8 @@ class TestFFmpegNoiseSetup: assert self.hass.data['ffmpeg'].binary == 'ffmpeg' assert self.hass.states.get('binary_sensor.ffmpeg_noise') is not None - @patch('haffmpeg.SensorNoise.open_sensor', return_value=mock_coro()) + @patch('haffmpeg.sensor.SensorNoise.open_sensor', + return_value=mock_coro()) def test_setup_component_start(self, mock_start): """Set up ffmpeg component.""" with assert_setup_component(1, 'binary_sensor'): @@ -48,7 +49,7 @@ class TestFFmpegNoiseSetup: entity = self.hass.states.get('binary_sensor.ffmpeg_noise') assert entity.state == 'unavailable' - @patch('haffmpeg.SensorNoise') + @patch('haffmpeg.sensor.SensorNoise') def test_setup_component_start_callback(self, mock_ffmpeg): """Set up ffmpeg component.""" with assert_setup_component(1, 'binary_sensor'): @@ -95,7 +96,8 @@ class TestFFmpegMotionSetup: assert self.hass.data['ffmpeg'].binary == 'ffmpeg' assert self.hass.states.get('binary_sensor.ffmpeg_motion') is not None - @patch('haffmpeg.SensorMotion.open_sensor', return_value=mock_coro()) + @patch('haffmpeg.sensor.SensorMotion.open_sensor', + return_value=mock_coro()) def test_setup_component_start(self, mock_start): """Set up ffmpeg component.""" with assert_setup_component(1, 'binary_sensor'): @@ -110,7 +112,7 @@ class TestFFmpegMotionSetup: entity = self.hass.states.get('binary_sensor.ffmpeg_motion') assert entity.state == 'unavailable' - @patch('haffmpeg.SensorMotion') + @patch('haffmpeg.sensor.SensorMotion') def test_setup_component_start_callback(self, mock_ffmpeg): """Set up ffmpeg component.""" with assert_setup_component(1, 'binary_sensor'):