From 47817d72c502b81b7c0e942cfe5094f65536b598 Mon Sep 17 00:00:00 2001 From: Dermot Duffy Date: Mon, 6 Jun 2016 20:33:01 +0100 Subject: [PATCH] - Add minor comments. --- motioneye/handlers.py | 10 +++++++--- motioneye/static/js/main.js | 6 ++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/motioneye/handlers.py b/motioneye/handlers.py index 1d6d17e..63b67fd 100644 --- a/motioneye/handlers.py +++ b/motioneye/handlers.py @@ -1381,7 +1381,7 @@ class MovieHandler(BaseHandler): self.set_header('Content-Disposition', 'attachment; filename=' + pretty_filename + ';') self.set_header("Content-Length", content_length) - + # Yield the data to the network in chunks. content = StaticFileHandler.get_content(full_path, start, end) if content: for chunk in content: @@ -1397,8 +1397,12 @@ class MovieHandler(BaseHandler): if error: return self.finish_json({'error': 'Failed to download movie from %(url)s: %(msg)s.' % { 'url': remote.pretty_camera_url(camera_config), 'msg': error}}) - - self.set_status(response.code) + # Copy certain critical headers out of the remote response and + # into our response. Propogating these headers are necessary to + # support in-brower playback of remote movies. Also copy the + # response code which might be 200 or 206 (partial content, for range + # requests). + self.set_status(response.code) for header in ('Content-Type', 'Content-Range', 'Content-Length', 'Content-Disposition'): if header in response.headers: self.set_header(header, response.headers[header]) diff --git a/motioneye/static/js/main.js b/motioneye/static/js/main.js index 3c1fa13..8c45c81 100644 --- a/motioneye/static/js/main.js +++ b/motioneye/static/js/main.js @@ -2950,6 +2950,8 @@ function runPictureDialog(entries, pos, mediaType) { prevArrow.css('display', 'none'); nextArrow.css('display', 'none'); + /* Construct a likely mime-type with 'video/' and the file extension, then see if the + browser can play it */ var playable = video_container.get(0).canPlayType('video/' + entry.path.split('.').pop()) != '' playButton.hide(); video_container.hide(); @@ -2966,11 +2968,11 @@ function runPictureDialog(entries, pos, mediaType) { playButton.on('click', function() { video_source.attr('src', addAuthParams('GET', basePath + mediaType + '/' + entry.cameraId + '/download' + entry.path)); video_container.show(); - video_container.get(0).load(); + video_container.get(0).load(); /* Must call load() after changing