diff --git a/homeassistant/components/camera/ffmpeg.py b/homeassistant/components/camera/ffmpeg.py index bb7c7ac6cdc..9c1aaa25f6f 100644 --- a/homeassistant/components/camera/ffmpeg.py +++ b/homeassistant/components/camera/ffmpeg.py @@ -84,9 +84,15 @@ class FFmpegCamera(Camera): if not data: break response.write(data) + + except asyncio.CancelledError: + _LOGGER.debug("Close stream by browser.") + response = None + finally: - self.hass.async_add_job(stream.close()) - yield from response.write_eof() + yield from stream.close() + if response is not None: + yield from response.write_eof() @property def name(self): diff --git a/homeassistant/components/camera/mjpeg.py b/homeassistant/components/camera/mjpeg.py index d3af55a91f1..4bc62d66143 100644 --- a/homeassistant/components/camera/mjpeg.py +++ b/homeassistant/components/camera/mjpeg.py @@ -124,9 +124,13 @@ class MjpegCamera(Camera): except asyncio.TimeoutError: raise HTTPGatewayTimeout() + except asyncio.CancelledError: + _LOGGER.debug("Close stream by browser.") + response = None + finally: if stream is not None: - yield from stream.close() + stream.close() if response is not None: yield from response.write_eof() diff --git a/homeassistant/components/camera/synology.py b/homeassistant/components/camera/synology.py index 6d5b4546933..d7359c14ded 100644 --- a/homeassistant/components/camera/synology.py +++ b/homeassistant/components/camera/synology.py @@ -276,9 +276,13 @@ class SynologyCamera(Camera): _LOGGER.exception("Error on %s", streaming_url) raise HTTPGatewayTimeout() + except asyncio.CancelledError: + _LOGGER.debug("Close stream by browser.") + response = None + finally: if stream is not None: - self.hass.async_add_job(stream.release()) + stream.close() if response is not None: yield from response.write_eof()