'webcam_maxrate': int(ui['streaming_framerate']),
'webcam_quality': max(1, int(ui['streaming_quality'])),
'@webcam_resolution': max(1, int(ui['streaming_resolution'])),
+ '@webcam_server_resize': ui['streaming_server_resize'],
'webcam_motion': ui['streaming_motion'],
# still images
'streaming_framerate': int(data['webcam_maxrate']),
'streaming_quality': int(data['webcam_quality']),
'streaming_resolution': int(data['@webcam_resolution']),
+ 'streaming_server_resize': int(data['@webcam_server_resize']),
'streaming_port': int(data['webcam_port']),
'streaming_motion': int(data['webcam_motion']),
data.setdefault('webcam_maxrate', 5)
data.setdefault('webcam_quality', 85)
data.setdefault('@webcam_resolution', 100)
+ data.setdefault('@webcam_server_resize', True)
data.setdefault('webcam_motion', False)
data.setdefault('text_left', data['@name'])
};
})();
+Object.update = function (dest, source) {
+ for (var key in source) {
+ if (!source.hasOwnProperty(key)) {
+ continue;
+ }
+
+ dest[key] = source[key];
+ }
+};
+
Array.prototype.indexOf = Array.prototype.indexOf || function (obj) {
for (var i = 0; i < this.length; i++) {
if (this[i] === obj) {
$('#videoDeviceSwitch').change(updateConfigUi);
$('#textOverlaySwitch').change(updateConfigUi);
$('#videoStreamingSwitch').change(updateConfigUi);
+ $('#streamingServerResizeSwitch').change(updateConfigUi);
$('#stillImagesSwitch').change(updateConfigUi);
$('#motionMoviesSwitch').change(updateConfigUi);
$('#motionNotificationsSwitch').change(updateConfigUi);
$('#videoStreamingSwitch').parent().next('table.settings').find('tr.settings-item').not('.local-streaming').each(markHide);
}
+ /* streaming server resize switch */
+ if (!$('#streamingServerResizeSwitch').get(0).checked) {
+ $('#streamingResolutionSlider').parents('tr:eq(0)').each(markHide);
+ }
+
/* still images switch */
if (!$('#stillImagesSwitch').get(0).checked) {
$('#stillImagesSwitch').parent().next('table.settings').find('tr.settings-item').each(markHide);
'streaming_framerate': $('#streamingFramerateSlider').val(),
'streaming_quality': $('#streamingQualitySlider').val(),
'streaming_resolution': $('#streamingResolutionSlider').val(),
+ 'streaming_server_resize': $('#streamingServerResizeSwitch')[0].checked,
'streaming_port': $('#streamingPortEntry').val(),
'streaming_motion': $('#streamingMotion')[0].checked,
$('#streamingFramerateSlider').val(dict['streaming_framerate']);
$('#streamingQualitySlider').val(dict['streaming_quality']);
$('#streamingResolutionSlider').val(dict['streaming_resolution']);
+ $('#streamingServerResizeSwitch')[0].checked = dict['streaming_server_resize'];
$('#streamingPortEntry').val(dict['streaming_port']);
$('#streamingMotion')[0].checked = dict['streaming_motion'];
if (!isApplyVisible()) {
showApply();
}
+
+ /* also update the config stored in the camera frame div */
+ Object.update($('div.camera-frame#camera' + cameraId)[0].config, cameraConfig);
}
function pushPreview(control) {
}
function refreshCameraFrames() {
- function refreshCameraFrame(cameraId, img, fast) {
+ function refreshCameraFrame(cameraId, img, fast, serverSideResize) {
if (refreshDisabled[cameraId]) {
/* camera refreshing disabled, retry later */
timestamp /= 500;
}
timestamp = Math.round(timestamp);
- img.src = '/picture/' + cameraId + '/current/?seq=' + timestamp + '&width=' + img.width;
+
+ var uri = '/picture/' + cameraId + '/current/?seq=' + timestamp;
+ if (serverSideResize) {
+ uri += '&width=' + img.width;
+ }
+
+ img.src = uri;
img.loading = 1;
}
cameraFrames.each(function () {
/* limit the refresh rate to 10 fps */
var count = Math.max(1, 10 / this.framerate);
+ var serverSideResize = this.config['streaming_server_resize'];
var img = $(this).find('img.camera')[0];
if (img.error) {
}
else {
var cameraId = this.id.substring(6);
- refreshCameraFrame(cameraId, img, count <= 2); /* count <= 2 means at least 5 fps */
+ refreshCameraFrame(cameraId, img, count <= 2, serverSideResize); /* count <= 2 means at least 5 fps */
this.refreshDivider = 0;
}
<td class="settings-item-value"><input type="text" class="range styled streaming" id="streamingQualitySlider"></td>
<td><span class="help-mark" title="sets the live streaming quality (higher values produce a better video quality but require more bandwidth)">?</span></td>
</tr>
+ <tr class="settings-item advanced-setting local-streaming">
+ <td class="settings-item-label"><span class="settings-item-label">Streaming Image Resizing</span></td>
+ <td class="settings-item-value"><input type="checkbox" class="styled streaming" id="streamingServerResizeSwitch"></td>
+ <td><span class="help-mark" title="when this is enabled, the images are resized by motionEye before they are sent to the browser (disable when running motionEye on a slow CPU)">?</span></td>
+ </tr>
<tr class="settings-item advanced-setting local-streaming">
<td class="settings-item-label"><span class="settings-item-label">Streaming Resolution</span></td>
<td class="settings-item-value"><input type="text" class="range styled streaming" id="streamingResolutionSlider"></td>