我们一直在使用 PeerJS for web 开发一个 WebRTC 应用程序。
服务器端:NodeJS
客户端:HTML5/CSS/Javascript/Angularjs
我们 90% 在那里,它在 chrome firefox 中运行良好,但在 safari 中不起作用。我知道 safari 不支持 WebRTC。
是否有任何解决方法可以使它像任何插件一样在 safari 中工作?
我的第二个问题是,如果我复制我的网络代码并将其放入 phonegap 或 ionic 中,它是否可以在 Android 和 IOS 中使用。 我的意思是现在我们已经使用 peerJS 进行了一次聊天,它纯粹是一个 javascript 代码,可以在 Android 和 IOS 平台的 phonegap 或 ionic 应用程序中进行聊天
请分享您的想法,非常感谢。谢谢:-)
这个问题以前有人问过,但我还没有找到答案。我基本上遇到了与此处和此处所述相同的问题。
我正在尝试使用 PeerJS 设置 webRTC 连接。它在 LAN 中完美运行,但我无法让它在 Internet 上工作。我使用 coturn 作为 TURN 服务器,但到目前为止这还没有解决问题。 Chromium 控制台打印出以下内容:
PeerJS: Added ICE candidate for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS: Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS: Received remote stream
peer.js:1476 PeerJS: Receiving stream MediaStream
peer.js:1476 PeerJS: Created answer.
peer.js:1476 PeerJS: Set localDescription: answer for: client1
3peer.js:1476 PeerJS: Received ICE candidates for: client1
3peer.js:1476 PeerJS: Added ICE candidate …Run Code Online (Sandbox Code Playgroud) 我正在使用 PeerJS,它是 WebRTC 的 JavaScript 实现。我用它通过 DataChannel 发送数据。
浏览器引擎有速度限制吗?
即使我的应用程序的两个实例都在同一台计算机上运行,我也无法发送超过 ~20MB/s 的数据。使用我的 Linux 机器的系统监视器可以看到数据没有通过网络发送。我已经尝试过 Chrome 和 Firefox。
有人使用 WebRTC 数据通道体验过更快的速度吗?我认为点对点连接应该是最快的数据传输方式,并且想知道这是我的实现还是协议问题。我知道窗口大小对性能尤其重要。PeerJS 的任何实际经验可能会有帮助吗?
我正在尝试最简单的例子,直接从他们的网站上提取。这是我的整个 html 文件,代码完全取自https://peerjs.com/index.html:
<script src="https://unpkg.com/peerjs@1.3.1/dist/peerjs.min.js"></script>
<script>
var peer = new Peer();
var conn = peer.connect('another-peers-id');
// on open will be launch when you successfully connect to PeerServer
conn.on('open', function(){
// here you have conn.id
conn.send('hi!');
});
</script>
Run Code Online (Sandbox Code Playgroud)
在 Chrome 和 Edge 中,我在控制台中得到了这个:
peerjs.min.js:64 GET https://0.peerjs.com/peerjs/id?ts=15956160926060.016464029424720694 net::ERR_CONNECTION_REFUSED
Run Code Online (Sandbox Code Playgroud)
在 Firefox 中,我得到了这个:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://0.peerjs.com/peerjs/id?ts=15956162489620.8436734374800061. (Reason: CORS request did not succeed).
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在使用 socket.io 和 peerjs 创建视频会议应用程序。在本地主机上一切正常。但是当我在heroku上推送/托管它时,它会在浏览器的控制台中显示这个错误:
index.js:83 WebSocket connection to 'wss://vidconsom.herokuapp.com/socket.io/?EIO=3&transport=websocket&sid=zbEGAHBj9w_dpcQfAAAF' failed: Invalid frame header.
有人可以帮忙吗?
更新:检查下面的答案
这是我的 server.js 代码:
const express = require("express");
const app = express();
const path = require("path");
// const { PeerServer } = require("peer");
const { ExpressPeerServer } = require("peer");
const { v4: uuidV4 } = require("uuid");
const server = require("http").Server(app);
const io = require("socket.io")(server);
const PORT = process.env.PORT || 3000;
const expServer = server.listen(PORT, () =>
console.log(`Server started on port ${PORT}`)
);
const peerServer …Run Code Online (Sandbox Code Playgroud) 我目前正在编写一个应用程序,使用户能够使用peerJS 通过 webRTC 启动视频通话。现在我希望用户能够决定是否要添加音频,但无需重新启动通话。
正如我所见 - 根据这个答案- 无法使用浏览器控制麦克风。假设我在启用视频和音频的情况下开始通话,我可以将合作伙伴端的视频元素静音。我不想那样做。为什么?我想象有人可以使用浏览器的开发者控制台并取消视频元素的静音,从而在呼叫者不知情的情况下监视呼叫者。
因此,目前看来我必须重新呼叫合作伙伴并激活视频和音频,现在如果用户只想要视频,我将不得不再次重新呼叫。
我的问题:有更好的方法吗?另外,如果接听电话,是否有办法确定是纯视频通话还是视频和音频通话?
我将PeerJS用于我的 P2P 应用程序(多人游戏)。一切都很好(对等点之间的连接,发送数据),但我不知道如何手动关闭对等点之间的连接。
在文档中是“关闭与服务器的连接”或“关闭与服务器的连接并终止所有现有连接”的函数(peer.disconnect(),peer.destroy()),但我只想“终止现有连接”,而不是“关闭与服务器的连接”服务器”。
我知道我可以处理数组中的连接,并仅为具有某种状态(例如“已连接”或“断开连接”)的对等方发送/接收数据,但其他对等方可以向我发送数据以进行过载(黑客> ddos ...),所以基本上我希望有机会给予类似禁令之类的东西。
有什么想法吗(抱歉英语不好)?
解决了:
我一定是真的瞎了。有DataConnection.close()关闭对等点之间连接的功能。
我们正在尝试构建一个内部系统,该系统将使用 WebRTC 为我们提供简单的聊天/视频功能。我们已经成功部署了 Peer.js 客户端和服务器,它们在浏览器上运行得很好。
然而,我们似乎找不到一个相当简单的 Android/iOS 客户端/SDK 来使其与我们的 PeerJS 服务器兼容。
我们尝试研究AppRTC并让 Android 客户端与他们的服务器一起运行,但是我们无法理解如何将其连接到我们的 PeerJS 服务器,因为 Android 客户端(和服务器实现)似乎非常复杂(我们不是 JAVA 专家) )。
我也研究过 EasyRTC,不过他们似乎已经撤回了原生 SDK,但技术堆栈看起来非常接近我们的。
我的问题是,有没有人有 Android/iOS 客户端与在 NodeJS 服务器上运行的 WebRTC 一起使用?有哪些可能的解决方法可以使其在 Android 上本地运行?
我们正在寻找一个相当简单的 Android SDK(链接到库/示例项目),它可以与 PeerJS 服务器一起使用。
编辑:我们可以自己构建一个信令服务器(在 NodeJS 上),但是从那时起我们如何构建 Android/iOS 客户端呢?
对于能回答我们问题的人,我悬赏 200 名代表。
我只是在 NodeJs 和 ReactJs 中创建peerjs 视频流应用程序
下面的代码工作正常,我能够创建新的对等点,并且open事件也正常工作。
const peer = new Peer(undefined,{
host:"/",
port:"5001"
});
peer.on('open',id=>{
socket.emit('join-room', roomId,id);
})
Run Code Online (Sandbox Code Playgroud)
在服务器端,每当'join-room'发出事件时,服务器都会发出另一个事件'user-disconnected'并传递userId (peerjs)给客户端。
// server.js
socket.on('join-room',(roomId,userId)=>{
console.log(`user ${userId} joined ${roomId}`);
socket.join(roomId);
socket.to(roomId).emit('user-connected',userId);
socket.on('disconnect', () => {
socket.to(roomId).emit('user-disconnected', userId)
})
})
Run Code Online (Sandbox Code Playgroud)
每当 'user-connected'在客户端触发时,我都会打电话connectToNewUser,到目前为止一切正常。
socket.on('user-connected',userId=>{
console.log("New user connected...")
connectToNewUser(userId, stream)
});
Run Code Online (Sandbox Code Playgroud)
这是登录控制台console.log('connectToNewUser',1222.....)没有错误。
但是,这call.on('stream')从来没有被称为
connectToNewUser(userId, stream) {
console.log('connectToNewUser',userId)
const call = peer.call(userId, stream);
const video = …Run Code Online (Sandbox Code Playgroud) 我已添加peerjs到 Next.js 应用程序和以下两行,如下所示。如果我删除这两行,应用程序就可以工作。
// index.tsx
import { Peer } from 'peerjs'
export default function Home() {
const peer = new Peer('pick-an-id-jwrn')
Run Code Online (Sandbox Code Playgroud)
并yarn build提出这个错误,为什么?我已经成功安装包了。
at Object.982 (/Users/kukodajanos/Workspace/serverless-chat/.next/server/pages/index.js:50:41)
at __webpack_require__ (/Users/kukodajanos/Workspace/serverless-chat/.next/server/webpack-runtime.js:25:42)
> Build error occurred
Error: Failed to collect page data for /
at /Users/kukodajanos/Workspace/serverless-chat/node_modules/next/dist/build/utils.js:949:15
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
type: 'Error'
}
Run Code Online (Sandbox Code Playgroud)