WebRTC简单测试createDataChannel
·
const startButton = document.getElementById('startButton');
const localVideo = document.getElementById('localVideo');
const remoteVideo = document.getElementById('remoteVideo');
let pc;
let localStream;
const signaling = new WebSocket('ws://127.0.0.1:3333/ws/chat');
signaling.onmessage= e => {
console.log(e.data)
var msg=JSON.parse(e.data);
switch (msg.type) {
case 'offer':
handleOffer(msg);
break;
case 'answer':
pc.setRemoteDescription(msg);
break;
case 'candidate':
pc.addIceCandidate(msg.candidate);
break;
}
}
//navigator.mediaDevices.getUserMedia({audio: true, video: true}).then(loStream=>{localStream=loStream;localVideo.srcObject = loStream});
startButton.onclick = async function getmedia() {
makeCall();
};
//ubuntu搭建简易stun服务器只需要两个命令:sudo apt install stun-server;stund -h 127.0.0.1默认端口3478,软件只有几十kb
let serverConfig = {
"iceServers": [
{ "urls": "stun:xxx.xxx.net:3478"
}
]
};
function createPeerConnection() {
pc = new RTCPeerConnection(serverConfig);
pc.onicecandidate = e => { signaling.send(JSON.stringify({type: 'candidate',candidate:e.candidate}));}
//pc.ontrack = e => remoteVideo.srcObject = e.streams[0];
//localStream.getTracks().forEach(track => pc.addTrack(track, localStream));
}
async function makeCall() {
await createPeerConnection();
sendChannel=pc.createDataChannel('sendDataChannel');
sendChannel.addEventListener('open', onopen);
const offer = await pc.createOffer();
signaling.send(JSON.stringify({type: 'offer',sdp: offer.sdp}));
await pc.setLocalDescription(offer);
}
async function handleOffer(offer) {
await createPeerConnection();
await pc.setRemoteDescription(offer);
const answer = await pc.createAnswer();
signaling.send(JSON.stringify({type: 'answer', sdp: answer.sdp}));
await pc.setLocalDescription(answer);
pc.addEventListener('datachannel', event=> event.channel.onmessage = onReceiveMessageCallback);
}
function onopen(){
console.log("发送")
sendChannel.send("发送的数据")
}
function onReceiveMessageCallback(event) {
console.log(event.data)
}
node服务端websocket转发控制消息:
const WebSocket = require('ws');
let wss = new WebSocket.Server({port: 3333});
var t=0,a,b;
wss.on('connection', function (ws) {
if (t===0){
a=ws
t=1
console.log("a")
}
else {
b=ws
t=0
console.log("b")
}
ws.on('message', onMessage);
})
function onMessage(msg){
//console.log(msg)
try {
if(this==a)
b.send(msg)
else
a.send(msg)
}
catch(e){}
}
ubuntu搭建简易stun服务器只需要两个命令:sudo apt install stun-server;stund -h 127.0.0.1默认端口3478,软件只有几十kb
本测试可以通过p2p传输数据,没有测试turn。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)