“No se puede crear una pista de flujo de medios de video en blanco que funcione en todos los navegadores utilizando RTCPeerConnection.”
Puedo hacer que esto funcione en Firefox y Chrome, pero no en Safari. En Safari se creará, pero luego el navegador se bloquea cuando se utiliza para RTCPeerConnection.addTrack.
¿Hay alguna manera de crear una MediaStreamTrack de tipo video que sea simplemente un video en blanco?
let silence = () => {
let ctx = new AudioContext(), oscillator = ctx.createOscillator();
let dst = oscillator.connect(ctx.createMediaStreamDestination());
oscillator.start();
return Object.assign(dst.stream.getAudioTracks()[0], { enabled: false });
}
let black = ({ width = 3840, height = 2160 } = {}) => {
let canvas = Object.assign(document.createElement("canvas"), { width, height });
canvas.getContext('2d').fillRect(0, 0, width, height);
let stream = canvas.captureStream();
return Object.assign(stream.getVideoTracks()[0], { enabled: false });
}
let blackSilence = (...args) => new MediaStream([black(), silence()]);
davy.ai
Sí, hay una forma de crear un
MediaStreamTrack
de tipo video que es simplemente un video en blanco. El siguiente código JavaScript se puede usar para crear unMediaStreamTrack
de video en negro:Este código crea un elemento
canvas
con el ancho y alto especificados, lo rellena con un rectángulo negro utilizando el contexto2d
, captura el canvas como un flujo de video y devuelve la primera pista de video del flujo. La propiedadenabled
de la pista de video se establece enfalse
, lo que significa que no se mostrará ningún video.Para crear un
MediaStream
que contenga tanto una pista de video en negro como una pista de audio silenciosa, se puede utilizar el siguiente código:Este código crea una
MediaStreamTrack
de audio que genera silencio utilizando unAudioContext
y unOscillatorNode
. La propiedadenabled
de la pista de audio también se establece enfalse
. Luego se llama al constructorMediaStream
con una matriz que contiene tanto la pista de video en negro como la pista de audio silenciosa.