是否可以通过WebRTC与屏幕共享来广播音频

时间:2013-10-15 13:26:18

标签: webrtc screensharing

是否可以使用WebRTC进行屏幕共享广播音频? 使用getUserMedia进行简单调用audio: true会因权限被拒绝而失败。 有没有可以用来播放音频的工作人员? 是否会在屏幕共享旁边实施音频?

感谢。

4 个答案:

答案 0 :(得分:10)

请参阅此演示:Share screen and audio/video from single peer connection!

捕获多个流并将其附加到单个对等连接。 AFAIK,音频以及chromeMediaSource:screen是" still" 不允许


于2016年4月21日更新

现在,您可以在Firefox和Chrome上使用单个getUserMedia请求捕获音频+屏幕

但Chrome只支持音频+标签,即您无法捕获全屏和音频。

音频+标签表示任何Chrome标签以及麦克风。


于2017年1月9日更新

您可以通过发出两个并行(UNIQUE)getUserMedia请求来捕获音频和屏幕流。

现在,您可以使用addTrack方法将音轨添加到屏幕流中:

var audioStream = captureUsingGetUserMedia();
var screenStream = captureUsingGetUserMedia();

var audioTrack = audioStream.getAudioTracks()[0];

// add audio tracks into screen stream
screenStream.addTrack( audioTrack );

现在screenStream同时包含音频和视频曲目。

nativeRTCPeerConnection.addStream( screenStream );
nativeRTCPeerConnection.createOffer(success, failure, options);

答案 1 :(得分:5)

截至2020年5月

要共享屏幕共享的音轨,可以使用getDisplayMedia代替getUserMediaDocs

navigator.mediaDevices.getDisplayMedia({audio: true, video: true})

当前仅在Chrome / Edge中支持此功能,并且仅在使用“ Chrome标签”共享选项时才支持。您会在对话框中看到Share audio的复选标记。

enter image description here

答案 2 :(得分:2)

在Firefox中,您可以使用getUserMedia在同一请求中获取屏幕共享/ etc和mic音频,并可以将其附加到PeerConnection。您可以将其与其他流组合 - Firefox中单个PeerConnection中的多个音频或视频轨道需要Firefox 38或更高版本。目前38是Developer Edition(以前称为Aurora)。 38应该在大约9周左右发布。

答案 3 :(得分:2)

是的,您可以通过两个请求在Chrome上录制音频和屏幕记录。

 getScreenId(function (error, sourceId, screen_constraints) {
  

捕获屏幕

  navigator.getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia;
  navigator.getUserMedia(screen_constraints, function (stream) {
    navigator.getUserMedia({audio: true}, function (audioStream) {
      stream.addTrack(audioStream.getAudioTracks()[0]);
      var mediaRecorder = new MediaStreamRecorder(stream);
      mediaRecorder.mimeType = 'video/mp4'
      mediaRecorder.stream = stream;

      document.querySelector('video').src = URL.createObjectURL(stream);
      var video =  document.getElementById('screen-video')
      if (video) {
        video.src = URL.createObjectURL(stream);
        video.width = 360;
        video.height = 300;
      }
    }, function (error) {
      alert(error);
    });
  }, function (error) {
    alert(error);
  });
});