Opentok屏幕共享与音频

时间:2018-01-17 11:47:01

标签: opentok tokbox

我尝试使用opentok JS客户端创建一个屏幕共享应用程序,该客户端也共享发布者音频。

屏幕共享工作正常。但音频永远不会共享。

现在,我注意到控制台(Firefox)中的警告Invalid audioSource passed to Publisher - when using screen sharing no audioSource may be used。这是否意味着根本不可能,或音频源无效?

4 个答案:

答案 0 :(得分:5)

使用v2.13.0,现在可以将MediaStreamTrack作为自定义audioSource和videoSource传递给initPublisher。这意味着您可以将麦克风音频添加到屏幕共享流。这仅适用于Chrome或Firefox。 IE不支持MediaStreamTrack,Safari目前不支持屏幕共享。

const publish = Promise.all([
  OT.getUserMedia({
    videoSource: 'screen'
  }),
  OT.getUserMedia({
    videoSource: null
  })
])
.then(([screenStream, micStream]) => {
  return OT.initPublisher(null, {
    videoSource: screenStream.getVideoTracks()[0],
    audioSource: micStream.getAudioTracks()[0]
  });
});

以下是所有正常工作的示例https://output.jsbin.com/wozuhuc此示例仅适用于Firefox,因为Chrome需要扩展程序。

答案 1 :(得分:0)

如果您创建订阅者并将其连接到会话,它将从所有发布者接收音频和视频。据我所知,屏幕共享中没有音频,这就是你无法发布它的原因。那应该解决它。我希望这会有所帮助。

答案 2 :(得分:0)

我可以在Chrome上进行这项工作,可以使用getDisplayMedia({video: true, audio: true})来完成,现在可以显示一个复选框,允许用户共享设备音频:

Chrome share screen and audio

然后您可以使用它创建一个普通的发布者,该发布者使用此调用中的视频和音频流,如下所示:

 let prom = navigator.mediaDevices.getDisplayMedia({ video:true, audio: true });

    prom.then(function(result) {
        console.log("Collected permission. Going to start publishing.");
        desktopStream = result;
        var audioStream = desktopStream.getAudioTracks()[0];
        var videoStream = desktopStream.getVideoTracks()[0];

        console.log(audioStream);

        // Screen sharing is available. Publish the screen.
        screenPublisher = OT.initPublisher('ownScreen',
            {
                videoSource: videoStream,
                audioSource: audioStream,
                name: 'Sharing Screen',
                maxResolution: { width: 1920, height: 1920 },
                mirror: false,
                fitMode: "contain",
            },
            function(error) {
                if (error) {
                    console.log(error);
                    // Look at error.message to see what went wrong.
                } else {
                    session.publish(screenPublisher, function(error) {
                        if (error) {
                            handleError();
                        }

                        $('#shareScreen').fadeOut(150, function(){
                            $('#stopShare').fadeIn(150);
                        });

                        $('#stopShare').addClass('blob blue');

                    });
                }
            }
        );

您还可以为屏幕共享发布者添加一个名称,以使订阅者可以区分常规视频发布者和此新的自定义屏幕共享发布者。

答案 3 :(得分:-1)

我联系了tokbox支持,他们确认音频必须在另外一个流中发布。