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

14

是否可以在WebRTC中使用屏幕共享广播音频? 仅使用audio:true调用getUserMedia会导致权限被拒绝的错误。 是否有任何可用于广播音频的解决方法? 屏幕共享旁边会实现音频吗?

谢谢。

4个回答

19

请参考此演示: 分享屏幕和音频/视频来自单个对等连接!

多个流被捕获并附加到单个对等连接上。据我所知,使用chromeMediaSource:screen的音频 "仍然" 不被允许


更新于2016年4月21日

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

然而,Chrome仅支持音频+标签页,即您无法同时捕获全屏和音频。

音频+标签页意味着任何带有麦克风的Chrome标签页。


更新于2017年1月9日

您可以通过进行两个并行(唯一)的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);

使用chromeMediaSource:screen与音频同时在单个点对点连接中的进展有没有更新? - ChrisM
有人可以回答这个问题吗?http://stackoverflow.com/questions/35444604/desktop-audio-capture-not-working-for-chrome-app - user2801184
@MuazKhan 这个支持屏幕和系统音频,而不是麦克风吗? - leetom
@leetom 屏幕+扬声器由两个Chrome扩展API支持:1)desktoPCapture,2)tabCapture。另一方面,getDisplayMedia目前还不支持扬声器捕获。也就是说,使用getDisplayMedia只能捕获屏幕,而不能捕获系统的音频。我建议您暂时使用desktopCapture PAI,直到getDisplayMedia具备音频支持功能。 - Muaz Khan
@MuazKhan 只有音频流正在进行时才能进行屏幕共享吗? - Arjun
显示剩余5条评论

12

截至2020年5月

为了共享屏幕共享的音频轨道,您可以使用getDisplayMedia而不是getUserMedia文档

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

目前仅在Chrome / Edge中支持,并且仅在使用“Chrome标签页”共享选项时才支持。您将在对话框中看到共享音频的复选标记。

enter image description here


如果您有一个带有2个或更多音轨的流,则仅将第一个音轨流式传输到对等方。如果您想要两者,您需要在通过WebRTC发送之前将它们混合。 - diasks2

3

您可以通过两个请求在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);
  });
});

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

同时创建一个WebRTC屏幕共享并使用getUserMedia会产生奇怪的结果,其中一些音频会被切掉,因为音频录制似乎无法正常工作。因此,我即将放弃实现一个基于getUserMedia的音频记录器,该记录器在屏幕录制同时进行记录。 - oliverbachmann
我将尝试使用MediaRecorder。您可能需要在bugzilla中的Core :: Audio / Video Recording中提交错误,并抄送:mreavy。它应该可以工作。 - jesup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接