簡體   English   中英

嘗試共享屏幕時出現簡單對等 webrtc 錯誤

[英]simple-peer webrtc error when trying to share screen

我正在使用 simple-peer 構建一個視頻聊天應用程序,用戶也可以在其中共享屏幕。 應用程序的流程是這樣的,當用戶 A 創建房間時,他可以抓取頁面 url 並與用戶 B 共享。當用戶 B 加入時,會為他創建一個發起者對等體,如圖所示。

function createPeer(partnerID, callerID, stream) {
        const peer = new Peer({
            initiator: true,
            trickle: false,
            stream,
        });

        peer.on("signal", signal => {
            const payload = {
                partnerID,
                callerID,
                signal
            }
            socketRef.current.emit("call partner", payload);
        });

        peer.on("stream", handleStream);

        return peer;
    }

當用戶 A 從用戶 B 獲得報價時,會為他創建一個非發起者對等點,如此處所示。

function addPeer(incomingSignal, callerID, stream) {
        const peer = new Peer({
            initiator: false,
            trickle: false,
            stream,
        });

        peer.on("signal", signal => {
            const payload = {
                callerID,
                signal
            }
            socketRef.current.emit("accept call", payload);
        });

        peer.on("stream", handleStream);

        peer.signal(incomingSignal);
        return peer;
    }

現在,當任何用戶決定共享他們的屏幕時,這個 function 就會被調用。

 function shareScreen() {
        navigator.mediaDevices.getDisplayMedia().then(stream => {
            const track = stream.getTracks()[0];
            peerRef.current.removeStream(videoStream.current);
            peerRef.current.addStream(stream);
            userVideoRef.current.srcObject = stream;
            track.onended = function () {
               userVideoRef.current.srcObject = videoStream.current;
               peerRef.current.removeTrack(track, stream);
            };
        });
    }

我得到的行為真正奇怪的是,當用戶 B,即調用方,想要共享他的屏幕時,一切正常,但是當用戶 A,被調用方,想要共享他的屏幕時,我得到以下錯誤。

index.js:17 未捕獲的錯誤:[object RTCErrorEvent] at makeError (index.js:17) at RTCDataChannel._channel.onerror (index.js:490)

我不確定我哪里出錯了。

經過一番測試,我發現了錯誤的來源。

您需要做的是在調用 function addPeer() 之后調用 function peer.signal(incomingSignal) addPeer()addPeer()返回的peer變量 ZC1C425Z0741A68384F14

這是一個例子:

function addPeer(incomingSignal, callerID, stream) {
    const peer = new Peer({
        initiator: false,
        trickle: false,
        stream,
    });

    peer.on("signal", signal => {
        const payload = {
            callerID,
            signal
        }
        socketRef.current.emit("accept call", payload);
    });

    peer.on("stream", handleStream);

    // peer.signal(incomingSignal);
    return peer;
}
let peer = addPeer(incomingSignal, callerId, stream);
peer.signal(incomingSignal);

它會正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM