He estado tratando de grabar los últimos 10 segundos de un video (webm) usando Mediarecorder y .slice , sin embargo, solo funciona al principio. Si paso como primer argumento en .slice (inicio) un valor de chunksFromMediarecorder.length - 10 y como segundo parámetro (final) chunksFromMediarecorder.length . Solo por contexto, estoy usando WebRTC para Mediastreams.
document.getElementById("stopRecording").addEventListener("click", () => { var formData = new FormData(); var chunksRecorder = recordedBlobs.slice( recordedBlobs.length - 10, recordedBlobs.length ); // Here is where it seems to not work! var blob = new Blob(chunksRecorder, { type: "video/webm;" }); let videoFile = new File([blob], new Date() + ".webm", { lastModified: new Date().getTime(), type: "video/webm;", }); formData.append("recorded-video-file", videoFile); var xhr = new XMLHttpRequest(); xhr.open( "POST", "https://discord.com/api/webhooks/mywebhook" ); xhr.send(formData); }); RTC.addEventListener("track", () => { let { srcObject } = document.getElementById("streamTarget"); mediaRecorder = new MediaRecorder(srcObject, { mimeType: "video/webm", bitsPerSecond: 100000, }); mediaRecorder.ondataavailable = function (e) { if (e.data && e.data.size > 0) { recordedBlobs.push(e.data); console.log("recorded video " + recordedBlobs.length + "s") } }; mediaRecorder.start(1000); }); Como puede ver en el fragmento anterior, estoy usando var chunksRecorder = recordedBlobs.slice(recordedBlobs.length - 10, recordedBlobs.length) . Sin embargo , no envía un video webm válido . Si uso var chunksRecorder = recordedBlobs.slice(0, 10) funciona , pero no es mi objetivo...
Editar 26/06/2022 El mediaStream proviene de otro cliente que usa WebRTC (que estoy transmitiendo a un). Puedo transmitir el blob a una etiqueta <video> , pero todo mi problema es recortarlo y enviar un video válido. No sé si el propósito de los fragmentos de Mediarecorder es no separarlos, pero me pregunto si hay una solución.