diff options
Diffstat (limited to 'templates/client.html')
| -rw-r--r-- | templates/client.html | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/templates/client.html b/templates/client.html new file mode 100644 index 0000000..e03394a --- /dev/null +++ b/templates/client.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> +<head> + <title>Client {{ client_id }} - Camera Streams</title> + <style> + .camera-stream { display: inline-block; margin: 10px; } + video { border: 1px solid #333; } + </style> +</head> +<body> + <h1>Camera Streams for client: {{ client_id }}</h1> + <div class="streams-container"> + {% for camera_id in camera_ids %} + <div class="camera-stream"> + <h2>Camera {{ camera_id }}</h2> + <img id="video-{{ camera_id }}" width="640" height="480" /> + </div> + {% endfor %} + </div> + <script> + // For each camera, open a WebSocket and update the corresponding <img> + {% for camera_id in camera_ids %} + (function() { + let ws = new WebSocket('ws://' + window.location.host + '/ws/{{ client_id }}/{{ camera_id }}'); + let image = document.getElementById('video-{{ camera_id }}'); + let currentUrl = null; + ws.onmessage = function(event) { + if (currentUrl) { + URL.revokeObjectURL(currentUrl); + } + currentUrl = URL.createObjectURL(event.data); + image.src = currentUrl; + }; + ws.onclose = function(event) { + console.log('WebSocket closed for camera {{ camera_id }}:', event); + }; + ws.onerror = function(event) { + console.log('WebSocket error for camera {{ camera_id }}:', event); + }; + window.addEventListener('beforeunload', function() { + ws.close(); + }); + })(); + {% endfor %} + </script> +</body> +</html> |
