let ws = new WebSocket("ws://127.0.0.1:8000/ws"); let videoQueue = {}; // Hier speichern wir alle laufenden Videos console.log("Start Script"); ws.onmessage = function(event) { try { let packet = JSON.parse(event.data); console.log(packet); if (packet.data_flow !== undefined) { let message = packet.data_flow; console.log(message); // Überprüfen, ob die erwarteten Felder existieren if (message.id && message.source && message.target && message.path) { // Falls das Video noch nicht existiert, erstelle ein neues Element if (!videoQueue[message.id]) { videoQueue[message.id] = createVideoElement(message.id, message.source, message.target, message.path); } // Update der UI updateVideoElement(message.id, message); } else { console.error("Fehlende Felder in der Nachricht", message); } } if (packet.video_list !== undefined) { let video_list = packet.video_list; createVideoList(video_list); createVideoListFinished(video_list); video_list.forEach(list => { if(list.finished === 1) { let container = document.getElementById(list.id); // Holt das Element mit der id if (container) { container.remove(); // Entfernt das Element aus dem DOM } } }); } } catch (e) { console.error("Fehler beim Parsen der WebSocket-Nachricht:", e, event.data); } }; ws.onerror = function(event) { console.error("WebSocket Fehler:", event); }; function createVideoList(video) { let container = document.createElement("div"); container.className = "video_list"; container.id = "remaining" let html = ``; video.forEach(list => { if(list.finished === 0) { html += ` ${list.file_name} ${list.duration} ${list.source_file_size} `; } }); container.innerHTML = `
${html}
`; document.getElementById("video_list").appendChild(container); return container; } function createVideoListFinished(video) { let container = document.createElement("div"); container.className = "video_list"; container.id = "finished" let html = ``; video.forEach(list => { if(list.finished === 1) { html += ` ${list.file_name} ${list.duration} ${list.source_file_size} `; } }); container.innerHTML = `
${html}
`; document.getElementById("video_finished").appendChild(container); return container; } function createVideoElement(id, source, target, path) { let container = document.createElement("div"); container.className = "video"; container.id = id; container.innerHTML = `
${source}    ➝    ${target}
${path}

0 Anz
0 fps
0 Q
0 MB
0 Mb/s
0 x
0
`; document.getElementById("videos").appendChild(container); return container; } function updateVideoElement(id, data) { let container = document.getElementById(id); if (!container) return; container.querySelector(".frame").textContent = data.frame || '---'; container.querySelector(".fps").textContent = data.fps || '---'; container.querySelector(".q").textContent = data.q || '---'; container.querySelector(".size").textContent = data.size || '---'; container.querySelector(".bitrate").textContent = data.bitrate || '---'; container.querySelector(".speed").textContent = data.speed || '---'; container.querySelector(".time_remaining").textContent = data.time_remaining || '---'; let progressBar = container.querySelector(".progress-bar"); let progress = data.loading; // Annahme: `loading` kommt als Zahl von 0 bis 100 progressBar.style.width = progress + "%" if (data.finished == 3) { progressBar.style.background = "linear-gradient(90deg, #4caf50, #00c853)"; container.querySelector(".finished").textContent = "Läuft"; } else if(data.finished == 1) { progressBar.style.background = "#4caf50"; container.querySelector(".finished").textContent = "Fertig"; } else if(data.finished == 2) { progressBar.style.background = "#ff0000"; container.querySelector(".finished").textContent = "Fehler"; } } console.log("End Script");