我正在尝试在简单对等方的构造函数中使用 react-native-webrtc
import wrtc from 'react-native-webrtc';
const peer = new SimplePeer({initiator: true, wrtc: wrtc});
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
ExceptionsManager.js:179 Error: No WebRTC support: Not a supported browser
Run Code Online (Sandbox Code Playgroud) 我正在使用puppeteer-stream来获取在服务器上运行的由 Node 控制的浏览器流。我可以毫无问题地将这个流写入文件。
我想通过 WebRTC 将此流传输到浏览器(基本上是为了查看浏览器实时运行的内容)。对于 webrtc,我尝试使用simple-peer,因为它已经为 Node 和浏览器端准备好了绑定。
但是,当我尝试将此流传递给 simple-peer 时,出现以下错误:
/Users/my_user/my_project/node_modules/simple-peer/index.js:286
stream.getTracks().forEach(track => {
^
TypeError: stream.getTracks is not a function
at Peer.addStream (/Users/my_user/my_project/node_modules/simple-peer/index.js:286:12)
Run Code Online (Sandbox Code Playgroud)
这是因为我拥有的 Stream 是 ReadableStream ,但 simple-peer (或大多数 webrtc 库)需要MediaStream。
如何将实时ReadableStream转换为可与 WebRTC 一起使用的MediaStream ?我找到了将MediaStreams转换为ReadableStreams的示例 ,例如这里,但反之亦然。
我在这里错过了什么吗?
我正在使用带有简单对等npm 包的webRTC应用程序。
我想知道所有这些主题(SFU.、Janus、mediasoup 或 medooze.)的目的是什么,以及如何集成它们以提高我的应用程序性能?
PS:我正在使用node.js服务器捆绑我的体系结构上的对等点之间的请求和信令。这些服务器和服务是否需要使我的应用程序性能良好?
希望我能在这里找到答案......
在寻找使用客户端到服务器模型(如 Discord)实现 WebRTC 之后,我得出的结论是,实现这一点的方法是拥有 2 个客户端——服务器和客户端。音频流可以叠加并以 1 个单流发送回用户。
后端/server.js
const clientPeer = new Peer({ initiator: true, wrtc });
clientPeer.on('connect', () => console.log('hi client, this is server'));
clientPeer.on('data', (data) => console.log('got a message from client peer: ', data));
Run Code Online (Sandbox Code Playgroud)
前端/index.js
serverPeer.on('connect', () => console.log('Connected to server'));
serverPeer.on('stream', async (stream) => {
const video = document.createElement('audio');
('srcObject' in video)
? video.srcObject = stream
: video.src = window.URL.createObjectURL(stream);
await video.play();
});
Run Code Online (Sandbox Code Playgroud)
我将如何实现在客户端和服务器之间发送媒体流?
我希望你们一切都好
我是 webRTC 的初学者,很抱歉,如果我的问题感觉像菜鸟一样,但我想知道是否有任何正确的方法来关闭对等点之间的连接,特别是使用 simple-peer.js,期待您的精彩回复
这是我的示例反应代码,
if (navigator.getUserMedia) {
navigator.getUserMedia({ audio: { echoCancellation: true }, video: true }, stream => {
let peer = new Peer({
initiator: this.props.isInitiator,
stream
});
this.localStream.current.srcObject = stream;
this.localStream.current.play();
peer.on('signal', (data) => {
socket.emit('offer', { data: JSON.stringify(data), conversation_id: this.props.conversation_id })
});
socket.on('offer', (data) => {
peer.signal(JSON.parse(data))
})
socket.on('DESTROY-VIDEO-CALL-SESSION', () => {
stream.getTracks().forEach(track => track.stop());
peer.removeAllListeners();
peer.destroy();
});
peer.on('stream', (streamData) => {
this.remoteStream.current.srcObject = streamData;
this.remoteStream.current.play();
});
this.setState({
endCall: () => {
socket.emit('VIDEO-CALL-ENDED', this.props.conversation_id);
}
}) …Run Code Online (Sandbox Code Playgroud) 我正在创建一个系统,使用户能够在连接到同一 wifi 网络的设备之间共享文件。我想要一个所有已连接设备的列表,以便我可以选择要发送到的设备(使用 simplepeer JS)。
我已经创建了一个可以使用 simplepeer JS 共享文件的小程序
<p>Your id</p>
<div>
<textarea id="yourId"></textarea>
</div>
<div><button id="connect_bt">Connect</button></div>
<div style="margin-bottom:20px;">
<p>Other id</p>
<div>
<textarea id="otherId"></textarea>
</div>
<div></div>
</div>
<div>
<textarea id="message_input"></textarea>
<button id="send_message">Send message</button>
</div>
<pre id="messages"></pre>
<script src="simplepeer/simplepeer.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
var peer = new SimplePeer({
initiator: location.hash === '#init',
trickle: false
});
peer.on('signal', function(data) {
document.getElementById('yourId').value = JSON.stringify(data);
});
document.getElementById('connect_bt')
.addEventListener('click', function() {
var other_id = JSON.parse(document.getElementById('otherId').value);
peer.signal(other_id);
});
document.getElementById('send_message')
.addEventListener('click', function() {
var message = document.getElementById('message_input').value;
peer.send(message);
});
peer.on('data', function(data) { …Run Code Online (Sandbox Code Playgroud) 我目前正在学习 WebRTC 并使用 simple-peer 和 React 和 Socket.io 的 npm 包。当我尝试致电用户时,就会显示此错误
_stream_readable.js:529 Uncaught ReferenceError: process is not defined
at emitReadable (_stream_readable.js:529:1)
at onEofChunk (_stream_readable.js:506:1)
at readableAddChunk (_stream_readable.js:255:1)
at Readable.push (_stream_readable.js:241:1)
at index.js:448:1
Run Code Online (Sandbox Code Playgroud)
我的 React 组件代码
const myVideoElement = useRef();
const peerVideoElement = useRef();
const chatInfo=useRef();
const peerStream=useRef();
Run Code Online (Sandbox Code Playgroud)
function startCall(){
const peer=new SimplePeer({
initiator:true,
trickle:false,
stream:stream,
})
peer.on('signal',(data)=>{
socket.emit('calluser',{userToCall:chatInfo.current.userToCall,url:chatInfo.current.url,signalData:data,from:userId});
});
peer.on('stream',(stream)=>{
if(peerVideoElement.current){
peerVideoElement.current.srcObject=stream;
}
socket.on('callaccepted',(data)=>{
peer.signal(data);
})
})
}
Run Code Online (Sandbox Code Playgroud)
function acceptCall(){
setIsCallAccepted(true);
const peer = new SimplePeer({
initiator: false,
trickle: false, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用简单对等库来建立浏览器到浏览器的 WebRTC 连接(数据通道)。我的理解是(也许我有一些误解),为了让两个浏览器通过 WebRTC 连接,它们必须交换 SDP 数据并执行 NAT 遍历。为了做到这一点,可以实现一个 STUN 服务器。
在 simple-peer 库中,他们声明 simple-peer 没有实现信令协议,但它确实提供了一种提供 STUN/ICE 服务器的方法。考虑来自其网格示例的以下三个 HTML 文件:
peer1.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Peer1</title>
</head>
<body>
<script src="../../js/simplepeer.min.js"></script>
<script>
// These are peer1's connections to peer2 and peer3
var peer2 = new SimplePeer({ initiator: true, config: {
iceServers: [
{urls: 'stun:stun.a-mm.tv:3478'}
]
} })
var peer3 = new SimplePeer({ initiator: true, config: {
iceServers: [
{urls: 'stun:stun.a-mm.tv:3478'}
]
} })
peer2.on('signal', data => {
console.log(data) …Run Code Online (Sandbox Code Playgroud) let file = fileUpload.files[0];
let offset = 0;
let chunkSize = 1024*1024*16;
file.arrayBuffer().then((buffer) => {
while(buffer.byteLength){
const chunk = buffer.slice(0, chunkSize);
buffer = buffer.slice(chunkSize, buffer.byteLength);
dataChannel.send(chunk);
}
})
Run Code Online (Sandbox Code Playgroud)
它适用于小文件,但适用于大文件。
simple-peer ×9
webrtc ×9
javascript ×4
node.js ×3
p2p ×2
html ×1
janus ×1
mediasoup ×1
mediastream ×1
networking ×1
node-streams ×1
peer ×1
peerjs ×1
react-native ×1
reactjs ×1
webpack ×1
websocket ×1