diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 5897d972b31..0463b172d7a 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -299,7 +299,8 @@ class Camera(Entity): a direct stream from the camera. This method must be run in the event loop. """ - await self.handle_async_still_stream(request, self.frame_interval) + return await self.handle_async_still_stream( + request, self.frame_interval) @property def state(self): diff --git a/homeassistant/components/camera/amcrest.py b/homeassistant/components/camera/amcrest.py index 55a9c2e4294..4ba527b4805 100644 --- a/homeassistant/components/camera/amcrest.py +++ b/homeassistant/components/camera/amcrest.py @@ -59,8 +59,7 @@ class AmcrestCam(Camera): """Return an MJPEG stream.""" # The snapshot implementation is handled by the parent class if self._stream_source == STREAM_SOURCE_LIST['snapshot']: - await super().handle_async_mjpeg_stream(request) - return + return await super().handle_async_mjpeg_stream(request) if self._stream_source == STREAM_SOURCE_LIST['mjpeg']: # stream an MJPEG image stream directly from the camera @@ -69,20 +68,22 @@ class AmcrestCam(Camera): stream_coro = websession.get( streaming_url, auth=self._token, timeout=TIMEOUT) - await async_aiohttp_proxy_web(self.hass, request, stream_coro) + return await async_aiohttp_proxy_web( + self.hass, request, stream_coro) - else: - # streaming via fmpeg - from haffmpeg import CameraMjpeg + # streaming via ffmpeg + from haffmpeg import CameraMjpeg - streaming_url = self._camera.rtsp_url(typeno=self._resolution) - stream = CameraMjpeg(self._ffmpeg.binary, loop=self.hass.loop) - await stream.open_camera( - streaming_url, extra_cmd=self._ffmpeg_arguments) + streaming_url = self._camera.rtsp_url(typeno=self._resolution) + stream = CameraMjpeg(self._ffmpeg.binary, loop=self.hass.loop) + await stream.open_camera( + streaming_url, extra_cmd=self._ffmpeg_arguments) - await async_aiohttp_proxy_stream( + try: + return await async_aiohttp_proxy_stream( self.hass, request, stream, 'multipart/x-mixed-replace;boundary=ffserver') + finally: await stream.close() @property diff --git a/homeassistant/components/camera/arlo.py b/homeassistant/components/camera/arlo.py index af931c74cfa..d56616218e7 100644 --- a/homeassistant/components/camera/arlo.py +++ b/homeassistant/components/camera/arlo.py @@ -101,10 +101,12 @@ class ArloCam(Camera): await stream.open_camera( video.video_url, extra_cmd=self._ffmpeg_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close() @property def name(self): diff --git a/homeassistant/components/camera/canary.py b/homeassistant/components/camera/canary.py index b9951d8efa2..7a83e2da4d1 100644 --- a/homeassistant/components/camera/canary.py +++ b/homeassistant/components/camera/canary.py @@ -98,10 +98,12 @@ class CanaryCamera(Camera): self._live_stream_session.live_stream_url, extra_cmd=self._ffmpeg_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close() @Throttle(MIN_TIME_BETWEEN_SESSION_RENEW) def renew_live_stream_session(self): diff --git a/homeassistant/components/camera/mjpeg.py b/homeassistant/components/camera/mjpeg.py index 1df06b546cd..9db7c138182 100644 --- a/homeassistant/components/camera/mjpeg.py +++ b/homeassistant/components/camera/mjpeg.py @@ -134,8 +134,7 @@ class MjpegCamera(Camera): """Generate an HTTP MJPEG stream from the camera.""" # aiohttp don't support DigestAuth -> Fallback if self._authentication == HTTP_DIGEST_AUTHENTICATION: - await super().handle_async_mjpeg_stream(request) - return + return await super().handle_async_mjpeg_stream(request) # connect to stream websession = async_get_clientsession(self.hass) diff --git a/homeassistant/components/camera/onvif.py b/homeassistant/components/camera/onvif.py index 2576dfa7f92..c418f68a260 100644 --- a/homeassistant/components/camera/onvif.py +++ b/homeassistant/components/camera/onvif.py @@ -221,10 +221,12 @@ class ONVIFHassCamera(Camera): await stream.open_camera( self._input, extra_cmd=self._ffmpeg_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close() @property def name(self): diff --git a/homeassistant/components/camera/ring.py b/homeassistant/components/camera/ring.py index eafb3066e48..ad351fb59cf 100644 --- a/homeassistant/components/camera/ring.py +++ b/homeassistant/components/camera/ring.py @@ -139,10 +139,12 @@ class RingCam(Camera): await stream.open_camera( self._video_url, extra_cmd=self._ffmpeg_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close() @property def should_poll(self): diff --git a/homeassistant/components/camera/synology.py b/homeassistant/components/camera/synology.py index b504fe34d86..b094cf98edf 100644 --- a/homeassistant/components/camera/synology.py +++ b/homeassistant/components/camera/synology.py @@ -92,7 +92,7 @@ class SynologyCamera(Camera): websession = async_get_clientsession(self.hass, self._verify_ssl) stream_coro = websession.get(streaming_url) - await async_aiohttp_proxy_web(self.hass, request, stream_coro) + return await async_aiohttp_proxy_web(self.hass, request, stream_coro) @property def name(self): diff --git a/homeassistant/components/camera/xiaomi.py b/homeassistant/components/camera/xiaomi.py index 3d6b51cf229..916a4cb9a90 100644 --- a/homeassistant/components/camera/xiaomi.py +++ b/homeassistant/components/camera/xiaomi.py @@ -158,7 +158,9 @@ class XiaomiCamera(Camera): await stream.open_camera( self._last_url, extra_cmd=self._extra_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close() diff --git a/homeassistant/components/camera/yi.py b/homeassistant/components/camera/yi.py index f3800ee0648..22311510ede 100644 --- a/homeassistant/components/camera/yi.py +++ b/homeassistant/components/camera/yi.py @@ -144,7 +144,9 @@ class YiCamera(Camera): await stream.open_camera( self._last_url, extra_cmd=self._extra_arguments) - await async_aiohttp_proxy_stream( - self.hass, request, stream, - 'multipart/x-mixed-replace;boundary=ffserver') - await stream.close() + try: + return await async_aiohttp_proxy_stream( + self.hass, request, stream, + 'multipart/x-mixed-replace;boundary=ffserver') + finally: + await stream.close()