From 3723c3a7e824bcfbda38f3e0788dc8b1dd2858a9 Mon Sep 17 00:00:00 2001 From: "St. John Johnson" Date: Sat, 11 Jun 2016 20:50:10 -0700 Subject: [PATCH] Fixing MJPEG streaming in Werkzeug by taking advantage of `direct_passthrough` (#2277) --- homeassistant/components/camera/__init__.py | 12 ++++++------ homeassistant/components/camera/mjpeg.py | 8 +++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 585160f1dac..87342528987 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -82,8 +82,6 @@ class Camera(Entity): def mjpeg_stream(self, response): """Generate an HTTP MJPEG stream from camera images.""" import eventlet - response.content_type = ('multipart/x-mixed-replace; ' - 'boundary=--jpegboundary') def stream(): """Stream images as mjpeg stream.""" @@ -105,9 +103,11 @@ class Camera(Entity): except GeneratorExit: pass - response.response = stream() - - return response + return response( + stream(), + content_type=('multipart/x-mixed-replace; ' + 'boundary=--jpegboundary') + ) @property def state(self): @@ -189,4 +189,4 @@ class CameraMjpegStream(CameraView): def handle(self, camera): """Serve camera image.""" - return camera.mjpeg_stream(self.Response()) + return camera.mjpeg_stream(self.Response) diff --git a/homeassistant/components/camera/mjpeg.py b/homeassistant/components/camera/mjpeg.py index 79c88eb8d28..affc4c1ccda 100644 --- a/homeassistant/components/camera/mjpeg.py +++ b/homeassistant/components/camera/mjpeg.py @@ -70,9 +70,11 @@ class MjpegCamera(Camera): def mjpeg_stream(self, response): """Generate an HTTP MJPEG stream from the camera.""" stream = self.camera_stream() - response.mimetype = stream.headers[CONTENT_TYPE_HEADER] - response.response = stream.iter_content(chunk_size=1024) - return response + return response( + stream.iter_content(chunk_size=1024), + mimetype=stream.headers[CONTENT_TYPE_HEADER], + direct_passthrough=True + ) @property def name(self):