1

我在我的视频聊天 Web 应用程序中使用 simple-peer。如果两个用户都在进行音频通话,我该如何添加视频轨道以及如何禁用它。如果我使用 replaceTrack 我又会出现这个问题

error Error: [object RTCErrorEvent]
at makeError (index.js:17)
at RTCDataChannel._channel.onerror (index.js:490)

如果未为用户启用视频,我将显示个人资料图片。如果启用了视频,我想用视频替换这张图片,并为通话中的所有人替换它

4

1 回答 1

1

如果两个用户都启用了音频,则流仅包含音轨,因此我们可以在这里添加黑色空间(结束的视频轨道)。所以我们可以轻松解决此问题以获取更多信息,请访问此 https://blog.mozilla.org/webrtc/用替换轨道热身/

来自上述链接的代码


    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 = 640, height = 480} = {}) => {
      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(...args), silence()]);
    
    video.srcObject = blackSilence();

于 2021-09-06T07:10:31.097 回答