为了账号安全,请及时绑定邮箱和手机立即绑定

无法触发WebRTC跟踪事件

无法触发WebRTC跟踪事件

慕无忌1623718 2022-08-27 09:27:02
我是WebRTC的初学者,并试图在两个浏览器窗口之间建立对等连接。我在本地运行的nodejs中实现了简单的websocket服务器。在提出候选人之前,一切似乎都很好。远程流在交换候选项后不会启动。我搜索并运行了几个例子,但无法获得我的工作。我的 UI 有一些用于通信的输入。以下是我正在做的呼叫:在第一个窗口中输入用户名,并在第一个窗口中输入远程用户名user1user2在第二个窗口中输入用户名,在第二个窗口中输入远程用户名user2user1单击每个两个窗口中的按钮。(在此之后,信令服务器将知道它们)。Connect to server在第一个窗口中选择我的第一个相机设备,然后在第二个窗口中选择我的第二个相机设备。(相机将在此之后启动)在第一个窗口中单击呼叫问题是:远程流显示在被调用方窗口(第二个窗口)上,但从调用方窗口(第一个窗口)的开发控制台中,我没有看到函数运行。因此,远程流不会显示在调用方上。但我看到了候选日志。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>
查看完整描述

2 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

语法如下:

RTCPeerConnection.ontrack = eventHandler;

所以看看你的代码,它应该是这样的:

self.ontrack = onTrack;

你为onicecandidate做这件事的方式


查看完整回答
反对 回复 2022-08-27
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

我放了一些,并移动了里面的内容。我不知道为什么,但问题解决了。window.localStreaminitSelf()startSelf()


const startSelf = async () => {

  // creating pc object first

  if (!pc) {

    pc = new RTCPeerConnection();

    pc.onicecandidate = onIceCandidate;

    pc.ontrack = onTrack;

  }


  // some code ...


  await navigator.mediaDevices

    .getUserMedia(constraints)

    .then((stream) => {

      window.localStream = stream;

      pc.addStream(window.localStream); // adding the stream before showing

      selfVideo.srcObject = window.localStream;

    })

    .catch((error) => console.log("Error start self", error));

};

这里的最终内容: https://github.com/user12043/webrtc-try


查看完整回答
反对 回复 2022-08-27
  • 2 回答
  • 0 关注
  • 288 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号