navigator.mediaDevices.getUserMedia().then(stream=>{ //a recorder is created var mediaRecorder = new MediaRecorder(stream); //started it mediaRecorder.start(); //an array is created that receives all the data var recordedChunks = []; //fill it mediaRecorder.ondataavailable = function(e){recordedChunks.push(e.data)}; //when stopped downloads the recording mediaRecorder.onstop=function(){ var blob = new Blob(recordedChunks, { 'type': 'video/mp4' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); document.body.appendChild(a); a.style = 'display: none'; a.href = url; a.download = 'test.webm'; a.click(); window.URL.revokeObjectURL(url); } }.catch()Este código funciona para mí, pero cuando se descarga el video, se descarga sin los detalles (imagen de la izquierda: un video descargado de youtube; imagen de la derecha: un video descargado usando mediaRecorder) https://i.stack.imgur.com/IxmYD .png
Y el otro problema es que no se pueden hacer las acciones necesarias en los videos (acelerar, ir a una hora especifica) ya que no tiene hora de finalización https://i.stack.imgur.com/yF7qx.png
¿Qué podría hacer para darle los detalles requeridos - formatos?
Aquí hay una página que también tiene los mismos problemas al descargar la grabación de su cámara web https://webrtc.github.io/samples/src/content/getusermedia/record/
Si desea configurar el tipo de medio MIME para una grabación creada por MediaRecorder, debe hacerlo cuando llame a su constructor . Por ejemplo:
stream = await navigator.mediaDevices.getUserMedia (constraints) const mediaRecorder = new MediaRecorder(stream, {mimeType: 'video/mp4'}) Pero los MediaRecorders de la mayoría de los navegadores (es decir, Chromium y Firefox) no producen video/mp4 . En su lugar, producen video/webm . Puede usar MediaRecorder.isTypeSupported() para averiguar si puede manejar el tipo que desea, o puede tomar cualquier tipo que le proporcione. mediaRecorder.mimeType es una propiedad de su instancia de MediaRecorder que le indica qué tipo de MIME obtiene.
Si desea obtener grabaciones mp4 de esos navegadores, deberá procesarlas posteriormente.
Y, por supuesto, tienes razón en que una grabación en vivo no tiene duración. MediaRecorder produce un flujo de datos adecuado para reproducir en vivo. Nuevamente, si desea que se pueda buscar y aplicar una hora de finalización, debe usar el procesamiento posterior. MediaRecorder no hace eso.
ffmpeg es una forma decente de postprocesar video. Explicar cómo hacerlo está mucho más allá del alcance de una respuesta de StackOverflow.