协商新的会话
This commit is contained in:
parent
526291bde8
commit
35cde09bb0
@ -73,10 +73,10 @@ export default class Entanglement {
|
||||
await pc.setRemoteDescription(data.answer)
|
||||
return
|
||||
}
|
||||
if (data.type === 'icecandidate') {
|
||||
console.debug(data.user.name, '发来 icecandidate 候选通道')
|
||||
if (data.type === 'candidate') {
|
||||
console.debug(data.user.name, '发来 candidate 候选通道')
|
||||
const pc = this.users.find(user => user.id === data.user.id).webrtc
|
||||
await pc.addIceCandidate(data.icecandidate)
|
||||
await pc.addIceCandidate(data.candidate)
|
||||
return
|
||||
}
|
||||
console.error('收到未知数据:', data)
|
||||
@ -86,12 +86,14 @@ export default class Entanglement {
|
||||
|
||||
async __create_webrtc(user) {
|
||||
const pc = new RTCPeerConnection(this.options)
|
||||
// 当有新的媒体流加入时触发
|
||||
pc.onicecandidate = (event) => {
|
||||
if (event.candidate) {
|
||||
console.debug(user.name, '发出 icecandidate 候选通道')
|
||||
this.ws.send(JSON.stringify({ type: 'icecandidate', user, icecandidate: event.candidate }))
|
||||
console.debug(user.name, '发出 candidate 候选通道')
|
||||
this.ws.send(JSON.stringify({ type: 'candidate', user, candidate: event.candidate }))
|
||||
}
|
||||
}
|
||||
// 当连接状态发生改变时触发
|
||||
pc.oniceconnectionstatechange = (event) => {
|
||||
if (webrtc.iceConnectionState === 'disconnected' || webrtc.iceConnectionState === 'failed') {
|
||||
console.error(data.name, '需要添加新的 candidate')
|
||||
@ -99,12 +101,18 @@ export default class Entanglement {
|
||||
console.debug(data.name, 'WebRTC 连接已经建立成功')
|
||||
}
|
||||
}
|
||||
pc.onnegotiationneeded = (event) => {
|
||||
// 协商新的会话, 建立初始连接或在网络条件发生变化后重新协商连接
|
||||
pc.onnegotiationneeded = async (event) => {
|
||||
console.log('onnegotiationneeded', event)
|
||||
const offer = await pc.createOffer()
|
||||
await pc.setLocalDescription(offer)
|
||||
this.ws.send(JSON.stringify({ type: 'offer', user, offer }))
|
||||
}
|
||||
// 当有新的媒体流加入时触发
|
||||
pc.ontrack = (event) => {
|
||||
console.log('ontrack', event)
|
||||
}
|
||||
// 当有新的数据通道加入时触发
|
||||
pc.ondatachannel = event => {
|
||||
console.log(data.user.name, '建立', event.channel.label, '通道')
|
||||
event.channel.onmessage = event => {
|
||||
|
Loading…
Reference in New Issue
Block a user