Hacer un archivo de video y guardarlo a partir del contenido de un iframe
Publicado por Carlos (2 intervenciones) el 29/05/2021 16:07:44
Lo que pretendo hacer es capturar con javascrit en video el contenido de un div o un iframe de una pagina web y guardarlo en un archivo en la PC. Debo aclarar que tengo acceso para editar el codigo de la pagina web donde esta incrustado el div o el iframe.
Lo que más logre fue con navigator.mediaDevices.getDisplayMedia() capturar una ventana del navegador y guardarla en un archivo de video en la PC, con lo que si bien no es el objetivo de máxima satisfaría en parte mis necesidades, pero me resulta imprescindible poder direccionar en forma directa a la ventana a grabar sin pasar por la ventana de selección que presenta el navigator.mediaDevices.getDisplayMedia() para indicarle cual es el elemento a compartir.
Agradezco toda sugerencia posible para resolver la cuestion
Los codigos que uso son los siguientes
HTML
JAVASCRIPT
Saludos
Lo que más logre fue con navigator.mediaDevices.getDisplayMedia() capturar una ventana del navegador y guardarla en un archivo de video en la PC, con lo que si bien no es el objetivo de máxima satisfaría en parte mis necesidades, pero me resulta imprescindible poder direccionar en forma directa a la ventana a grabar sin pasar por la ventana de selección que presenta el navigator.mediaDevices.getDisplayMedia() para indicarle cual es el elemento a compartir.
Agradezco toda sugerencia posible para resolver la cuestion
Los codigos que uso son los siguientes
HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<video width="640" height="360" id="video" autoplay></video>
<div style="position:absolute; top:400px; left:50px;">
<br>
<button id="comenzar">Comenzar</button>
<button id="detener">Detener</button>
</div>
<script src="grabar.js"></script>
</body>
</html>
JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$(document).ready(function(){
var video=document.getElementById('video');
var comenzar=document.getElementById('comenzar');
var detener=document.getElementById('detener');
video.style.display="none";
comenzar.addEventListener("click", comenzarGrabacion);
detener.addEventListener("click", detenerGrabacion);
});
const constraints = {
video: true, audio: true,
};
const comenzarGrabacion = () => {
video.style.display="";
navigator.mediaDevices.getDisplayMedia(constraints)
.then((stream) => {
video.srcObject = stream;
console.log(video.srcObject);
video.play,
// Comenzar a grabar con el stream
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
//window.alert("Graba");
// En el arreglo pondremos los datos que traiga el evento dataavailable
const fragmentosDeAudio = [];
// Escuchar cuando haya datos disponibles
mediaRecorder.addEventListener("dataavailable", evento => {
// Y agregarlos a los fragmentos
fragmentosDeAudio.push(evento.data);
});
// Cuando se detenga (haciendo click en el botón) se ejecuta esto
mediaRecorder.addEventListener("stop", () => {
//window.alert("Para");
// Pausar vídeo
video.pause();
// Detener el stream
stream.getTracks().forEach(track => track.stop());
// Detener la cuenta regresiva
// Convertir los fragmentos a un objeto binario
const blobVideo = new Blob(fragmentosDeAudio);
// Crear una URL o enlace para descargar
const descarga = URL.createObjectURL(blobVideo);
// Crear un elemento <a> invisible para descargar el audio
let a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = descarga;
a.download = "grabacion.webm";
// Hacer click en el enlace
a.click();
// Y remover el objeto
window.URL.revokeObjectURL(descarga);
video.style.display="none";
});
});
};
const detenerGrabacion = () => {
if (!mediaRecorder) return alert("No se está grabando");
//window.alert("Detiene");
mediaRecorder.stop();
mediaRecorder = null;
};
Saludos
Valora esta pregunta


0