2

我正在尝试为我的聊天实现 webrtc 和简单的对等点。一切正常,但我想添加屏幕共享选项。为此,我尝试了:

$("#callScreenShare").click(async function(){
   if(captureStream != null){                
     p.removeStream(captureStream)
     p.addStream(videoStream)
     captureStreamTrack.stop()
     captureStreamTrack =captureStream= null
     $("#callVideo")[0].srcObject = videoStream
     $(this).text("screen_share")
   }else{
     captureStream = await navigator.mediaDevices.getDisplayMedia({video:true, audio:true})
     captureStreamTrack = captureStream.getTracks()[0]
     $("#callVideo")[0].srcObject = captureStream
     p.removeStream(videoStream)
     console.log(p)
     p.addStream(captureStream)
     $(this).text("stop_screen_share")
   }
})

但是我停止了摄像头,然后什么也没做,并且我对等计算机上的视频流被阻止了。没有错误,仅此而已。

当事件流被触发时,我已经放置了一个 console.log 。第一次触发,但是当我调用addStream方法时,它没有

如果有人可以帮助我,那将非常有帮助。

4

2 回答 2

0

下面的函数可以解决问题。只需调用该replaceTrack函数,将新轨道和远程对等实例传递给它。

function replaceTrack(stream, recipientPeer ) {
  recipientPeer.replaceTrack(
    recipientPeer.streams[0].getVideoTracks()[0],
    stream,
    recipientPeer.streams[0]
  )
}
于 2021-10-05T04:35:26.410 回答
0

我所做的是更换轨道。因此,不要删除和添加流:

p.streams[0].getVideoTracks()[0].stop()
p.streams[0].replaceTrack(p.streams[0].getVideoTracks()[0], captureStreamTrack, p.streams[0])

这将用显示器中的一个替换流中的视频轨道。

简单对等文档

于 2020-05-03T19:24:15.110 回答