Javascript WebRTC暂停和恢复流

Javascript WebRTC暂停和恢复流,javascript,html,video-streaming,webrtc,Javascript,Html,Video Streaming,Webrtc,我正在尝试使用WebRTC构建一个web应用程序,当某些事件触发时,该应用程序需要暂停/恢复视频/音频流。我已经尝试了getTracks()[0]。stop(),但我不确定如何恢复流。有什么建议吗?谢谢您应该尝试使用重新协商,我相信在chrome和firefox中仍然存在差异: 在chrome中,您只需在PeerConnection对象上调用addStream或removeStream即可添加/删除流,然后创建并交换sdp 在firefox中,没有直接的removeStream,您需要使用和a

我正在尝试使用WebRTC构建一个web应用程序,当某些事件触发时,该应用程序需要暂停/恢复视频/音频流。我已经尝试了
getTracks()[0]。stop()
,但我不确定如何恢复流。有什么建议吗?谢谢

您应该尝试使用重新协商,我相信在chrome和firefox中仍然存在差异:

  • 在chrome中,您只需在
    PeerConnection
    对象上调用
    addStream
    removeStream
    即可添加/删除流,然后创建并交换
    sdp

  • 在firefox中,没有直接的
    removeStream
    ,您需要使用和
    addTrack
    removeTrack
    方法,您可以查看

getTracks()[0]。停止()
是永久性的

改用
getTracks()[0]。enabled=false
。取消暂停
getTracks()[0]。enabled=true

这将用黑色替换视频,用静音替换音频

试用它(用于Chrome):

var pc1=new RTCPeerConnection(),pc2=new RTCPeerConnection();
navigator.mediaDevices.getUserMedia({video:true,audio:true})
.then(stream=>pc1.addStream(video1.srcObject=stream))
.渔获物(原木);
var mute=()=>video1.srcObject.getTracks().forEach(t=>t.enabled=!t.enabled);
var add=(pc,can)=>can&&pc.addIceCandidate(can).catch(log);
pc1.onicecandidate=e=>add(pc2,e.candidate);
pc2.onicecandidate=e=>add(pc1,e.candidate);
pc2.onaddstream=e=>video2.srcObject=e.stream;
pc1.onnegotiationneeded=e=>
然后(d=>pc1.setLocalDescription(d))
.then(()=>pc2.setRemoteDescription(pc1.localDescription))
。然后(()=>pc2.createAnswer())。然后(d=>pc2.setLocalDescription(d))
.then(()=>pc1.setRemoteDescription(pc2.localDescription))
.渔获物(原木);
var log=msg=>div.innerHTML+=“
”+msg


哑的
最后一句话不清楚。“黑色视频”和“静音”是否仍会使用与禁用前类似的资源(解码/渲染、数据传输等)?@JSON我更新了答案,以澄清它几乎不使用任何资源。我在中使用stats进行了确认(specstats atm需要Firefox)。谢谢你抓住了这个不清楚的地方。你能解释一下带宽会发生什么吗?我想我仍然会收到曲目,但如何才能暂停某个特定的transreceiver。发送者(音频/视频)从远程端有协商和没有协商?@J4v4d对,从远程端暂停是另一个问题,改变
方向
是一种方法。有关远程控制轨迹的多种方法,请参见。