第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

WebRTC卡在連接狀態(tài)

WebRTC卡在連接狀態(tài)

我已經(jīng)成功地傳達(dá)了從A到B的WebRTC連接的報(bào)價(jià),答案和冰候選人。此時(shí),連接卡在狀態(tài)。啟動(dòng)器(A)似乎在一段時(shí)間后超時(shí)或什么,并切換到狀態(tài),而它的遠(yuǎn)程(B)則永久停留在狀態(tài)。"connecting""failed""connecting"任何幫助將不勝感激。創(chuàng)建對(duì)等節(jié)點(diǎn)(A 和 B):let peer = new RTCPeerConnection({    iceServers: [        {            urls: [                "stun:stun1.l.google.com:19302",                "stun:stun2.l.google.com:19302",            ],        },        {            urls: [                "stun:global.stun.twilio.com:3478?transport=udp",            ],        },    ],    iceCandidatePoolSize: 10,});創(chuàng)建報(bào)價(jià) (A):peer.onnegotiationneeded = async () => {    offer = await peer.createOffer();    await peer.setLocalDescription(offer);};收集冰候選者(A):peer.onicecandidate = (evt) => {    if (evt.candidate) {        iceCandidates.push(evt.candidate);    } else {        // send offer and iceCandidates to B through signaling server        // this part is working perfectly    }};創(chuàng)建答案并填充候選冰 (B):await peer.setRemoteDescription(offer);let answer = await this._peer.createAnswer();await peer.setLocalDescription(answer);// send answer back to A through signaling serverfor (let candidate of sigData.iceCandidates) {    await peer.addIceCandidate(candidate);}從 B 到信令服務(wù)器 (A) 的應(yīng)答:await peer.setRemoteDescription(answer);檢測(cè)連接狀態(tài)更改(A 和 B):peer.onconnectionstatechange = () => {    console.log("state changed")    console.log(peer.connectionState);}另請(qǐng)注意,有兩次成功連接,但我還沒有看到它再次工作。編輯:我忘了提到我也在創(chuàng)建一個(gè)數(shù)據(jù)通道(沒有這個(gè)事件似乎不會(huì)調(diào)用)。這將在構(gòu)造并附加任何事件處理程序后立即調(diào)用。onicecandidateRTCPeerConnectionlet channel = peer.createDataChannel("...", {    id: ...,    ordered: true,});編輯2:正如@jib建議的那樣,我現(xiàn)在也在收集B中的冰候選者,并把他們送回A進(jìn)行添加。但是,完全相同的問題仍然存在。編輯3:它似乎連接時(shí),我第一次硬重新加載A的網(wǎng)頁(yè)和B的網(wǎng)頁(yè).連接再次停止工作,直到我再做一次硬重新加載。有沒有人知道為什么會(huì)這樣?至少我應(yīng)該能夠暫時(shí)繼續(xù)開發(fā),直到我能弄清楚這個(gè)問題。編輯4:我刪除了我正在使用的構(gòu)造函數(shù),并將構(gòu)造函數(shù)留空。不知何故,它現(xiàn)在更可靠了。但是我還沒有在iOS Safari上獲得成功的連接!iceServersRTCPeerConnection
查看完整描述

2 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

在兩個(gè)瀏覽器窗口中打開它,然后點(diǎn)擊其中一個(gè)窗口中的按鈕。這是代碼:Connect


const pc = new RTCPeerConnection();


call.onclick = async () => {

  const stream = await navigator.mediaDevices.getUserMedia({video:true,audio:true})

  video.srcObject = stream;

  for (const track of stream.getTracks()) {

    pc.addTrack(track, stream);

  }

};


pc.ontrack = ({streams}) => video.srcObject = streams[0];

pc.oniceconnectionstatechange = () => console.log(pc.iceConnectionState);

pc.onicecandidate = ({candidate}) => sc.send({candidate});

pc.onnegotiationneeded = async () => {

  await pc.setLocalDescription(await pc.createOffer());

  sc.send({sdp: pc.localDescription});

}


const sc = new localSocket(); // localStorage signaling hack

sc.onmessage = async ({data: {sdp, candidate}}) => {

  if (sdp) {

    await pc.setRemoteDescription(sdp);

    if (sdp.type == "offer") {

      await pc.setLocalDescription(await pc.createAnswer());

      sc.send({sdp: pc.localDescription});

    }

  } else if (candidate) await pc.addIceCandidate(candidate);

}

這是A和B的相同來源,用您喜歡的信令通道(例如websocket)替換黑客攻擊。localSocket


不要緩存ICE候選者,因?yàn)檫@違背了涓流ICE的目的。它可能在本地看起來很快,但在實(shí)際網(wǎng)絡(luò)中ICE可能需要時(shí)間。


事實(shí)上,如果您延遲發(fā)送報(bào)價(jià)/答案,直到收集了所有本地候選人,則發(fā)送候選人是沒有意義的,因?yàn)楹蜻x人已經(jīng)嵌入到提議/答案()中。pc.localDescription


查看完整回答
反對(duì) 回復(fù) 2022-09-02
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

最后!幾周后,我已經(jīng)弄清楚了這個(gè)問題,這個(gè)問題在我的問題中包含的代碼中并不明顯,但對(duì)于遇到類似問題的人來說,它可能仍然有用。

我以為在活動(dòng)結(jié)束后,冰上收集正在完成,并且提供了報(bào)價(jià)/答案。onnegotiationneeded

由于這個(gè)不正確的假設(shè),我在這個(gè)階段與冰候選人一起發(fā)出報(bào)價(jià)/答案的信號(hào),但是非常頻繁地(根據(jù)我的經(jīng)驗(yàn),總是在iOS Safari中)此時(shí)尚未創(chuàng)建報(bào)價(jià)/答案。

我通過創(chuàng)建兩個(gè)承諾來解決這個(gè)問題:a)完成冰候選收集,以及b)創(chuàng)建報(bào)價(jià)/答案。我使用了兩個(gè)承諾,當(dāng)它們都完成時(shí),我通過信令服務(wù)器同時(shí)發(fā)送了冰候選者和提供/答案。Promise.all

這是可行的,但是當(dāng)然在未來,我應(yīng)該通過發(fā)送零碎的東西來“涓涓細(xì)流”這些信息,而不是等待一切完全完成。但是我將來會(huì)擔(dān)心這一點(diǎn),因?yàn)槟壳拔艺谑褂肏TTP請(qǐng)求,而且這太麻煩了。

編輯:我的連接仍然總是卡住,所以我創(chuàng)建了一個(gè)新問題。但是,如果沒有本地連接,則現(xiàn)在100%完全可靠:)iceServersiceServers


查看完整回答
反對(duì) 回復(fù) 2022-09-02
  • 2 回答
  • 0 關(guān)注
  • 390 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)