es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“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()]);
Tags:  ,

Answer

  1. Avatar for 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 un MediaStreamTrack de video en negro:

    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 });
    }
    

    Este código crea un elemento canvas con el ancho y alto especificados, lo rellena con un rectángulo negro utilizando el contexto 2d, captura el canvas como un flujo de video y devuelve la primera pista de video del flujo. La propiedad enabled de la pista de video se establece en false, 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:

    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 blackSilence = (...args) => new MediaStream([black(), silence()]);
    

    Este código crea una MediaStreamTrack de audio que genera silencio utilizando un AudioContext y un OscillatorNode. La propiedad enabled de la pista de audio también se establece en false. Luego se llama al constructor MediaStream con una matriz que contiene tanto la pista de video en negro como la pista de audio silenciosa.

Comments are closed.