无法触发WebRTC跟踪事件

我是WebRTC的初学者,并试图在两个浏览器窗口之间建立对等连接。我在本地运行的nodejs中实现了简单的websocket服务器。在提出候选人之前,一切似乎都很好。远程流在交换候选项后不会启动。我搜索并运行了几个例子,但无法获得我的工作。

我的 UI 有一些用于通信的输入。以下是我正在做的呼叫:

  1. 在第一个窗口中输入用户名,并在第一个窗口中输入远程用户名user1user2

  2. 在第二个窗口中输入用户名,在第二个窗口中输入远程用户名user2user1

  3. 单击每个两个窗口中的按钮。(在此之后,信令服务器将知道它们)。Connect to server

  4. 在第一个窗口中选择我的第一个相机设备,然后在第二个窗口中选择我的第二个相机设备。(相机将在此之后启动)

  5. 在第一个窗口中单击呼叫

问题是:远程流显示在被调用方窗口(第二个窗口)上,但从调用方窗口(第一个窗口)的开发控制台中,我没有看到函数运行。因此,远程流不会显示在调用方上。但我看到了候选日志。onTrack

因此,呼叫者看不到被叫方,但被叫方看到呼叫者。

index.html我在两个浏览器窗口中打开此文件两次(如 file://...)。

<!DOCTYPE html>

<html>

  <head>

    <title>Webrtc Test</title>

    <meta charset="utf-8" />

    <meta

      name="viewport"

      content="width=device-width, initial-scale=1, shrink-to-fit=no"

    />

  </head>

  <body>

    <table border="2">

      <tr>

        <td>

          <span>Signaling Server addres:</span>

          <input type="text" id="serverAddress" value="localhost:3001" onload="window.serverAddress = this;" />

        </td>

        <td>

          <span>Username:</span>

          <input type="text" id="username" value="user1" onload="window.username = this;" />

        </td>

        <td>

          <span>Target username:</span>

          <input type="text" id="remoteUsername" value="user2" onload="window.remoteUsername = this;" />

        </td>

        <td>Devices</td>

      </tr>

      <tr>

        <td>

          <textarea

            name="log"

            id="log"

            cols="50"

            rows="10"

            style="width: 100%; resize: vertical;"

          ></textarea>

        </td>

        <td>

          <video

            id="selfVideo"

            autoplay

            playsinline

            muted

            onload="window.selfVideo = this;"

          ></video>

        </td>


慕无忌1623718
浏览 289回答 2
2回答

婷婷同学_

语法如下:RTCPeerConnection.ontrack&nbsp;=&nbsp;eventHandler;所以看看你的代码,它应该是这样的:self.ontrack&nbsp;=&nbsp;onTrack;你为onicecandidate做这件事的方式

素胚勾勒不出你

我放了一些,并移动了里面的内容。我不知道为什么,但问题解决了。window.localStreaminitSelf()startSelf()const startSelf = async () => {&nbsp; // creating pc object first&nbsp; if (!pc) {&nbsp; &nbsp; pc = new RTCPeerConnection();&nbsp; &nbsp; pc.onicecandidate = onIceCandidate;&nbsp; &nbsp; pc.ontrack = onTrack;&nbsp; }&nbsp; // some code ...&nbsp; await navigator.mediaDevices&nbsp; &nbsp; .getUserMedia(constraints)&nbsp; &nbsp; .then((stream) => {&nbsp; &nbsp; &nbsp; window.localStream = stream;&nbsp; &nbsp; &nbsp; pc.addStream(window.localStream); // adding the stream before showing&nbsp; &nbsp; &nbsp; selfVideo.srcObject = window.localStream;&nbsp; &nbsp; })&nbsp; &nbsp; .catch((error) => console.log("Error start self", error));};这里的最终内容: https://github.com/user12043/webrtc-try
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript